Benutzer mit den meisten Antworten
Grosse txt-Datei durchscannen und dabei Werte überprüfen

Frage
-
Hallo Zusammen,
Habe bisher nur Anonym mitgelesen, nun benötigte ich aber eure Hilfe.
Wir haben eine *.txt Datei welche 150MB gross ist - ähnlich aufgebaut wie eine *.csv-Datei
Nr Code 19010554 6408050 19010764 6408297 10453350 353141
Bei der letzten Zeile, sieht man, dass bei "Code" nur 6 Zeichen bzw. Ziffern stehen. Nun benötigen wir eine automatisierung, in Form eines Scripts welche bei jeder Zeile überprüft, ob dort 6 oder 7 Ziffern sind und allenfalls eine 0 vorne anhängt:
Nr Code 19010554 6408050 19010764 6408297 10453350 0353141
Das Txt-File hat noch weitere Spalten, die aber nicht wichtig sind.
Könnt ihr mir hier weiterhelfen?
Besten Dank im Voraus
David
- Bearbeitet DavidR96 Freitag, 1. April 2016 11:36
Antworten
-
Ich würde das auch Zeilenweise angehen, mit einem Streamreader/writer:
$Sourcefile = "D:\myfile.txt" $targetfile = "D:\myfile-edited.txt" $reader = new-object System.IO.StreamReader $Sourcefile $writer = new-object System.IO.StreamWriter $targetfile do { $line = $reader.ReadLine() $line = $line -replace '(\b[0-9]{6}\b)', '0$1' $writer.WriteLine($line) } while (!($reader.EndOfStream)) $reader.Close() $writer.close()
Der skaliert problemlos und ist schön flott, macht bei mir ein 130MB Testfile in 9 Sekunden.
Was die Ersetzung der Zahlen betrifft:
Insofern 6-Stellige Zahlen wirklich nur in der zu bearbeitenden Spalte vorkommen, kannst du zum ersetzen Davids Methode nutzen.Wenn das aber nicht so ist, müsste man die Suche der zu ersetzenden Zahl anders angehen. (Dann wäre mal interessant zu wissen, welches Trennzeichen in der Originaldatei zwischen den einzelnen "Spalten" ist, also z.B. ein Tab oder 6 Leerzeichen etc.)
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 6. April 2016 19:56
- Als Antwort vorgeschlagen David das Neves Donnerstag, 7. April 2016 17:37
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 12. April 2016 14:45
Alle Antworten
-
Poste mal ein paar komplette Zeilen der Datei, mit allen Spalten.
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort. -
Hi Denniver Reining,
Sorry für die späte Antwort - hier die gewünschten Spalten.
13256630 2422277 8711428082548 "name der datei" Z S 19011920 E10 27.00 27.00 13.99 0.00 0.00 0.00 14.26 14.26 0.00 42.96 75.32 0.00 0.00 0.00 1 8.00 "A" "" "" "" 0 0 0 0 GHS 0 0 0 0 0 0 0 0 102778 3M (TEST) SA 3453 3M (TEST) SASA (PROFES Stk 0.00 13.99 11.93 0.00 11.93 0.00 0.00 0.00 0.00 0.00 18374292 5863450 0 "name der datei" Z S 19011920 E10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 8.00 "" "" "" "" 0 0 0 0 0 0 0 0 0 0 0 0 102778 3M (TEST) SA 3453 3M (TEST) SASA (PROFES Stk 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10485546 766239 0 "name der datei" Z S 19011906 E10 92.10 92.10 52.11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 1 8.00 "" "" "" "" 0 0 0 0 g 0 0 0 0 0 0 0 0 102778 3M (TEST) SA 3453 3M (TEST) SASA (PROFES Stk 0.00 52.11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10485515 766191 0 "name der datei" Z S 19011906 E10 82.75 82.75 52.17 0.00 0.00 0.00 52.62 52.62 0.00 31.32 45.61 0.00 0.00 0.00 1 8.00 "A" "" "" "" 0 0 0 0 gh SIXELAG TX 0 0 0 0 0 0 0 0 102778 3M (TEST) SA 3453 3M (TEST) SASA (PROFES Stk 0.00 52.17 49.87 0.00 0.00 0.00 0.00 0.00 0.00 0.00 10485520 766216 0 "name der datei" Z S 19011906 E10 92.10 92.10 52.17 0.00 0.00 0.00 52.62 52.62 0.00 38.30 62.06 0.00 0.00 0.00 1 8.00 "A" "" "" "" 0 0 0 0 GH SIXELAG TX 0 0 0 0 0 0 0 0 102778 3M (TEST) SA 3453 3M (TEST) SASA (PROFES Stk 0.00 52.17 49.87 0.00 0.00 0.00 0.00 0.00 0.00 0.00
LG
-
Hi David,
eine Möglichkeit wäre die gesamte Textdatei zu laden und alle Zeichenketten mit 6 Zahlen durch eine vorangestellte 0 zu ersetzen:
$content = Get-Content C:\Temp\test.txt $newContent = $content -replace '(\b[0-9]{6}\b)', '0$1'
Das geht jedoch nur, wenn auch alle Zeichenketten mit 6 Zahlen verändert werden müssen.
Ist in der Textdatei zwischen jeder Spalte ->ein<- Leerzeichen? (dann könnte man es mit Import-CSV laden)
Wenn das auch nicht geht, müsstest du das RegEx erweitern, dass er nur die Werte an der richtigen Stelle per Line austauscht. Das Gute ist ja, dass jede Line gleich aufgebaut ist.
Hoffe das hilft etwas.
Best regards,
David das Neves
Premier Field Engineer
Please vote as helpful and mark as answer if a post helped you.
This posting is provided "AS IS" with no warranties and confers no rights. -
- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 6. April 2016 18:50 Der Beruf oder die Qualifikation der Teilnehmer sollten nicht Gegenstand der Diskussion sein.
-
Ich würde das auch Zeilenweise angehen, mit einem Streamreader/writer:
$Sourcefile = "D:\myfile.txt" $targetfile = "D:\myfile-edited.txt" $reader = new-object System.IO.StreamReader $Sourcefile $writer = new-object System.IO.StreamWriter $targetfile do { $line = $reader.ReadLine() $line = $line -replace '(\b[0-9]{6}\b)', '0$1' $writer.WriteLine($line) } while (!($reader.EndOfStream)) $reader.Close() $writer.close()
Der skaliert problemlos und ist schön flott, macht bei mir ein 130MB Testfile in 9 Sekunden.
Was die Ersetzung der Zahlen betrifft:
Insofern 6-Stellige Zahlen wirklich nur in der zu bearbeitenden Spalte vorkommen, kannst du zum ersetzen Davids Methode nutzen.Wenn das aber nicht so ist, müsste man die Suche der zu ersetzenden Zahl anders angehen. (Dann wäre mal interessant zu wissen, welches Trennzeichen in der Originaldatei zwischen den einzelnen "Spalten" ist, also z.B. ein Tab oder 6 Leerzeichen etc.)
Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
(Schneller, besser + komfortabler scripten.)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 6. April 2016 19:56
- Als Antwort vorgeschlagen David das Neves Donnerstag, 7. April 2016 17:37
- Als Antwort markiert Denniver ReiningMVP, Moderator Dienstag, 12. April 2016 14:45
-