FileWrite funktioniert nicht so wie es soll

  • hey, ich lasse aus einem array eine mehrzeilige txt schreiben und bekomme merkwürdige fehler.

    Code
    For $i = 0 To 9
    	FileWrite($txtDir, $aTest[$i] & @CRLF)
    	Next

    das array enthält 10 verschiedene zahlen, die untereinander in eine .txt geschrieben werden sollen.

    das ganze funktioniert auch. wenn ich die .txt öffne, sieht das ganze so aus:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    wenn ich jetzt aber die zahlen mit FileReadLine der reihe nach auslesen möchte, funktioniert es nicht.
    das problem liegt darin, wenn ich die zahlen aus der von autoit geschriebenen .txt rauskopiere, sieht das ganze so aus:
    1

    2

    3

    4

    5

    6

    7

    8

    9

    10


    warum sind da leere zeilen zwischen, obwohl diese in der .txt nicht angezeigt werden ? kann man das irgendwie ausstellen, dass autoit das so schreibt oder liegt es garnicht an autoit ?

    mfg

    Edit:

    Code zum auslesen:


    alle 2 zeilen ist die msgbox leer, weil angeblich die zeile leer ist.

    Einmal editiert, zuletzt von Lanealine (6. Juli 2016 um 17:59)

    • Offizieller Beitrag

    Ich sehe keine Fehler in deinem Code und bei mir wird auch nicht jede 2. Zeile Leer ausgegeben.
    Btw, warum benutzt du nicht gleich FileWriteLine? Da kannst du dir das @CRLF pro Zeile gleich sparen.

  • @crlf sind die zeichen @cr und @lf hintereinander. Ich denke, das FileReadLine nimmt die Zeichen einzeln.
    (Siehe Hilfe: Returns the text of the line read, any newline characters ( Chr(10) or @LF ) at the end of a line read in are automatically stripped.)
    Außerdem solltest du fileopen nutzen, da die datei sonst bei jedem aufruf der funktion geöffnet, ausgelesen und wieder geschlossen wird.

    Besser:

    AutoIt
    $arData=StringSplit(FileRead($file),@crlf,1+2)
    for $i=0 to UBound($arData)-1 step 1
    	MsgBox(48,"",$arData[$i])
    next

    Ansonsten sieh dir mal $aTest[$i] an. Dann müsste dort ein Zeilenumbruch drinstehen.

    • Offizieller Beitrag

    FileReadLine ist es egal ob am Zeilenende @CR, @LF oder auch @CRLF steht. Hab ich eben getestet. ;)

  • Rumgeeiere wieder mal... :Face:

    Textdatei in Scite öffnen, im Reiter "Ansicht" jeweils den Haken bei "Leerzeichen" und "Zeilenende" setzen, Screenshot machen, posten, Problem erledigt...
    Alternativ die Textdatei im Hexeditor öffnen, Screenshot posten, Problem ebenfalls erledigt...

    Wieso dann das Problem erledigt ist?!
    Weil der TE dann sofort sieht, ob jetzt das Lesen oder das Schreiben der Datei das "Problem" ist! Ich frage mich, wieso dazu ein Thread eröffnet werden muss.

    Allein beim Titel "Filewrite funktioniert nicht so wie es soll" kommt mir ehrlich gesagt die Galle hoch!
    Wenn das so wäre, dann hätte die gesamte AutoIt-community seit 10 Jahren ein wirklich ernsthaftes Problem. Filewrite() funktioniert einwandfrei, soviel steht fest! Genauso wie alle anderen File/Write/Read-Funktionen.

    das problem liegt darin, wenn ich die zahlen aus der von autoit geschriebenen .txt rauskopiere, sieht das ganze so aus:

    Der größte Mist ever! Beim "rauskopieren" sieht man definitiv GARNICHTS, den Text sieht man nur, wenn man etwas irgendwo anders REINKOPIERT! Und wo hat der TE reinkopiert? Eben, 6, setzen....
    Wenn nämlich das verwendete Programm CR und LF als Einzelzeichen interpretiert (und das ist in einigen Teilen der Welt standard!), dann ist die dargestellte Textanzeige nämlich völlig normal...

    Jetzt reg ich mich wieder ab...btw. wieder einer auf der Ignore-List!

  • @Raupi vielen dank für die mühe. das mit dem FileReadLine habe ich auch getestet, allerdings hat das nicht so richtig geklappt, weil zwischen den zeilen leer zeilen waren(obwohl man diese im editor nicht sehen konnte). Das wäre jetzt aufjedenfall der nächste schritt, den ich versucht hätte zu benutzen :thumbup:

    @Kanashius vielen lieben dank! deine code läuft bei mir perfekt! :thumbup:

    Andy: tut mir leid wenn du einen schlechten arbeitstag hattest, aber die anderen hier haben mein problem direkt erkannt... ich bin leider noch nicht so richtig drin im autoitbusiness, daher weiß ich auch nicht was für infos man alle benötigt, um bestimmte probleme zu lösen. :theke:

  • das mit den nicht druckbaren zeichen habe ich bei word schon nachgeschaut. aus irgendeinem grund macht autoit da ein "doppelenter" obwohl ich nur 1x @crlf eingestellt habe. (automatisch macht filewrite keine enter hinter jeden eintrag, oder ?)

  • Nein. Aber @crlf besteht, wie ich oben schrieb aus @cr und @lf. Beides Zeichen für Zeilenumbrüche. Normalerweise ist bei Unix @lf der Zeilenumbruch und bei Windows @crlf.
    Und genau das meinte ich. Word ist für soetwas vollkommen ungeeignet. Notepad++ oder ähnliche Texteditoren nutzen, und dann nicht druckbare Zeichen anzeigen.
    Wenn das nicht hilft, hilft nurnoch der Hexeditor.
    Bei Word hast du doch keine Ahnung, warum da mehrere Umbrüche sind.