Batch - CSV Werte aus folgenden Zeilen hinten ran hängen

batch_prog

Cadet 2nd Year
Registriert
März 2017
Beiträge
27
Guten Abend,

ich suche gerade nach einer Lösung für ne Batch, da ich gerade folgende Ausgangsdatei habe, mit einer unterschiedlichen Anzahl von fast doppelten Datensätze, die sich in der letzte Spalte (.csv) unterscheiden:

Code:
Name1;Name2;Straße;PLZ;Ort;;;;;DE12345;
Name1;Name2;Straße;PLZ;Ort;;;;;DE12345678;

Jetzt möchte ich mir gerne eine neue CSV ausgeben lassen:

Code:
Name1;Name2;Straße;PLZ;Ort;;;;;DE12345;DE12345678;;;;;;;;;

Also jeweils den letzten Wert aus den folgenden Zeilen hinten ran hängen und wenn es keine 10 „Blöcke“ sind, die hinten ran gehängt werden soll er diese mit Semikolons auffüllen.

Geht sowas mit Batch? Leider ist mein Wissen sehr gering und freue mich auf Hilfe.
 
Es geht mit Batch, aber hinterher wirst du keine Fingernägel mehr haben, weil du sie abgekaut hast. Batch eignet sich nur für das banale Hintereinanderausführen von Befehlen, aber nicht für komplexe Aufgaben. Schon das Matching von Fast-Dubletten ist beliebig aufwändig, wenn die Datensätze nicht sortiert sind und sichergestellt ist, dass Groß-/Kleinschreibung durchgängig ist.

Ist das eine regelmäßig wiederkehrende Aufgabe oder einmalig? Wenn letzteres, würde ich tatsächlich ganz einfach mit Excel arbeiten. Die Formeln/Makros dazu sind einfacher als Batch zu lernen.
 
Raijin schrieb:
Es geht mit Batch, aber hinterher wirst du keine Fingernägel mehr haben, weil du sie abgekaut hast. Batch eignet sich nur für das banale Hintereinanderausführen von Befehlen, aber nicht für komplexe Aufgaben. Schon das Matching von Fast-Dubletten ist beliebig aufwändig, wenn die Datensätze nicht sortiert sind und sichergestellt ist, dass Groß-/Kleinschreibung durchgängig ist.

Ist das eine regelmäßig wiederkehrende Aufgabe oder einmalig? Wenn letzteres, würde ich tatsächlich ganz einfach mit Excel arbeiten. Die Formeln/Makros dazu sind einfacher als Batch zu lernen.

Danke für die Antwort - ich habe versucht mir da noch selber zu helfen, kannst Du mir da helfen?

Wäre halt für ne Aufgabenplanung etwas wiederkehrendes. Die Ursprungsdatei ist immer gleich vom Aufbau, jedoch mit unterschiedlicher Anzahl von Max 10 Datenzeilen.
 
Wieso wird eigtl immer nach Batch gefragt. Klar - unter Windows muss man nix installieren. Aber hat Microsoft dafür nicht extra mal https://de.wikipedia.org/wiki/PowerShell hinzugefügt?
Mal davon abgesehen, dass natürlich Python oder andere Skriptsprachen 100 besser geeignet wären als Batch geht CSV-editieren wohl mit powershell irgendwie: https://stackoverflow.com/questions/17554564/powershell-append-csv

Ist die klar, dass du mit deinem Plan das CSV-Format eigtl. "kaputt" machst? Du fügst doppelte Zahlen in eine Nachbarspalte ein? Besser wäre in der gleichen Spalte einen anderen Trenner wie zB "," zu verwenden. Dann enthält die Spalte halt entweder einen oder mehrere Werte aber nicht so "evtl liegt in der Nachbarspalte noch was".
 
kuddlmuddl schrieb:
Wieso wird eigtl immer nach Batch gefragt. Klar - unter Windows muss man nix installieren. Aber hat Microsoft dafür nicht extra mal https://de.wikipedia.org/wiki/PowerShell hinzugefügt?
Mal davon abgesehen, dass natürlich Python oder andere Skriptsprachen 100 besser geeignet wären als Batch geht CSV-editieren wohl mit powershell irgendwie: https://stackoverflow.com/questions/17554564/powershell-append-csv

Ist die klar, dass du mit deinem Plan das CSV-Format eigtl. "kaputt" machst? Du fügst doppelte Zahlen in eine Nachbarspalte ein? Besser wäre in der gleichen Spalte einen anderen Trenner wie zB "," zu verwenden. Dann enthält die Spalte halt entweder einen oder mehrere Werte aber nicht so "evtl liegt in der Nachbarspalte noch was".

Wenn hier ein anderer Feldtrenner wie bspw. „,“ verwendet wird, hätte ich dann die gewünschte Ausgabe? Den Wert aus den folgenden Zeile in Spalte j, die Spalte ist immer fest , soll nur in der ersten Zeile hinten rangehängt werden und wenn in den Spalten jeweils nichts in den Spalten j - s steht soll er das mit leeren Spalten kennzeichnen.
 
Batch ist keine Skript- oder gar Programmiersprache im eigentlichen Sinne. Batch steht für "Stapelverarbeitung" und somit mehr oder weniger für das stupide Wiederholen von ein und demselben Kommando (mit evtl. n bischen drumherum). Komplexe Zusammenhänge sind daher mit Batch gar nicht oder nur mit viel Aufwand nachzubilden, weil es dafür nicht geeignet ist. Ich rate dir, dich von batch zu verabschieden und ggfs PowerShell zu nutzen wie schon von @kuddlmuddl vorgeschlagen.


Das Trennzeichen muss in einer CSV durchgängig sein. Üblich sind das namensgebende Komma ( , ), aber auch das Semikolon ( ; ) oder ein TAB-Zeichen. Wobei letzteres dann streng genommen eine TSV wäre. Wenn du die Trennzeichen innerhalb der Datei vermischst, kann sie nicht mehr richtig importiert werden. So öffnet Excel beispielsweise eine CSV mit Semikolon automatisch richtig, bei Komma bzw. Tab muss man es über den Datenimport machen. So oder so kann es aber nur EIN Trennzeichen geben.
 
Raijin schrieb:
Batch ist keine Skript- oder gar Programmiersprache im eigentlichen Sinne. Batch steht für "Stapelverarbeitung" und somit mehr oder weniger für das stupide Wiederholen von ein und demselben Kommando (mit evtl. n bischen drumherum). Komplexe Zusammenhänge sind daher mit Batch gar nicht oder nur mit viel Aufwand nachzubilden, weil es dafür nicht geeignet ist. Ich rate dir, dich von batch zu verabschieden und ggfs PowerShell zu nutzen wie schon von @kuddlmuddl vorgeschlagen.


Das Trennzeichen muss in einer CSV durchgängig sein. Üblich sind das namensgebende Komma ( , ), aber auch das Semikolon ( ; ) oder ein TAB-Zeichen. Wobei letzteres dann streng genommen eine TSV wäre. Wenn du die Trennzeichen innerhalb der Datei vermischst, kann sie nicht mehr richtig importiert werden. So öffnet Excel beispielsweise eine CSV mit Semikolon automatisch richtig, bei Komma bzw. Tab muss man es über den Datenimport machen. So oder so kann es aber nur EIN Trennzeichen geben.

OK, wie wäre es denn in Powershell umzusetzen, wie würde es denn gehen?
 
Zurück
Oben