muck1303
Goto Top

Maximale Größe zu verarbeitender txt-Dateien mit Batch

Hallo zusammen,

ich habe vor einigen Tagen begonnen mich in Batch einzuarbeiten und bin ein Neuling hier. Mein Ziel ist es ein Programm zu schreiben welches Textdateien nach meinen Wünschen manipuliert. Das habe ich auch nach relativ kurzer Zeit hinbekommen, jedoch funktioniert das Programm nur für "kleine" Textdateien. Sobald ich es auf größere anwenden möchte (>3.000.000 Zeilen), funktioniert es nicht. Den Programmteil an dem es scheitert habe ich auch schon ausmachen können. Hier mal eine vereinfachte FOR-Schleife bei der das Problem genauso Auftritt.


@echo on
SETLOCAL enabledelayedexpansion


FOR /f "delims=" %%i IN ('findstr . Textdokument.txt') DO (  
	ECHO %%i>>test.txt
)
PAUSE


Dieses kleine Programm würde Zeile für Zeile den Inhalt aus "Textdokument.txt" in "test.txt" schreiben. Funktioniert ohne Probleme für ein kleines Textdokument, jedoch nicht für ein großes.

Kennt ihr die Ursache des Problems?

Ich vermute auch, dass Batch ziemlich langsam sein wird wenn es über 3 Mio. Zeilen durchlaufen soll. Liegt das am Code oder an der Sprache selber?

Ich muss die Textdatei sowohl kopieren als auch manipulieren, kennt ihr einen anderen Weg als die Datei Zeile für Zeile zu durchlaufen?

An dieser Stelle sei nochmals erwähnt, dass ich normalerweise nicht programmiere und ich im Großen und Ganzen keine Programmiersprache beherrsche.

Vielen Dank vorab und beste Grüße!

Content-Key: 329609

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

Ausgedruckt am: 19.03.2024 um 08:03 Uhr

Mitglied: Lochkartenstanzer
Lochkartenstanzer 16.02.2017 um 09:43:52 Uhr
Goto Top
Zitat von @Muck1303:

Hallo zusammen,
Dieses kleine Programm würde Zeile für Zeile den Inhalt aus "Textdokument.txt" in "test.txt" schreiben. Funktioniert ohne Probleme für ein kleines Textdokument, jedoch nicht für ein großes.

Was heißt funktioniert nicht? Läuft es gar nicht ert los oder bekomst du keine Rückmeldung? Gibt es eine Fehlermeldung?

Ich vermute auch, dass Batch ziemlich langsam sein wird wenn es über 3 Mio. Zeilen durchlaufen soll. Liegt das am Code oder an der Sprache selber?

Am Umfang der Datei.

Ich muss die Textdatei sowohl kopieren als auch manipulieren, kennt ihr einen anderen Weg als die Datei Zeile für Zeile zu durchlaufen?


Was muß tDu denn genau machen? Texte Ersetzen? Teile daraus extrahieren?
Ich würde Dir auf jeden Fall zu Powershel oder zu bash/gnu-utilities statt CMD-Batch raten.
Beipiel für das Ersetzen:

sed "s/zu-ersetztender-Ausdruck/ersatz/g" quelldatei >zieldatei

An dieser Stelle sei nochmals erwähnt, dass ich normalerweise nicht programmiere und ich im Großen und Ganzen keine Programmiersprache beherrsche.

Dann solltest Du Dich erstmal mit den Grundlagen beschäftigen.

lks
Mitglied: Muck1303
Muck1303 16.02.2017 um 10:30:40 Uhr
Goto Top
Hallo Lks,

danke für deine schnelle Antwort.

Zitat von @Lochkartenstanzer:

Was heißt funktioniert nicht? Läuft es gar nicht ert los oder bekomst du keine Rückmeldung? Gibt es eine Fehlermeldung?

Das Programm läuft an und stoppt dann sobald es an einer solchen FOR-Schleife ist. Keine Fehlermeldung, auch kein Abbruch, aber es läuft nicht weiter.


Was muß tDu denn genau machen? Texte Ersetzen? Teile daraus extrahieren?
Ich würde Dir auf jeden Fall zu Powershel oder zu bash/gnu-utilities statt CMD-Batch raten.

Ich möchte die Datei kopieren, jedoch Parameter darin ändern. Zum Beispiel: Irgendwo im Text steht in genau einer Zeile " Parameter 2 4 6". Ich möchte die Zahlen beliebig ändern und den Rest der Datei kopieren. Ich weiß allerdings nicht welche Zahlen bisher hinter "Parameter" stehen und in welcher Zeile "Parameter" steht. "Parameter" ist also mein Signalwort, dass die folgenden Zahlen für mich relevant sind.

Beste Grüße.
Mitglied: Lochkartenstanzer
Lochkartenstanzer 16.02.2017 aktualisiert um 10:41:03 Uhr
Goto Top
Zitat von @Muck1303:

Hallo Lks,

danke für deine schnelle Antwort.

Zitat von @Lochkartenstanzer:

Was heißt funktioniert nicht? Läuft es gar nicht ert los oder bekomst du keine Rückmeldung? Gibt es eine Fehlermeldung?

Das Programm läuft an und stoppt dann sobald es an einer solchen FOR-Schleife ist. Keine Fehlermeldung, auch kein Abbruch, aber es läuft nicht weiter.

Bist Du sicher, daß es nicht weiterläuft? Ich vermute eher, daß es einfach in der Schleife hängt und Du den Eindruck hast, es tut sich nichts. Ändere mal die For-Schleife:

@echo on
SETLOCAL enabledelayedexpansion


FOR /f "delims=" %%i IN ('findstr . Textdokument.txt') DO (
ECHO %%i
)
PAUSE

Dann siehst Du, ob das skript weiterläuft oder hängt.

lks

PS: Das Forum bietet auch Code-Tags.
Mitglied: Muck1303
Muck1303 16.02.2017 um 10:52:58 Uhr
Goto Top
Es hängt, gibt kein ECHO raus. Mit @echo ON sieht man nur, dass er gerade in dieser Schleife sitzt, danach kommt aber nix, außer ein blinkender "_"


PS: Die Code-Tags hatte ich gerade bei der ersten Antwort gefunden. Danke!
Mitglied: 132272
132272 16.02.2017 aktualisiert um 15:53:49 Uhr
Goto Top
Zitat von @Muck1303:
Ich möchte die Datei kopieren, jedoch Parameter darin ändern. Zum Beispiel: Irgendwo im Text steht in genau einer Zeile " Parameter 2 4 6". Ich möchte die Zahlen beliebig ändern und den Rest der Datei kopieren. Ich weiß allerdings nicht welche Zahlen bisher hinter "Parameter" stehen und in welcher Zeile "Parameter" steht. "Parameter" ist also mein Signalwort, dass die folgenden Zahlen für mich relevant sind.

Lerne lieber gleich eine ordentliche Sprache.

Für so große Dateien würde ich ebenfalls wie von @Lochkartenstanzer gezeigt sed verwenden welches mit cygwin auch unter Windows seinen Dienst verrichtet.
SED
sed -re 's/Parameter [0-9\ ]+/Parameter X X X/g' datei.txt >datei_neu.txt  
oder Powershell:
(gc 'C:\datei.txt' -Read 1000) -replace 'Parameter [\d\ ]+','Parameter X X X' | set-content 'C:\datei_neu.txt'  
Dazu solltest du folgendes lesen, das kannst du in deinem Leben in fast jeder Programmier/Scriptsprache anwenden: Regular Expressions Tutorial

Gruß