Bestimmte Werte durch andere ebenfalls bestimmte Werte ersetzen

  • Hallo zusammen,

    ich knacke zur Zeit an einem wahrscheinlich einfach zu lösendem Problem.

    ich habe eine Datei (.csv) die jeweils 3 Spalten hat.

    zB

    9980765;5229;EPM ARTS
    9980765;5228;EPM ARTS
    9980765;5225;EPM ARTS
    9980765;5232;EPM ARTS
    9145041;12587;
    9145041;12585;
    9145041;4694;
    9145041;7833;
    9145041;12583;
    9146032;;
    6433161;19193;12/2010

    hier möchte ich nun den ersten wert (vor dem ersten ;) ersetzen.
    Und zwar auch durch vorgegebene Werte.
    Die zu ersetzenden Werte stehen in einer .txt (einspaltig)
    Die Werte gegen die Ausgetauscht werden sollen stehen ebenfalls in einer .txt (einspaltig)

    Ich kann das Problem aber nicht lösen...
    Ich habe nichtmal einen Ansatz...
    Ich hoffe jemand kann mir weiterhelfen.

    Vielen Dank im Voraus!

  • Datei laden und jede Zeile mit StringSplit zerlegen (siehe AutoIt Help).
    Resultat ist ein Array mit so vielen Einträgen, wie du Spalten hast.

    Für weitgehend mundfertige Beispiele suche im Forum mal nach "Ini-Datei" und "CSV". Da findest Du Beispiele, wie man Dateien lädt, zerlegt und wieder speichert.

    Dann müssen nur noch, in einer Schleife, die Werte ausgetauscht werden, was wohl keine Probleme bereiten sollte, wenn Du schon mal mit Arrays gearbeitet hast.

    Ich code, also bin ich!

  • Datei laden und jede Zeile mit StringSplit zerlegen (siehe AutoIt Help).
    Resultat ist ein Array mit so vielen Einträgen, wie du Spalten hast.

    Für weitgehend mundfertige Beispiele suche im Forum mal nach "Ini-Datei" und "CSV". Da findest Du Beispiele, wie man Dateien lädt, zerlegt und wieder speichert.

    Dann müssen nur noch, in einer Schleife, die Werte ausgetauscht werden, was wohl keine Probleme bereiten sollte, wenn Du schon mal mit Arrays gearbeitet hast.

    Vielen Dank, StringSplit hat mir geholfen, dankeschön!
    Manchmal hat man leider einfach ein Brett vorm Kopf X(

  • Hey,
    das geht mit nem RegEx weit einfacher, als mit StringSplit.

    Mit _FileReadToArray liest du die Datei als Zeilenweises Array aus (Zugriff auf Arrays bekannt?)

    Nun kannst du mit StringRegExpReplace wunderbar das Erste "Glied" der Kette replacen.
    Der Aufruf von StringRegExpReplace wie folgt:

    Code
    $String = "Test1;Test2;Test3"
    MsgBox(0, "", StringRegExpReplace($String, ".*?;", "Neuer Text;", 1))

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Zweifellos wird der Code dadurch kompakter. Meinetwegen auch "eleganter". Aber einfacher???
    Ich persönlich finde RegEx ja reichlich "advanced".
    Also bis man da durchsteigt ...

    Ich staune immer wieder, was damit alles geht, in verblüffend kompakter Form. Nur kann ich solchen Code nicht mal lesen. Meine eigenen Experimente damit waren schon immer ein frustrierendes, extrem fehlerträchtiges Herumprobieren, ohne den Hauch eines Durchblicks, was da passiert.

    Aber danke für den Einwurf; für fortgeschrittenere Programmierer ist das ein guter Hinweis, um die eigenen Fähigkeiten zu erweitern.

    Ich code, also bin ich!

  • Naja, was RegEx angeht bin ich wohl eher auf dem Level eines "Kann nen Pattern schreiben, tut was es soll, ist aber nicht optimiert".
    An sich ist es gar nicht mal so kompliziert, SEuBo hat hier ein sehr gutes Tutorial gelassen: StringRegExp Tutorial / Reguläre Ausdrücke in AutoIt
    Sehr empfehlenswert, habe mich damals auch damit eingearbeitet.
    Des Weiteren gibt es noch zig online Tutorials (PDFs, andere Websiten, Skripte von Vorlesungen) die das behandeln.
    Nach den ersten Versuchen, die man mal mit z.B. Quellcode von Websiten (ganz banale Skripte) oder ein paar Textdokumenten gemacht hat, ist man eigentlich auch schon für "den Kampf im Alltag" gewappnet.
    Sicher, man muss sich in ein neues Thema einlesen, aber mMn bringt es einem dann im späteren Verlauf doch was :)

    Anhang: Post 2000 :party:

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Oohhh, das verlinkte Tutorial sieht ja auf den ersten Blick wirklich großartig aus!
    Vielen Dank für den Hinweis; da hat SEuBo aber heftig Arbeit reingesteckt, Respekt!!! :thumbup:

    Und Dir, Xorinator: Herzlichen Glückwunsch zum 2000sten Beitrag! :thumbup:


    Edit: wobei es wahrscheinlich schon längst mehr als 2000 sind. Ich habe ja angeblich erst 20 ...

    Ich code, also bin ich!

  • Datei laden und jede Zeile mit StringSplit zerlegen (siehe AutoIt Help).

    _FileReadToArray kennt einen "Delimiter"-Parameter.
    In dem Fall wäre das Semikolon angebracht.
    Dann gibts direkt ein 2D-Array bei dem man nichts mehr splitten muss.
    Danach einfach in der ersten Spalte des Arrays alles gewünschte ersetzen und wieder mit _FileWriteFromArray (wieder Delimiter-Parameter nutzen) als CSV-Datei speichern.