haberl92
Goto Top

Textdatei auslesen und bearbeiten

Hallo zusammen,

ich habe eine ewig lange Textdatei und muss diese bearbeiten

Die Textdatei sehe ungefähr so aus:
# INFO Beispiel
000001111118;;20;;;
000009999992;;20;;;
000008888884;;1;;;
000005555550;;22;;;
000004444442;;1;;1111111111|2222222222|3333333333|4444444444|5555555555|6666666666|7777777777|8888888888|9999999999|0000000000|;
0002222226;;20;;;
000006666019;;01;;||||||||||;
203950223479;16;02;1000000001;G01                                                          ||||||||||;
203950121539;16;04;1000000002;G01                                                          ||||||||||;
204540772315;16;13;1000000003;G03                                                          ||||||||||;
204540772308;;18;1000000003;G01                                                          ||||||||||;
204540772612;16;09;1000000004;G05                                                          ||||||||||;
204540772605;;01;1000000004;G01                                                          ||||||||||;
204540772643;16;02;1000000005;G01                                                          ||||||||||;
204540772636;;02;1000000005;G03                                                          ||||||||||;
204540772674;16;05;1000000006;G01                                                          ||||||||||;
204540772667;;06;1000000006;G20                                                          ||||||||||;
204540772704;16;12;1000000007;G14                                                          ||||||||||;
204540772698;;11;1000000007;G01                                                          ||||||||||;
....
....

Die ersten 8 Zeilen müssten ignoriert werden und danach müsste in jeder Zeile nach der Zahl mit "G" gesucht werden und diese dann vorne nach dem zweiten ";" ersetzt werden.

Beispiel:
204540772315;16;13;1000000003;G01                                                          ||||||||||;
204540772308;;18;1000000003;G01                                                          ||||||||||;
Ziel:
204540772315;16;01;1000000003;G01                                                          ||||||||||;
204540772308;;01;1000000003;G01                                                        ||||||||||;

Ich denke mal, dass es mit Powershell am einfachsten umzusetzen wäre.
Aber dafür bin ich zu wenig in Powershell bewandert.
CMD wäre mir auch recht, aber da denke ich, wird es nicht so leicht gehen.

Bin um jede Hilfe dankbar

Content-ID: 2004455166

Url: https://administrator.de/contentid/2004455166

Ausgedruckt am: 25.11.2024 um 11:11 Uhr

1915348599
1915348599 25.02.2022 aktualisiert um 17:14:45 Uhr
Goto Top
$datei = .\test.txt
$dateineu = .\testneu.txt
(Get-Content $datei -Head 8),((Get-Content $datei | select -skip 8 | %{if($_ -match 'G(\d+)'){$_ -replace '(?<=^[^;]*;[^;]*;)\d+',$matches[1]}else{$_}})) | set-content $dateineu  
Haberl92
Haberl92 25.02.2022 um 17:58:07 Uhr
Goto Top
Zitat von @1915348599:

$datei = .\test.txt
$dateineu = .\testneu.txt
(Get-Content $datei -Head 8),((Get-Content $datei | select -skip 8 | %{if($_ -match 'G(\d+)'){$_ -replace '(?<=^.*?;.*?;)\d+',$matches[1]}else{$_}})) | set-content $dateineu  

Generell schon mal guter Ansatz, jedoch passt es nicht ganz.
Beispiel:
204540772315;16;13;1000000003;G01                                                          ||||||||||;
204540772308;;18;1000000003;G01                                                          ||||||||||;
Ziel:
204540772315;16;01;1000000003;G01                                                          ||||||||||;
204540772308;;01;1000000003;G01                                                        ||||||||||;
Mit deinen Script:
204540772315;16;01;01;G01                                                          ||||||||||;
204540772308;;01;01;G01                                                        ||||||||||;

Da wurde die lange Zahl auch ersetzt
Haberl92
Haberl92 25.02.2022 um 18:20:41 Uhr
Goto Top
Dann hab ich noch eine Frage:
Ich habe in der gleichen Textdatei noch Zeilen wie diese hier:
000006666217;;03;;||||||||||;
000006666156;;02;;||||||||||;

Da müsste der Zahl hinter dem 2ten ";" durch die entsprechende Zahl vorne ersetzt werden.
Bei 000006666156 wär die Zahl 15 und bei 000006666217 wär es 21

das wären aber fixe Werte,
die bedeutet wenn man vielleicht die ganze Zeile durch den jeweiligen Wert ersetzen könnte.
1915348599
Lösung 1915348599 25.02.2022 aktualisiert um 22:17:49 Uhr
Goto Top
https://tio.run/##tZPdTsIwFIDv9xRNxAxETE9/NpYjkXgh8UYfAIEQKD/JBMJmNKE8O7 ...


Da müsste der Zahl hinter dem 2ten ";" durch die entsprechende Zahl vorne ersetzt werden.
Bei 000006666156 wär die Zahl 15 und bei 000006666217 wär es 21
Wunschkonzert macht du jetzt nach Vorlage oben selbst indem du selbst etwas Hirnschmalz investierst
https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/
Dann hast du sogar noch was davon gelernt und musst hier nicht jeden zweiten Tag mit "wie lese ich xyz aus" antanzen. Kommt auf die Dauer einfach nachhaltiger!

Nen juden wönsch ich. 🤙
Haberl92
Haberl92 26.02.2022 um 00:33:54 Uhr
Goto Top
Zitat von @1915348599:

https://tio.run/##tZPdTsIwFIDv9xRNxAxETE9/NpYjkXgh8UYfAIEQKD/JBMJmNKE8O7 ...


Da müsste der Zahl hinter dem 2ten ";" durch die entsprechende Zahl vorne ersetzt werden.
Bei 000006666156 wär die Zahl 15 und bei 000006666217 wär es 21
Wunschkonzert macht du jetzt nach Vorlage oben selbst indem du selbst etwas Hirnschmalz investierst
https://danielfett.de/2006/03/20/regulaere-ausdruecke-tutorial/
Dann hast du sogar noch was davon gelernt und musst hier nicht jeden zweiten Tag mit "wie lese ich xyz aus" antanzen. Kommt auf die Dauer einfach nachhaltiger!

Nen juden wönsch ich. 🤙


Jetzt hat es funktioniert. Vielen Dank
Und das mit dem "fixen" Zahlen hab ich nun auch gelöst, aber bestimmt nicht so schön wie einer von euch Profis.
Ich habe die Zahlen gar nicht ausgewertet sondern durch -replace mit festen Werten ersetzt.
sieht nur komisch aus, da diese Zahlen 21 mal vorkommen, hab ich 21 mal die Originalzeile geschrieben und 21 mal den -replace Befehl.

Wie gesagt, schön ist es nicht, aber hauptsache es funktioniert.

Wünsche noch ein schönes Wochenende