TXT/CSV Batch Editing

  • Moin, ich habe etwa 700 CSV Dateien, die für die Weiterverarbeitung editiert werden müssen.

    Das wäre sicherlich ein Fall für einen Batch code, worin ich aber nicht geübt bin.

    Ich suche daher eine Software mit der ich CSV Dateien eine nach der anderen automatisiert editieren kann.

    Zunächst könnte ein Batch Rename basierend auf Erstelldatum starten.

    Danach sollten einzelne Zeilen rausgeschmissen werden, oder ein bestimmter aber immer gleicher Bereich extrahiert werden.

    Danach könnte man sich vorstellen diese Daten in eine CSV zu pfeffern...

    usw.

    Gibt es da so eine Art Freeware-Tool wie Irfan-View für Textdateien?

    Danke

    Eike

  • Deine Anforderungen scheinen relativ spezifisch zu sein. Ein Ansatz der nicht programmatisch ist (bzw. ein entsprechendes Werkzeug das Regelsätze anbietet) erscheint daher eher unwahrscheinlich. Du mußt jetzt aber nicht unbedingt das zugegebenermaßen grausame Winbatch einsetzen. Ich gehe davon aus, daß du auf einem Microsoft Betriebssystem sitzt.

    Hier gibt es mannigfaltig Programmiersprachen zur Auswahl für Textverarbeitung; Batch, PowerShell, oder 3rd-Party-mäßig auch Python, Go, Rust, POSIX Shell oder bash/dash (per WSL), Perl und viele mehr. Wenn du Winbatch nicht gut kannst (was ich verstehe, ist die ärgste Sausprache), nimm einfach eine andere!

    Ein weiterer Ansatz wäre noch evtl. die CSV Dateien in ein Officeprodukt zu importieren und per Makrocode zu modifizieren. Soweit ich weiß (kann inaktuell sein) geht das unter MS Office per VisualBasic for Applications (VBA) und unter LibreOffice und OpenOffice per Java.

    Vielleicht gibt's aber eh eine einfachere Methode, und ich kenne sie nur einfach noch nicht. Mal schauen was andere meinen.

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

    Einmal editiert, zuletzt von GrandAdmiralThrawn (15. Juni 2023 um 17:45)

  • CSVed habe ich gerade probiert...

    Hat aber kein batch-processing?

    Textcrawler ist für die Anforderung kostenpflichtig...

    Die Officeprodukte finde ich hier relativ grausam.

    Vielleicht schaue ich mir das mal in R an. Allerdings kommt es dafür auch wieder nicht häufig genug vor so etwas zu benötigen...

    vieleicht hat ja jemand noch eine idee?

  • Kannst du evlt genauer beschreiben was du vor hast?

    Sehe ich dies Richtig:

    1. Alle Dateien sollen das Erstelldatum als Dateinamen bekommen / bzw an den Dateinamen angehängt bekommen

    2. Es sollen Zeilen aus den CSV Dateien gelöscht werden? Anhand von Inhalten?

    3. Alle CSV Dateien sollen zusammengeführt werden?

    Also ich sehe hier ja grep und die Bash sehr weit vorne ...

  • Ich hätte wohl auch POSIX Shell (u.a. bash) plus sed/awk/grep vorgesehen. Aber das geht auch nur wenn er UNIX Shellskript halbwegs kann.

    Eine exakte Beschreibung der Vorgänge wäre sicher hilfreich.

    (R kann ich z.B. gar nicht)

    1-6000-banner-88x31-jpg

    Stolzer Besitzer eines 3dfx Voodoo5 6000 AGP Prototypen:

    • 3dfx Voodoo5 6000 AGP HiNT Rev.A-3700

    [//wp.xin.at] - No RISC, no fun!

    QotY: Girls Love, BEST Love; 2018 - Lo and behold, for it is the third Coming; The third great Year of Yuri, citric as it may be! Edit: 2019 wasn't too bad either... Edit: 2020... holy crap, we're on a roll here~♡!

    Quote Bier.jpg@IRC 2020: "Je schlimmer der Fetisch, desto besser!"

  • Bin müde, mal sehen ob ich da nen Treffer lande -> Quick n Dirty: ich hangel mich mal an Biers aufzählung lang:

    1. Alle Dateien sollen das Erstelldatum als Dateinamen bekommen / bzw an den Dateinamen angehängt bekommen

    2. Es sollen Zeilen aus den CSV Dateien gelöscht werden? Anhand von Inhalten?

    3. Alle CSV Dateien sollen zusammengeführt werden?

    1. Dateinamen anpassen mit Antrenamer2

    2. MS Excel: Da müsste man genauer wissen was weg soll, wenn z.B. Spalte G gelöscht werden soll, kann man sicherlich was kurzes in VBA machen

    oder ggf. sogar mit google einen passenden Codeblock finden und anpassen.

    3. Dateien dann mergen mit Notepad++

  • Moin, ich habe ein wenig rumgespielt...

    Grundlegende Programmierkenntnisse sind vorhanden, aber die Syntax von Powershell weitgehend unbekannt. Daher ist das jetzt try and error.

    Ziel: Alle CSV Dateien bzgl der Zeilen 147..250 beschneiden und unter neuem Dateinamen abspeichern. Option: Alle in eine einzelne Textdatei hintereinanderwegschreiben.


    $inhalt = get-content "C:\Messergebnisse\test.csv"

    #Textinhlt in Variable inhalt einlesen

    $inhalt[147..250] | out-file "out.txt"

    #Variableninhalt Zeilen 147 bis 250 auslesen und in Textdatei ausgeben. Funktioniert.

    Nun soll er dies aber für jede Datei in dem Ordner machen, ohne das ich jetzt sagen könnte diese Dateien seien fortlaufend nummeriert, oder definiert benannt.

    Get-ChildItem -Path "C:\Messergebnisse\" -Recurse -Include "*.csv"

    #Gibt mir alle Dateien des Typs CSV aus, bzw stellt diese zur Verfügung.


    ForEach-Object -Begin {$zaehler = 1} -Process {select-string $_[146..250] | out-file "out_$zaehler.txt"} -End {}

    #Dies funktioniert noch nicht, es ist auch klar warum, Laufvariable $_ hat keinen Inhalt

    ForEach-Object -Begin {$zaehler = 1| $_=get-content "*.csv" } -Process {select-string $_[146..250] | out-file "out_$zaehler.txt"} -End {}

    #Funktioniert auch nicht, vermutlich weil *.csv nicht spezifisch ist. Klar.

    #Man könnte jetzt vielleicht darüber nachdenken das weiter zu verschachteln,

    #indem man die Dateinamen aus dem Get-Childitem auch wieder in eine Variable schreibt, und das Zeilenweise als Dateiname ausliest.

    $dateinamen = Get-ChildItem -Path "C:\Messergebnisse\" -Recurse -Include "*.csv"

    #Funktioniert insofern nicht, weil die Funktion keinen sauberen Dateinamen ausgibt.

    ForEach-Object -Begin {$zaehler = 0} -Process {$inhalt=get-content "$dateinamen[$zaehler]" | select-string $inhalt[146..250]| out-file "out_$zaehler.txt" ;$zaehler++} -End {}

    #Man könnte einfach vorher die ganze Klamotte fortlaufend umbenennen und den Dateinamen hochzählen lassen... vermutlich geht das aber auch viel einfacher...

    Get-ChildItem -Path "C:\Messergebnisse\" -Recurse -Include "*.csv" | ForEach-Object -Begin { $zaehler = 1 } -Process { Rename-Item $_ -NewName "Rn_$zaehler.txt"; $zaehler++} -End {}

    Rename funzt.

    #Dies nun in eine Schleife packen...

    Get-ChildItem -Path "C:\Messergebnisse\" -Recurse -Include "*.csv" | ForEach-Object -Begin {$zaehler = 1} -Process {$_=get-content "Rn_$zaehler.csv" | select-string $_[146..250]| out-file "out_$zaehler.txt" ;$zaehler++} -End {}

    #funktioniert nicht.

    Ich glaube ich bin hier falsch unterwegs. Das was ich will kann bestimmt eine einzige kleine Kommandozeile. Kann jm helfen? :D