automatisch text auslesen
Hallo,
ich brauche eure Hilfe, da ich leider keine Programmierkenntnisse habe. Ich habe etliche Textdateien, aus denen ich folgende Zeilen mithilfe einer Batchdatei?? automatisch auslesen möchte:
25 Vorname Name
26 Straße
27 PLZ Stadt
29 Geboren am 01.01.2000
30 Email: name@email.de
Die Zeilen 25, 26, 27, 29 und 30 sollen hintereinander in eine neue Textdatei kopiert werden.
Das soll so aussehen:
Vorname, Name, Straße, PLZ, Stadt, Geburtsdatum, Email
Vorname, Name, Straße, PLZ, Stadt, Geburtsdatum, Email
usw.
Die Wörter "geboren am" und "Email:" sollen aber nicht mit übernommen werden.
Kann mir jemand helfen?
Bzw. gibt eine Software, die soetwas kann?
Vielen Dank,
Jane
ich brauche eure Hilfe, da ich leider keine Programmierkenntnisse habe. Ich habe etliche Textdateien, aus denen ich folgende Zeilen mithilfe einer Batchdatei?? automatisch auslesen möchte:
25 Vorname Name
26 Straße
27 PLZ Stadt
29 Geboren am 01.01.2000
30 Email: name@email.de
Die Zeilen 25, 26, 27, 29 und 30 sollen hintereinander in eine neue Textdatei kopiert werden.
Das soll so aussehen:
Vorname, Name, Straße, PLZ, Stadt, Geburtsdatum, Email
Vorname, Name, Straße, PLZ, Stadt, Geburtsdatum, Email
usw.
Die Wörter "geboren am" und "Email:" sollen aber nicht mit übernommen werden.
Kann mir jemand helfen?
Bzw. gibt eine Software, die soetwas kann?
Vielen Dank,
Jane
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 96968
Url: https://administrator.de/forum/automatisch-text-auslesen-96968.html
Ausgedruckt am: 14.05.2025 um 11:05 Uhr
15 Kommentare
Neuester Kommentar
so ungefähr:
:: Echos aus und alle Variablen sind nur in der Batch definiert
@echo off & setlocal
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "c:\Textdatei.txt"') do (
if %%i == 25 set NameVorname=%%j
if %%i == 26 set Straße=%%j
if %%i == 27 set PLZStadt=%%j
if %%i == 29 set Geburtstag=%%j
if %%i == 30 set Email=%%j
)
echo %NameVorname%, %Straße%, %PLZStadt%, %Geburtstag%, %Email%>> neueTextdatei.txt
Hallo Janejones und willkommen im Forum!
... da die dargestellte Lösung mit einer von mir erstellten Testdatei sehr wohl ein entsprechendes Ergebnis (die Inhalte der genannten Zeilen) liefert.
Falls es eine Liste der Dateien oder einen Ordner, dessen Inhalt ausschließlich aus derartigen Dateien besteht, gibt (was Deiner Beschreibung allerdings nicht zu entnehmen war), könnten durch eine zusätzliche "for"-Schleife natürlich auch alle diese Dateien bearbeitet werden.
@Janni
Etwas ändern würde ich (neben dem Weglassen der Leerzeichen vor und nach den "==" in den Zeilen 5 bis 9) die Ausgabezeile auf:
Das sind allerdings Details, die den Ablauf nicht beeinflussen.
Grüße
bastla
es werden aber nur Kommas übertragen...
... was daran liegen könnte, dass die verwendete Datei ("c:\Textdatei.txt") bei Dir in Name oder Aufbau abweicht ...... da die dargestellte Lösung mit einer von mir erstellten Testdatei sehr wohl ein entsprechendes Ergebnis (die Inhalte der genannten Zeilen) liefert.
Falls es eine Liste der Dateien oder einen Ordner, dessen Inhalt ausschließlich aus derartigen Dateien besteht, gibt (was Deiner Beschreibung allerdings nicht zu entnehmen war), könnten durch eine zusätzliche "for"-Schleife natürlich auch alle diese Dateien bearbeitet werden.
@Janni
Etwas ändern würde ich (neben dem Weglassen der Leerzeichen vor und nach den "==" in den Zeilen 5 bis 9) die Ausgabezeile auf:
echo %NameVorname%,%Straße%,%PLZStadt%,%Geburtstag:Geboren am= %,%Email:Email: =%>>C:\neueTextdatei.txt
Grüße
bastla
Hallo Janejones!
Dann zum Testen die Version für alle ".txt"-Dateien eines Ordners (Zeile 2):
Noch eine Anmerkung: Damit die entstehende "neueTextdatei" nicht ebenfalls verarbeitet wird, sollte diese in einem anderen Ordner (wie in meinem Beispiel) liegen oder etwa den Typ ".csv" erhalten.
Grüße
bastla
P.S.: Das Setzen von Anführungszeichen ist eines meiner (glücklicher Weise eher ungefährlichen
) Hobbies ...
Dann zum Testen die Version für alle ".txt"-Dateien eines Ordners (Zeile 2):
@echo off & setlocal
set "Dateien=C:\Ordner mit Textdateien\*.txt"
set "Neu=C:\neueTextdatei.txt"
if exist "%Neu%" del "%Neu%"
for %%a in ("%Dateien%") do call :ProcessFile "%%a"
goto :eof
:ProcessFile
echo Bearbeite: %~1
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%~1"') do (
if "%%i"=="25" set "NameVorname=%%j"
if "%%i"=="26" set "Strasse=%%j"
if "%%i"=="27" set "PLZStadt=%%j"
if "%%i"=="29" set "Geburtstag=%%j"
if "%%i"=="30" set "Email=%%j"
)
>>"%Neu%" echo %NameVorname%,%Strasse%,%PLZStadt%,%Geburtstag:Geboren am =%,%Email:Email: =%
goto :eof
Grüße
bastla
P.S.: Das Setzen von Anführungszeichen ist eines meiner (glücklicher Weise eher ungefährlichen
Hallo Janejones!
Grüße
bastla
zwischen Vorname und Name sowie PLZ und Stadt sollte ein Komma sein...
Ändere die Zeilen 12, 14 und 18 wie folgt: if "%%i"=="25" for /f "tokens=1*" %%n in ("%%j") do (set "Name=%%n" & set "Vorname=%%o")
if "%%i"=="27" for /f "tokens=1*" %%n in ("%%j") do (set "PLZ=%%n" & set "Stadt=%%o")
>>"%Neu%" echo %Name%,%Vorname%,%Strasse%,%PLZ%,%Stadt%,%Geburtstag:Geboren am =%,%Email:Email: =%
Er übernimmt aber nicht die Email, da steht nur "Email: ="
Du solltest prüfen, ob die Mailadresse tatsächlich in Zeile 30 steht (und sich dort nicht vielleicht eine Leerzeile befindet) ...Grüße
bastla
@bastla
Dann würde diese Zeile nämlich NICHT bei der findstr-Prüfung auf "$" erfasst werden.
Um das auszuschliessen, könnte man/frau die Prüfung von "$" (Zeilenende=CRLF) auf Zeilenanfang (Irgendein noch so kleines Zeichen nach einer mit CRLF beendeten Zeile) ändern.
Für wahrscheinlicher allerdings halte ich es, dass der Such/Ersetzstring "Email: " nicht buchstabengetreu vorhanden ist....
Steht da evtl "Mail:" statt "Email" oder doch kein Doppelpunkt+Leerzeichen dahinter...?
Grüße
Biber
....oder aber heute ist Montag und Jane testet mit der einzigen Testdatei OHNE eingetragene Mailadresse...
Du solltest prüfen, ob die Mailadresse tatsächlich in Zeile 30 steht (und sich dort nicht vielleicht eine Leerzeile befindet) ...
...oder aber, ob es schon in der Zeile 30 steht, diese aber die letzte Zeile in der gesamten Textdatei ist und kein CRLF, sondern nur ein CR enthält.Dann würde diese Zeile nämlich NICHT bei der findstr-Prüfung auf "$" erfasst werden.
Um das auszuschliessen, könnte man/frau die Prüfung von "$" (Zeilenende=CRLF) auf Zeilenanfang (Irgendein noch so kleines Zeichen nach einer mit CRLF beendeten Zeile) ändern.
...
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%~1"') do ( .....
Für wahrscheinlicher allerdings halte ich es, dass der Such/Ersetzstring "Email: " nicht buchstabengetreu vorhanden ist....
Steht da evtl "Mail:" statt "Email" oder doch kein Doppelpunkt+Leerzeichen dahinter...?
Grüße
Biber
....oder aber heute ist Montag und Jane testet mit der einzigen Testdatei OHNE eingetragene Mailadresse...
@Biber
@Janejones
Sollte Bibers erste Annahme nicht zutreffen (seine vorgeschlagene Zeile kannst Du aber auf jeden Fall als neue Zeile 11 verwenden), könntest Du noch zwischen Zeile 11 und Zeile 12 einfügen:
Damit kannst Du nachvollziehen, was vom Batch als Zeilen 29 bis 32 gelesen wird.
Grüße
bastla
Für wahrscheinlicher allerdings halte ich es, dass der Such/Ersetzstring "Email: " nicht buchstabengetreu vorhanden ist.... 
... was aber eigentlich nur zu keiner Ersetzung und daher der Verwendung der gesamten Zeile führen sollte ...@Janejones
Sollte Bibers erste Annahme nicht zutreffen (seine vorgeschlagene Zeile kannst Du aber auf jeden Fall als neue Zeile 11 verwenden), könntest Du noch zwischen Zeile 11 und Zeile 12 einfügen:
if %%i gtr 28 if %%i lss 33 echo %%i#%%j#
Grüße
bastla