Forum: PC-Programmierung per batch zeilennummern in .txt datei löschen


von Müngg (Gast)


Lesenswert?

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

von perlanfänger (Gast)


Lesenswert?

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.

von Müngg (Gast)


Lesenswert?

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

von perlanfänger (Gast)


Lesenswert?

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.

von northernhessian (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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?

von northernhessian (Gast)


Lesenswert?

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.

von Rudi Ratlos (Gast)


Lesenswert?

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

von Muengg (Gast)


Lesenswert?

Vielen vielen dank für die schnelle Hilfe,
besonders an Rufus.
Diese Lösung passt am besten in mein batch.

Danke und ;)
Gruss

von Vlad T. (vlad_tepesch)


Lesenswert?

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
Noch kein Account? Hier anmelden.