Nach String in Textdatei suchen
Hallo!
Das klingt zwar einfach, ist aber leider noch nicht Alles.
Ich habe eine riesige Textdatei. Hier möchte ich Zeile für Zeile auslesen ob ein bestimmtes Wort auftaucht. Wenn ja soll die 6., 8. und 9. Zeile danach in eine neue Textdatei in eine einzige Zeile (z.B. durch Komma getrennt) ausgegeben werden.
So soll die Batch die gesamte Ausgangsdatei durchgehen bei jeder Fundstelle jeweils eine neue Zeile in die neue Datei ausgeben.
Ziel ist es, diese neu erzeugte Datei in Excel zu importieren zur Weiterverarbeitung (deshalb das Komma als Trennzeichen).
Die originale Datei kann ich nicht in Excel importieren (max. Zeilenanzahl rund 65000) und Excel 2007 hängt sich dabei auf.
Torsten
Das klingt zwar einfach, ist aber leider noch nicht Alles.
Ich habe eine riesige Textdatei. Hier möchte ich Zeile für Zeile auslesen ob ein bestimmtes Wort auftaucht. Wenn ja soll die 6., 8. und 9. Zeile danach in eine neue Textdatei in eine einzige Zeile (z.B. durch Komma getrennt) ausgegeben werden.
So soll die Batch die gesamte Ausgangsdatei durchgehen bei jeder Fundstelle jeweils eine neue Zeile in die neue Datei ausgeben.
Ziel ist es, diese neu erzeugte Datei in Excel zu importieren zur Weiterverarbeitung (deshalb das Komma als Trennzeichen).
Die originale Datei kann ich nicht in Excel importieren (max. Zeilenanzahl rund 65000) und Excel 2007 hängt sich dabei auf.
Torsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 62064
Url: https://administrator.de/forum/nach-string-in-textdatei-suchen-62064.html
Ausgedruckt am: 06.04.2025 um 03:04 Uhr
11 Kommentare
Neuester Kommentar
Moin TorstenB,
das hört sich ja noch nicht soooo komplex an.
Ähnliche Mimiken hatten wir schon mehrfach hier in Batch & Shell. Vorgehen:
Wenn Du vielleicht mal so 30 Testzeilen posten könntest..?
Grüße
Biber
das hört sich ja noch nicht soooo komplex an.
Ähnliche Mimiken hatten wir schon mehrfach hier in Batch & Shell. Vorgehen:
- mit Find.exe /N oder FindStr.exe /N die Zeilen mit dem Suchstring mit Zeilennummer ausgeben lassen. Wenn es viele sind, in eine Datei schreiben lassen.
- zu den Zeilennumern in dieser Datei dann mit Set /a plus 6, plus 8 oder 9 berechnen.
- diese drei Zeilen in eine Variable spreichern und rausschreiben.
Wenn Du vielleicht mal so 30 Testzeilen posten könntest..?
Grüße
Biber
Hallo TorstenB!
Bis Biber das Ganze perfektioniert, könntest Du ja einmal diesen Ansatz testen (was Dich nicht davon abhalten soll, auch einige Testdaten zu posten):
Die "set"-Zeilen am Anfang sollten selbsterklärend sein ...
Grüße
bastla
Bis Biber das Ganze perfektioniert, könntest Du ja einmal diesen Ansatz testen (was Dich nicht davon abhalten soll, auch einige Testdaten zu posten):
@echo off & setlocal
set "Daten=D:\Daten.txt"
set "Suchbegriff=Wort"
set "Ergebnis=D:\Ergebnis.txt"
set "Nummeriert=%temp%\Nummeriert.txt"
findstr /n . "%Daten%" > "%Nummeriert%"
if exist "%Ergebnis%" del "%Ergebnis%"
for /f "delims=" %%i in ('findstr /C:"%Suchbegriff%" "%Nummeriert%"') do call :ProcessLine "%%i"
del "%Nummeriert%"
goto :eof
:ProcessLine
set Zeile=
for /f "tokens=1* delims=:" %%a in ('echo %~1') do set "Zeile=%%b" & set /a ZNr=%%a
for %%o in (6 8 9) do call :ProcessField %%o
(
echo %Zeile%
)>>"%Ergebnis%"
goto :eof
:ProcessField
set /a SuchNr=%ZNr%+%1
for /f "tokens=2 delims=:" %%a in ('findstr /b "%SuchNr%:" "%Nummeriert%"') do set "Zeile=%Zeile%,%%a"
Grüße
bastla
Hallo TorstenB!
... kann ich beides mit meinen (angenommenen) Testdaten nicht nachvollziehen.
Wenn Du die Zeilenabstände in der "for %%o ..."-Zeile änderst (6 auf 26, etc) oder ergänzt (einfach durch Leerstellen getrennt hinzufügen), sollte das (falls genug Zeilen in der Ausgangsdatei vorhanden sind) eigentlich genügen.
Hatten wir Dich eigentlich schon um Testdaten gebeten?
Grüße
bastla
[Edit] In der "findstr..."-Zeile fehlte übrigens noch ein Anführungszeichen vor "%Nummeriert%" - ist schon oben nachgetragen. [/Edit]
... kann ich beides mit meinen (angenommenen) Testdaten nicht nachvollziehen.
Wenn Du die Zeilenabstände in der "for %%o ..."-Zeile änderst (6 auf 26, etc) oder ergänzt (einfach durch Leerstellen getrennt hinzufügen), sollte das (falls genug Zeilen in der Ausgangsdatei vorhanden sind) eigentlich genügen.
Hatten wir Dich eigentlich schon um Testdaten gebeten?
Grüße
bastla
[Edit] In der "findstr..."-Zeile fehlte übrigens noch ein Anführungszeichen vor "%Nummeriert%" - ist schon oben nachgetragen. [/Edit]
Hallo TorstenB!
Problematisch für eine Batchverarbeitung sind die Zeilen mit "<>", also im Beispiel
Ersetze bitte die letzte Zeile durch diese 4 Zeilen:
Falls die jeweils 12 Leerstellen in Deinen Daten nicht erst beim Posten entstanden, sondern bereits in der Ausgangsdatei enthalten sind, ersetze die (neue) letzte Zeile durch:
Grüße
bastla
Problematisch für eine Batchverarbeitung sind die Zeilen mit "<>", also im Beispiel
Verbraucherkunde <> Abw. Verbrauchserkunde 10503!
for /f "tokens=2 delims=:" %%a in ('findstr /b "%SuchNr%:" "%Nummeriert%"') do set "Feld=%%a"
set "Feld=%Feld:<=^<%"
set "Feld=%Feld:>=^>%"
set "Zeile=%Zeile%,%Feld%"
set "Zeile=%Zeile%,%Feld:~12%"
Grüße
bastla