Hallo miteinander, ich möchte per batch aus einer Textdatei die Nummer vor dem ersten Semikolon entfernen und durch eine fortlaufende Nummer ersetzen. 1;3645153001;-25541;5239;Argon 100% 4;3645137001;-77935;9498;Argon 100% 10;3645137001;-77935;9498;Argon 100% 99;3645137001;-77935;9498;Argon 100% 103;3645137001;-77935;9498;Argon 100% Würde mich freuen, wenn mir jemand dabei helfen kann. Danke und Gruß Müngg
Falls du mit "batch" die Windoof-Stapelverarbeitung meinst, damit kann ich nicht dienen. Ansonsten:
1 | #Perl |
2 | use strict; |
3 | use warnings; |
4 | |
5 | my $nb=0; |
6 | |
7 | foreach (<>) |
8 | { |
9 | s/^[0-9]*;/$nb;/; |
10 | print; |
11 | $nb++; |
12 | } |
Ein+Ausgabe über stdin+out.
perlanfänger schrieb: > Falls du mit "batch" die Windoof-Stapelverarbeitung meinst, damit kann > ich nicht dienen. Ja, leider muss ich das auf "Windoof" machen, damit die .bat aus dem Explorer auch von anderen Anwendern genutzt werden kann. Trotzdem Danke
Achso, sag das doch gleich. Ich dachte die eigentliche Verarbeitung muss mittels .bat geschehen. Pack den Perl-Code in eine Textdatei, ändere die Endung in .pl und pack eine .bat-Datei dazu:
1 | @echo off |
2 | perl convert.pl < liste.txt > ergebnis.txt |
3 | echo fertig |
4 | pause |
Perl-Interpreter muss natürlich installiert sein, wenn er nicht gefunden wird Umgebungsvariable "PATH" ändern. Dateinamen müssen natürlich angepasst werden.
Hallo, es gibt auch sed für Windows und dann einfach den Aufruf sed s/^[0-9]*;/;/; ListeMitNummern.txt > ListeOhneNummern.txt in dein Batchfile eibauen.
Mit mehreren Schritten geht es auch mit Windows-Kommandozeilen-Bordmitteln. Erster Schritt: Inhalt der ersten Spalte entsorgen
1 | FOR /F "tokens=2,* delims=;" %i in (quelle.txt) do @echo ;%i;%j >> temp1.txt |
Ergibt:
1 | ;3645153001;-25541;5239;Argon 100% |
2 | ;3645137001;-77935;9498;Argon 100% |
3 | ;3645137001;-77935;9498;Argon 100% |
4 | ;3645137001;-77935;9498;Argon 100% |
5 | ;3645137001;-77935;9498;Argon 100% |
Zweiter Schritt: aufsteigende Zeilennummern voranstellen
1 | findstr /n ; temp1.txt > temp2.txt |
Ergibt:
1 | 1:;3645153001;-25541;5239;Argon 100% |
2 | 2:;3645137001;-77935;9498;Argon 100% |
3 | 3:;3645137001;-77935;9498;Argon 100% |
4 | 4:;3645137001;-77935;9498;Argon 100% |
5 | 5:;3645137001;-77935;9498;Argon 100% |
Dritter und letzter Schritt: Doppelpunkt loswerden
1 | FOR /F "tokens=1,* delims=:" %i in (temp2.txt) do @echo %i%j >> ziel.txt |
Ergibt:
1 | 1;3645153001;-25541;5239;Argon 100% |
2 | 2;3645137001;-77935;9498;Argon 100% |
3 | 3;3645137001;-77935;9498;Argon 100% |
4 | 4;3645137001;-77935;9498;Argon 100% |
5 | 5;3645137001;-77935;9498;Argon 100% |
Ganz wichtig hierbei: Die Dateien temp1.txt und ziel.txt müssen vor Aufruf leer sein bzw. nicht existieren, da der for-Output nur angehängt wird. Nein, elegant ist was anderes.
northernhessian schrieb: > Hallo, > es gibt auch sed für Windows und dann einfach den Aufruf > > sed s/^[0-9]*;/;/; ListeMitNummern.txt > ListeOhneNummern.txt > > in dein Batchfile eibauen. und wo sind die neuen Nummern?
Sorry Vlad hast ja recht. Ich habe die Hälfte vergessen. Hier die noch fehlende Zeile: sed = ListeOhneNummern.txt | sed N;s/\n/\./ > ListeNummeriert.txt Das muesste es aber gewesen sein.
Es geht auch mit Excel falls noch andere Funktionen nötig sind. Mach aus Deiner.txt eine Deiner.csv, lies diese in Excel und lass die erste Spalte weg oder numeriere/bearbeite sie und speichere sie als neue.csv und ren neue.csv neue.txt
Vielen vielen dank für die schnelle Hilfe, besonders an Rufus. Diese Lösung passt am besten in mein batch. Danke und ;) Gruss
wenn du sowas öfters machst, ist trotzdem zu empfehlen, dass du dich mit den typischen Linux-Kommandozeilentools wie grep, sed, xargs außeinandersetzt (--> GnuWin32) oder dich mit Perl beschäftigst. hier kommt man auch nur mit den Grundlagen ( skalar, array, hash, Dateihandling, Schleife, Reguläre Ausdrücke) sehr weit. ist dann vielleicht oft nicht das optimalste oder schnellste, aber meistens reicht es auch.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.