janejones
Goto Top

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

Content-Key: 96968

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

Ausgedruckt am: 29.03.2024 um 14:03 Uhr

Mitglied: Janni
Janni 15.09.2008 um 17:17:18 Uhr
Goto Top
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
Mitglied: Janejones
Janejones 15.09.2008 um 17:34:55 Uhr
Goto Top
es geht leider nicht... vielleicht noch ein Hinweis: in der Datei steht nicht Vorname, Name etc. sondern der richtige Name usw. (Adresse)
Die Textdateien haben auch alle einen unterschiedlichen Dateinamen...
Vielen Dank, vielleicht kannst du ja noch einmal schauen,
Jane
Mitglied: Janejones
Janejones 15.09.2008 um 17:56:39 Uhr
Goto Top
habe es gerade noch einmal probiert, es werden aber nur Kommas übertragen...
Mitglied: bastla
bastla 15.09.2008 um 18:12:50 Uhr
Goto Top
Hallo Janejones und willkommen im Forum!

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
Das sind allerdings Details, die den Ablauf nicht beeinflussen.

Grüße
bastla
Mitglied: Janejones
Janejones 15.09.2008 um 18:19:12 Uhr
Goto Top
die txt dateien sind alle in einem Ordner, haben aber alle einen unterschiedlichen Dateinamen... der Aufbau der Textdateien ist immer gleich

Noch eine Frage: muss immer der Pfad eingetragen werden oder reicht es wenn die bat, die textdateien und die neuetextdatei in einem Ordner liegen, nur den Dateinamen zu schreiben...?
Mitglied: Janejones
Janejones 15.09.2008 um 18:22:40 Uhr
Goto Top
noch einmal mit den änderungen probiert, jetzt steht aber folgendes in der neuetextdatei:

,,,Geboren am=Email:Email: =
Mitglied: bastla
bastla 15.09.2008 um 18:34:29 Uhr
Goto Top
Hallo Janejones!

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
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 face-wink) Hobbies ...
Mitglied: Janejones
Janejones 15.09.2008 um 18:43:49 Uhr
Goto Top
das ist schon fast richtig!!!!!!!!!
Er übernimmt aber nicht die Email, da steht nur "Email: ="

und zwischen Vorname und Name sowie PLZ und Stadt sollte ein Komma sein...

Vielen Dank,
Jane
Mitglied: bastla
bastla 15.09.2008 um 18:56:37 Uhr
Goto Top
Hallo Janejones!

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
Mitglied: Janejones
Janejones 15.09.2008 um 19:03:03 Uhr
Goto Top
das mit Name, Vorname hat super geklappt, nur mit der Email noch nicht, es steht immer noch "Email: =" da
die Email steht wirklich in Zeile 30, gleich unter dem Geburtsdatum und das funktioniert ja wunderbar

liegt es vielleicht an dem Leerzeichen Email: test@test.de
Jane
Mitglied: Biber
Biber 15.09.2008 um 19:08:52 Uhr
Goto Top
@bastla
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.... face-wink
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...
Mitglied: bastla
bastla 15.09.2008 um 19:14:49 Uhr
Goto Top
@Biber
Für wahrscheinlicher allerdings halte ich es, dass der Such/Ersetzstring "Email: " nicht buchstabengetreu vorhanden ist.... face-wink
... 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#
Damit kannst Du nachvollziehen, was vom Batch als Zeilen 29 bis 32 gelesen wird.

Grüße
bastla
Mitglied: Janejones
Janejones 15.09.2008 um 19:18:38 Uhr
Goto Top
ich habe noch mal alle txt überprüft und in Zeile 30 steht überall buchstabengetreu
Email: test@test.com

die Zeile
for /f "tokens=1* delims=:" %%i in ('findstr /n "^" "%~1"') do
habe ich auch geändert, doch das Ergebnis bleibt gleich...

woran könnte es noch liegen? ich könnte auch mal eine beispiel txt per email schicken
Mitglied: bastla
bastla 15.09.2008 um 19:26:34 Uhr
Goto Top
Hallo Janejones!

Noch ein Versuch:
    if "%%i"=="30" for /f "tokens=1*" %%n in ("%%j") do set "Email=%%o"  
)
>>"%Neu%" echo %Name%,%Vorname%,%Strasse%,%PLZ%,%Stadt%,%Geburtstag:Geboren am =%,%Email%  
goto :eof
Grüße
bastla
Mitglied: Janejones
Janejones 15.09.2008 um 19:43:21 Uhr
Goto Top
vielen, vielen Dank, das hat jetzt geklappt...
Ihr seid echt super!
Viele Grüße
Jane