StringSplit String enthält Eingabezeichen (ENTER) somit funktioniert die Aufteilung nicht richtig

  • Ich möchte aus einer CSV Datei mit Hilfe von StringSplit die einzelnen
    Daten der Zeile weiterverwenden.
    Da die CSV aus einem Export eines anderen Programms ist werden da auch die (Enter Zeichen) mit Exportiert.

    Beispieldaten
    45189;Beschreibung: (Enter Zeichen) Farbe rot (Enter Zeichen) Masse 4,5cm;

    In meinem Programm sieht das dann so aus
    45189
    Beschreibung:
    Farbe rot
    Masse 4,5cm


    Ich habe dann folgendes Befehle geschrieben.
    Ohne Enterzeichen funktioniert es gut.

    [autoit]


    $date = FileReadLine("Test.csv",1)
    $k = StringSplit($date,';',1)
    ConsoleWrite( $k[1])

    [/autoit]

    Jetzt brauche ich eine Lösung das zwischen den Trennzeichen ( ; ) die (Enter Zeichen) innerhalb der Werte nicht beachtet werden.

    Vielleicht hat jemand eine einfache Lösung.

    Einmal editiert, zuletzt von TEKBUY (19. Dezember 2011 um 00:19)

  • Danke für die Hilfe
    jetzt weis ich aber leider nicht genau wo ich jetzt deine Hilfe einbauen soll bei meinem Programm.

    [autoit]


    $date = FileReadLine("Test.csv",1)
    $k = StringSplit($date,';',1)
    ConsoleWrite( $k[1])

    [/autoit]

    Als Ersatz für

    [autoit]


    $k = StringSplit($date,';',1)

    [/autoit]
  • Probiere es mal so:

    [autoit]


    $date = FileReadLine("Test.csv",1)
    $k = StringSplit(StringReplace(StringStripCR($date), @LF, ""),';',1)
    ConsoleWrite( $k[1])

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Geht leider immer noch nicht.
    Es wird nicht das Trennzeich ' ; ' nicht beachtet und der Sring beim (Enter Zeichen) getrennt.

  • Ich habe das Programm CSV-Editor V0.8 (Stand 23.04.2010) mal getestet auch da wird das (Enter Zeichen) als Trennung benutz und somit
    werden die Daten die in einer Zeile stehen müssten in die Nächste verschoben.

    [Blockierte Grafik: http://bilder.tekbuy.net/bilder/Problem.jpg]

    So sie die Beispieldatei aus.
    Die erste Zeile wird richtig angezeigt.
    "Beschreibung: Farbe rot Masse 4,5cm"
    bei der Zweiten ist dann schluss bei
    "Beschreibung:"

    Einmal editiert, zuletzt von TEKBUY (18. Dezember 2011 um 21:27)

  • Lade doch mal deine Test.csv hoch! Dann können wir auch mal testen.

    Bist du dir sicher, dass diese Zeichen Chr(10) bzw. Chr(13) sind?

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    • Offizieller Beitrag

    Mal als Tipp: csv-Dateien immer zu .txt umbenennen, wenn du wissen willst, was wirklich drinsteckt (oder halt sowieso mit Texteditor öffnen)
    Deine Datei sieht so aus:
    autoit.de/wcf/attachment/14800/
    M.M. weit entfernt von einer ordentlichen csv.
    Mit einem Replace aller LF mit Leerstring sollte eigentlich dein Problem gelöst sein.

  • Die CSV Datei ist auch nur zum Testen die eigentliche Datei ist Komplexer, aber das Problem ist das selbe.
    Ich habe von einem User als Tip bekommen mal das zu Testen

    [autoit]


    $k = StringSplit(StringReplace(StringStripCR($date), @LF, ""),';',1)

    [/autoit]

    Da ist Replace enthalten geht aber auch nicht.

    Ich benutze erst seit ca. zwei Wochen Autoit, daher brauche ich etwas mehr Info wenn mir jemand einen Tip gibt.

    Einmal editiert, zuletzt von TEKBUY (18. Dezember 2011 um 22:45)

    • Offizieller Beitrag

    Also ich gehe davon aus, dass die erste Zeile KEINE Datenzeile ist, sondern eine Art Überschrift.
    Wenn das nicht so ist, vergiß was jetzt folgt.

    Dann kannst du folgendermaßen auflösen:

    [autoit]

    ; simuliert die eingelesene Datei:
    $csv = '45189;Beschreibung: Farbe rot Masse 4,5cm;' & @CRLF & _
    '45189;Beschreibung:' & @LF & _
    'Farbe rot' & @LF & _
    'Masse 4,5cm' & @LF & _
    ';' & @CRLF

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

    ConsoleWrite(StringReplace(StringReplace(StringReplace($csv, @CRLF, '|'), ';|', @LF, 0, 1), ';', @LF, -1) & @CRLF)

    [/autoit]


    Du erhältst dann:

    Code
    45189;Beschreibung: Farbe rot Masse 4,5cm
    45189
    Beschreibung:
    Farbe rot
    Masse 4,5cm
  • 1. und 2. Zeile habe die gleichen Daten. 1. Zeile ist keine Überschrift
    Ich wollte nur aufzeigen das die Erste Zeile ohne (Enter Zeichen) richtig verarbeitet wird aber
    meine Programm exportiert das (Enter Zeichen ) so wie in der 2. Zeil.

    Mein Problem ist das dann der StringSplit nicht mein Trennzeichen " ; " sondern beim (Enter Zeichen) gemacht wird.

    Richtig ist:

    Spoiler anzeigen


    $date = FileReadLine("Test.csv",1)
    $k = StringSplit($date,';',1)
    ConsoleWrite($k[2])


    Ausgabe In Console "Beschreibung: Farbe rot Masse 4,5cm"

    Falschist:

    Spoiler anzeigen

    $date = FileReadLine("Test.csv",2)

    $k = StringSplit($date,';',1)

    ConsoleWrite($k[2])

    Ausgabe In Console "Beschreibung:"

    • Offizieller Beitrag

    Das Problem ist: Du stellst keine verwertbaren Testdaten zur Verfügung. Was soll man mit zwei Datensätzen anfangen? Erst ab dem dritten ist sichtbar ob dieser sich wie der zweite darstellt.
    Wenn alle Datensätze identisch sind außer Eintrag 1, dann mußt du zweistufig abarbeiten. Zeile 1 alleine und dann den Rest.

  • Ich habe jetzt drei Datensätze eingestellt.
    Ich möchte jetzt das aus der zweiten Zeile der zweite Datensatz nach dem Trennzeichen ";" Datensatz 2 Beschreibung:Farbe rot Masse 4,5cm"
    in der Console erscheint.
    Doch jetzt erscheint nur "Datensatz 2 Beschreibung:"

    Ich hoffe das meine Informationen ausreichen.

    Ich danke allen die mir schon Tips gegeben haben.

    Versucht habe ich es auch schon mit

    [autoit]

    $date = StringReplace(FileReadLine("Test.txt",2), @LF ,"")

    [/autoit]
    • Offizieller Beitrag

    OK, dann mach es so ab Zeile 2. Dann ist die Darstellung identisch wie Zeile 1 und somit kannst du ja die CSV normal bearbeiten:

    [autoit]

    ;~ '11111;Datensatz 1 Beschreibung: Farbe rot Masse 4,5cm;' & @CRLF ; Zeile 1 belassen
    $csv = '22222;Datensatz 2 Beschreibung:' & @LF & _
    'Farbe rot' & @LF & _
    'Masse 4,5cm' & @LF & _
    ';' & @CRLF & _
    '33333;Datensatz 3 Beschreibung:' & @LF & _
    'Farbe rot' & @LF & _
    'Masse 4,5cm' & @LF & _
    ';' & @CRLF

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

    ConsoleWrite(StringReplace(StringReplace(StringReplace($csv, ';' & @CRLF, '|', 0, 1), @LF, ' '), ' |', @CRLF, 0, 1) & @CRLF)

    [/autoit]

    Das ergibt:

    Code
    22222;Datensatz 2 Beschreibung: Farbe rot Masse 4,5cm
    33333;Datensatz 3 Beschreibung: Farbe rot Masse 4,5cm

    - Also mit FileReadLine die erste Zeile auslesen und zwischenspeichern.
    - Mit _FileWriteToLine() kann die erste Zeile dann gelöscht werden.
    - Nun im Inhalt wie vorab gezeigt Ersetzungen vornehmen.
    - Zwischengespeicherte Zeile1 und bearbeiteten Rest in eine neue Datei schreiben.

  • Probiere es mal damit:

    [autoit]


    $date = FileRead("Test.csv")
    $k = StringSplit($date, ";", 2)
    Global $new
    For $i = 0 to UBound($k) - 1
    If Mod($i + 1, 2) Then
    $k[$i] = StringReplace(StringStripCR($k[$i]), @LF, "")
    Else
    $k[$i] = StringReplace(StringStripCR($k[$i]), @LF, " ")
    $new &= $k[$i - 1] & ";" & StringStripWS($k[$i], 3) & ";" & @CRLF
    EndIf
    Next
    $hFile = FileOpen("New.csv", 2)
    FileWrite($hFile, $new)
    FileClose($hFile)
    Run("Notepad.exe" & " New.csv")

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯