Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

automatisch text auslesen

Frage Entwicklung Batch & Shell

Mitglied: Janejones

Janejones (Level 1) - Jetzt verbinden

15.09.2008, aktualisiert 19:43 Uhr, 3932 Aufrufe, 15 Kommentare

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
Mitglied: Janni
15.09.2008 um 17:17 Uhr
so ungefähr:

01.
:: Echos aus und alle Variablen sind nur in der Batch definiert 
02.
@echo off & setlocal 
03.
 
04.
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "c:\Textdatei.txt"') do ( 
05.
    if %%i == 25 set NameVorname=%%j 
06.
    if %%i == 26 set Straße=%%j 
07.
    if %%i == 27 set PLZStadt=%%j 
08.
    if %%i == 29 set Geburtstag=%%j 
09.
    if %%i == 30 set Email=%%j 
10.
11.
 
12.
echo %NameVorname%, %Straße%, %PLZStadt%, %Geburtstag%, %Email%>> neueTextdatei.txt
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 17:34 Uhr
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
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 17:56 Uhr
habe es gerade noch einmal probiert, es werden aber nur Kommas übertragen...
Bitte warten ..
Mitglied: bastla
15.09.2008 um 18:12 Uhr
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:
01.
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
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 18:19 Uhr
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...?
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 18:22 Uhr
noch einmal mit den änderungen probiert, jetzt steht aber folgendes in der neuetextdatei:

,,,Geboren am=Email:Email: =
Bitte warten ..
Mitglied: bastla
15.09.2008 um 18:34 Uhr
Hallo Janejones!

Dann zum Testen die Version für alle ".txt"-Dateien eines Ordners (Zeile 2):
01.
@echo off & setlocal 
02.
set "Dateien=C:\Ordner mit Textdateien\*.txt" 
03.
set "Neu=C:\neueTextdatei.txt" 
04.
 
05.
if exist "%Neu%" del "%Neu%" 
06.
for %%a in ("%Dateien%") do call :ProcessFile "%%a" 
07.
goto :eof 
08.
 
09.
:ProcessFile 
10.
echo Bearbeite: %~1 
11.
for /f "tokens=1* delims=:" %%i in ('findstr /n $ "%~1"') do ( 
12.
    if "%%i"=="25" set "NameVorname=%%j" 
13.
    if "%%i"=="26" set "Strasse=%%j" 
14.
    if "%%i"=="27" set "PLZStadt=%%j" 
15.
    if "%%i"=="29" set "Geburtstag=%%j" 
16.
    if "%%i"=="30" set "Email=%%j" 
17.
18.
>>"%Neu%" echo %NameVorname%,%Strasse%,%PLZStadt%,%Geburtstag:Geboren am =%,%Email:Email: =% 
19.
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 ) Hobbies ...
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 18:43 Uhr
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
Bitte warten ..
Mitglied: bastla
15.09.2008 um 18:56 Uhr
Hallo Janejones!

zwischen Vorname und Name sowie PLZ und Stadt sollte ein Komma sein...
Ändere die Zeilen 12, 14 und 18 wie folgt:
01.
    if "%%i"=="25" for /f "tokens=1*" %%n in ("%%j") do (set "Name=%%n" & set "Vorname=%%o") 
02.
 
03.
    if "%%i"=="27" for /f "tokens=1*" %%n in ("%%j") do (set "PLZ=%%n" & set "Stadt=%%o") 
04.
 
05.
>>"%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
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 19:03 Uhr
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
Bitte warten ..
Mitglied: Biber
15.09.2008 um 19:08 Uhr
@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....
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...
Bitte warten ..
Mitglied: bastla
15.09.2008 um 19:14 Uhr
@Biber
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:
01.
    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
Bitte warten ..
Mitglied: Janejones
15.09.2008 um 19:18 Uhr
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
Bitte warten ..
Mitglied: bastla
15.09.2008 um 19:26 Uhr
Hallo Janejones!

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

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Exchange Server
gelöst Text automatisch in Kalender eintragen (2)

Frage von diematrix125 zum Thema Exchange Server ...

Batch & Shell
Text-Datei auslesen und Inhalt als Parameter übergeben (1)

Frage von aubm2013 zum Thema Batch & Shell ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

Microsoft Office
gelöst Wie kann man die Standard-Schriftart bei einfügen von Text in Word 2013 festlegen? (3)

Frage von Rene1976 zum Thema Microsoft Office ...

Heiß diskutierte Inhalte
DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (13)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (9)

Frage von 1410640014 zum Thema Backup ...