Problem bei Laden/Speichern einer Textdatei

  • Habe eine Textdatei, in der in jeder Zeile eine URL gespeichert wird.
    Durch Laden soll jede einzelne Zeile der URL in das Edit-Feld geladen werden, um dann weiterverabeitet zu werden.
    Leider habe ich das Problem, dass nach einem Ladevorgang immer ein Enter offenbar zu viel ist und der Inhalt des Editfelds so aussieht:
    [Blockierte Grafik: http://www.abload.de/thumb/27-06-201120-13-579iwo.png]

    Ich habe bereits Varianten mit @CR, @LF und @CRLF probiert, allerdings ohne Erfolg.
    Beim Speichern funktioniert alles problemlos.

    [autoit]

    Case $Laden

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen($datei, 0)
    ; Prüfen, ob Datei eingelesen wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; Zeilen des Textes einlesen bis EOF
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    $summe = $summe & $line &@CRLF
    WEnd
    FileClose($file)

    [/autoit]


    [autoit][/autoit][autoit][/autoit][autoit]

    Case $Speichern
    $file = FileOpen($datei, 2)
    ; Prüfen, ob Datei eingelesen wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geschrieben werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    $text = GUICtrlRead($Edit1)
    $i = 1
    While $i < UBound($neu, 1) - 1

    [/autoit][autoit][/autoit][autoit]

    $neu = StringSplit($text, @LF)
    If $neu[0] = 1 Then
    Else
    FileWriteLine($datei, $neu[$i] & @CRLF)
    $i += 1
    EndIf
    WEnd
    FileClose($file)
    MsgBox(0, "Info", "Gespeichert")
    ;Msgbox(0,"Übersicht",$summe)
    ;GuiCtrlSetData($Edit1,$summe)

    [/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von hoppla (28. Juni 2011 um 08:36)

  • Ich darf dir mal die Funktion

    [autoit]

    _FileReadToArray()

    [/autoit]


    ans Herz legen

    Edit: Ansonsten hier ein Tip, der mir geholfen hat:
    Öffne deine Text-Datei mit dem Scite-Editor und wähle unter Ansicht den Menüpunkt "Zeilenende" (Ctrl+Shift+9) aus

    UNPLEASANT SPOILER

    You just lost the game!

    Einmal editiert, zuletzt von shadow667 (27. Juni 2011 um 23:10)

  • Hi Moin!


    [autoit]

    FileWriteLine($datei, $neu[$i] & @CRLF)
    ; mach daraus nur @LF

    [/autoit]

    oder schreibe den gesamten Text auf einmal in die Datei .


    Lg Kleiner

  • Mal anders rum gefragt:
    Wie wird die Datei erstellt? Existiert die schon vor dem AutoIt-Script oder fügst du die Links erst mit dem Script in die Textdatei ein?

    UNPLEASANT SPOILER

    You just lost the game!

  • Wenn du die Datei schreibst fügst du am ende ein @CRLF an

    Spoiler anzeigen
    [autoit]

    FileWriteLine($datei, $neu[$i] & @CRLF)

    [/autoit]

    Wenn du die Datei dann mit FileReadLine() einließt werden alle newlines am Ende automatisch abgeschnitten, nicht aber der Carriage Return (CR)
    Ausschnitt aus dem Hilfetext dazu

    Spoiler anzeigen

    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.
    http://www.autoitscript.com/autoit3/docs/f…ileReadLine.htm

    Das heißt, beim einlesen musst du nur noch @CR anfügen.

    Spoiler anzeigen
    [autoit]

    FileWriteLine($datei, $neu[$i] & @LF)

    [/autoit]

    Kleiner hat das auch schon gepostet, aber dmit wirds vielleicht noch verständlicher :)

  • Hallo!

    Danke für die Antworten, wie im ersten Post beschriebn, habe ich diese Variante bereits getestet. Dann steht aber alles in einer Wurst in der Textdatei:

    [Blockierte Grafik: http://www.abload.de/img/28-06-201116-37-43xjua.png
    Geändert habe ich das wie gewünscht so:

    [autoit]

    Case $Laden

    [/autoit][autoit][/autoit][autoit]

    $file = FileOpen($datei, 0)
    ; Prüfen, ob Datei eingelesen wurde
    If $file = -1 Then
    MsgBox(0, "Fehler", "Die Datei konnte nicht geöffnet werden.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; Zeilen des Textes einlesen bis EOF
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    $summe = $summe & $line &@LF
    WEnd
    FileClose($file)

    [/autoit]

    @Shadow: Ja die Datei existiert schon vorher im folgenden TXT format:
    url1.com
    url2.com
    usw


    Noch jemand eine Idee?


    Problem 2:
    Dir URLs sollen dann geöffnet werden. Seltsamerweise öffnet er die URLs obwohl er das gar nicht machen sollte, nach dem ja jetzt die lange Wurst in der Textbox steht...Ich blick da nicht mehr durch. Schließlich hole ich ja extra den Text nochmal aus der Textbox.

    [autoit]

    Case $URLsoeffnen
    $text = GUICtrlRead($Edit1)
    $i = 1
    While $i < UBound($neu, 1) - 1
    $neu = StringSplit($text, @CRLF)
    If $neu[0] = 1 Then
    Else
    _IENavigate($oIE, "http://anonym.to/?" & "http://" & $neu[$i])
    Sleep(10000)
    _IELoadWait($oIE)
    $i += 1
    EndIf

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit]
  • Oscar : Bei deiner Version ändert sich nichts, außer, dass die URLs gar nicht mehr geöffnet werden...
    Das Problem kann eigentlich nur hier in Zeile 5 liegen, da hier der Ladevorgang abläuft.

    [autoit]

    ; Zeilen des Textes einlesen bis EOF
    While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop
    $summe = $summe & $line &@LF
    WEnd
    FileClose($file)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    GUICtrlSetData($Edit1, $summe)
    $summe = ""

    [/autoit]

    @LF: alles in steht in einer Wurst in der Editbox
    @CRLF: alles steht zwar untereinander, aber ein "Enter" zu viel
    @CR: alles steht in einer Wurst in der Editbox
    ohne jegliches "@": alles steht in einer Wurst in der Editbox

    Gibt es ja nicht, dass keiner einen Plan hat.

  • Zitat

    Oscar : Bei deiner Version ändert sich nichts, außer, dass die URLs gar nicht mehr geöffnet werden...


    Hast du mich mit Oscar verwechselt oder wie? :huh:
    Ups. Hab noch was vergessen. ^^

    [autoit]

    $aNeu = StringRegExp($sText, "(?m)^(.+)\v$", 3)

    [/autoit]
  • name22: ja habe ich.
    Deine Variante geht zur Not, es scheint jetzt zumindest insofern zu funktionieren, dass er kein leeren Zeilen mehr öffnet.
    Leider habe ich noch immer das Problem, dass jetzt im Textfeld noch immer ein "Enter" zu viel drinnen steht.
    Außerdem: läuft das teil jetzt in der endlossschleife...

    Einmal editiert, zuletzt von hoppla (3. Juli 2011 um 19:16)

  • Zitat

    Leider habe ich noch immer das Problem, dass jetzt im Textfeld noch immer ein "Enter" zu viel drinnen steht.


    Kannst du mal einen Teil der Originaldatei kopieren? Ansonsten können wir irgendwie nur raten wie die Zeilenumbrüche deiner Datei gestaltet sind.

  • Zitat

    Wo liegt denn der Fehler?


    In deinem Script, das du mir aus irgendeinem Grund per PN geschickt hast, verwendest du die hier vorgeschlagenen Möglichkeiten an falscher Stelle und beschwerst dich dann das es in dem Edit Control falsch angezeigt wird. :pinch:

  • Naja, das hilft weder mir noch anderen. Kannst du mir nicht einfach sagen, wo genau mein Fehler liegt bzw. welche Zeile ich austauschen muss? Ich habe bereits mehrfach erfolglos nach dem Fehler gesucht...

    Gruß

  • Zitat

    Naja, das hilft weder mir noch anderen.


    Es hilft weder dir noch anderen, wenn du hier über ein Script diskutierst das nur du und ich kennen. :thumbdown:

    Zitat

    Kannst du mir nicht einfach sagen, wo genau mein Fehler liegt


    Das habe ich bereits getan, sowohl in der PN als auch per Beitrag. Du verwendest keinen der Vorschläge aus dem Forum in deinem Script um den Inhalt der Textdatei aufzuteilen und in das Editfeld einzulesen. Und dann wunderst du dich wieso es keinen Unterschied macht?