Autoit, langen Text als Variable setzen und ausgeben?
Hallo,
wie ist es möglich einen langen Text, der in einer Textdatei liegt in eine Variable zu speichern? Und diesen dann mit "Send" wieder auszugeben? Ich selbst komme leider nicht darauf.
1 Antwort
Sollte eigentlich mit FileRead möglich sein:
https://www.autoitscript.com/autoit3/docs/functions/FileRead.htm
Allerdings sollte hier angemerkt werden, dass hierfür zunächst das ganze File in den RAM geladen wird und danach gesendet wird. Eventuell wäre es einfacher das File Stückweise zu lesen und auch Stückweise auszugeben.
Das geht indem du FileRead immer wieder aufrufst und prüfst ob das Ende des Files erreicht wurde. @error = -1
Nein mehere Dateien wären langsamer weil der Open Close Overhead größer wird.
Wie gesagt versuche nicht das ganze File aufeinmal aus zu lesen sondern zB immer nur 100 Zeichen aufeinmal. Die zu schreiben und dann wieder 100 Zeichen zu lesen und zu schreiben.
FileOpen ("links.txt", 0)
$text2 = FileRead ("links.txt" , 100)
@error = -1
MouseClick ( "left", 1234, 115 ,1 )
Send ($text2)
$text3 = FileRead ("links.txt" , 100)
Send ($text3)
$text4 = FileRead ("links.txt" , 100)
Send ($text4)
Der Text wird immer wieder von vorne angegeben. Verstehe die Prüfung mit @error -1 nicht. Wie ist die einzubauen?
⁹Du prüfst hier ja nicht auf @error sondern setzt es zu 1. Zudem solltest du FileRead mit einem Filehandle ausführen und nicht mit dem Filepath.
Im Endeffekt wirds zu etwas ähnlichen wie
do
$text = FileRead($handle,100)
Send($text)
until @error = -1
Habe es versucht, aber es wird immer ab dem zweiten versucht die zweite Zeile ausgegeben in der dauerschleife, er springt nicht zur nächsten Zeile mehr ab der zweiten. Bin Anfänger und lerne erst seit paar Tagen Autoit, mir fehlen daher oftmals etwas an Wissen.
FileOpen ($handle,0)
MouseClick ("left", 1234, 115 ,1 )
do
$text = FileRead ($handle,100)
Send ($text)
until @error = -1
Stimmt mir ist gerade aufgefallen da ist ein Fehler in meinem Beispiel
Do
$txt = FileRead($handle,100)
$readError = @error
Send($txt)
Until $readError = -1
Das Problem war, dass jeder Funktionsaufruf @error neu setzt. Man muss daher den Wert von @error speichern und am Ende der Schleife prüfen, das liest solange bis das File komplett gelesen wurde. Btw es sendet die zeichen 1:1 wie sie im File drinnen stehen, also auch Leerzeichen etc.
Wenn du irgendeine Formattierung hast zB zusammenhänge Keys pro Zeile etc. ist das der falsche Weg. In diesem Fall solltest du statt Read FileReadLine verwenden
Es ist außerdem einfacher wenn du mal mit dem Code beginnst:
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
$handle = FileOpen("links.txt",$FO_READ)
Do
$txt = FileRead($handle,100)
$readError = @error
MsgBox($MB_OK,"Test",$txt)
Until $readError <> 0
Das <> 0 am Schluss prüft auf unterschiedlich 0. Der Grund dahinter ist, dass jede Wert von @error außer 0 als Fehler gewertet wird.
Es ist außerdem gut wenn du für bestimmte Funktionen die vordefinierten Konstanten verwendest, also bei FileOpen nicht 0 sondern $FO_READ. Der Grund dahinter ist, dass sich solche Flags im extremfall zwischen Releases ändern können. Es kann also sein, dass $FO_READ in einer zukünftigen Version nicht mehr 0 ist sondern 1 und dann würde dein Skript nicht mehr funktionieren.
Danke, werde dies dann heute probieren und mir genauer anschauen. .:)
Danke, habe dies auch davor probiert mit FileOpen und FileRead, aber habe vergessen die Anzahl der Zeichen anzugeben, daher kam nix. Hat aber nun funktioniert, nur dauert es sehr lange bis der ganze lange Text ausgegeben wurde. Wenn man dies aufteilt auf mehrere Datein und diese dann mehrmals ausliest, geht dies dann schneller?