Autoit, langen Text als Variable setzen und ausgeben?

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

corona2017 
Fragesteller
 04.11.2019, 18:25

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?

0
PeterKremsner  04.11.2019, 18:50
@corona2017

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.

0
corona2017 
Fragesteller
 04.11.2019, 19:22
@PeterKremsner

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?

0
PeterKremsner  04.11.2019, 23:27
@corona2017

⁹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
0
corona2017 
Fragesteller
 05.11.2019, 00:13
@PeterKremsner

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

0
PeterKremsner  05.11.2019, 11:56
@corona2017

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.

1
corona2017 
Fragesteller
 05.11.2019, 14:03
@PeterKremsner

Danke, werde dies dann heute probieren und mir genauer anschauen. .:)

0