brandonquest
Goto Top

String in einem Textfile auslesen

Moin an alle!
Da ich absolut neu (seit gestern) auf dem Gebiet bin, mutet mein Problem zwar banal an, nur sitze ich jetzt
seit einem Tag davor, habe ein paar Probleme gelöst, hänge aber definitiv an folgendem:

aus einem Ordner mit etlichen Protokoll.txt (gewandelte copy eines PDF),
werden aus jeder Datei

das eingetragene Datum,
Protokollnummer und
eine ID-Nummer

ausgelesen, um die ursprüngliche PDF-Datei danach entsprechend umzubenennen und einen Eintrag über
diesen Vorgang in einer weiteren Sammeldatei anzulegen.

Also: die Datei, mit momentan kryptischem Namen soll dann "Datum_ID.pdf" heissen,
und die Protokollnummer fortlaufend in einer weiteren Textdatei abgelegt werden.

Datum und ID habe ich nun schon herausgefunden:


@echo off & setlocal
set "Ordner=c:\TEST"  
set "Typ=pdf"  
cd /d "%Ordner%"  
for %%f in (*.%Typ%) do call :ProcessFile "%%f"  
goto :eof

:ProcessFile
Set dateiname_alt=%~f1
Start /wait Pdftotext.exe %dateiname_alt% %dateiname_alt:~0,-4%.txt

for /f "delims=" %%i in ('findstr /C:"Datum der Bearbeitung" %dateiname_alt:~0,-4%.txt') do @Set "ln=%%i"  

set Datum=%ln:~25,10%

for /F "tokens=3 delims= " %%i IN ('findstr /C:"Protokollnummer Nr." %dateiname_alt:~0,-4%.txt') do @Set "ln=%%i"  

set Protokollnummer=%ln%


Hier wird also ein pdf-File genommen,
mit pdftotext.exe aus dem Open-Source-Project xpdf in txt gewandelt,
und danach die Spalten mit meinen Infos gesucht und
Datum und Protokollnummer von störenden Zeichen
befreit an entsprechende Variablen übergeben.

Bis hierhin waren die Infos in Zeilen, deren Anfang immer gleich lautete, und die somit leicht zu finden gewesen sind.

Die ID jedoch ist in einer eigenen Zeile und kann variieren.

Sie kommt jedoch jedoch immer zwei Zeilen nach dem Begriff "ID-No:"
und ist alleinstehend in einer Zeile.
Beispiel:

ID-Nr.:
ID-No:


WSSD-GHZUQ1-001

Typ:
Type:



Ich müsste also in der Datei suchen,bis "ID-No:" gefunden wird, und dann zwei Zeilen
weiter den Inhalt der entsprechenden Zeile bis zum Ende auslesen und in eine
Variable schreiben.

Wie ich dann den Dateinamen zusammenbastle, die PDF-Datei umbenenne, und die Protokollnummer
in eine Textdatei schreibe, wird dann wohl den Rest des Tages in Anspruch nehmen face-smile

Für etwaige Hilfe / Verbesserungsvorschläge bin ich zutiefst dankbar!

Beste Grüße
Brandon

Content-Key: 119719

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

Printed on: April 25, 2024 at 05:04 o'clock

Member: bastla
bastla Jul 04, 2009 at 10:14:59 (UTC)
Goto Top
Hallo BrandonQuest und willkommen im Forum!

Die entsprechende Sequenz könnte so aussehen:
::Pfad der Textdatei ermitteln und speichern
set "dateiname_neu=%~dpn1.txt"  

::alten Wert von %Zeile% entfernen
set "Zeile="  
for /f "delims=:" %%i in ('findstr /n /c:"ID-No:" "%dateiname_neu%"') do set "Zeile=%%i"  
::alten Inhalt von %ID% loeschen
set "ID="  
::Falls Zeile mit "ID-No." gefunden wurde, uebernacheste Zeile auslesen 
::(dazu alles bis zur naechsten Zeile ueberspringen und nur die dann erste Zeile verwenden).
if defined Zeile (
    set /a Zeile+=1
    for /f "usebackq skip=%Zeile%" %%i in ("%dateiname_neu%") do if not defined ID set "ID=%%i"  
)
::Falls keine ID gefunden wurde, Bearbeitung (dieser Datei) abbrechen
if not defined ID echo "Keine ID gefunden" & goto :eof  
Anmerkung: Da der Pfad der Textdatei öfter benötigt wird, bietet es sich an, diesen in einer Variablen (%dateiname_neu%) festzuhalten, wobei die in Zeile 2 dargestellte Schreibweise etwas flexibler ist - konkret: Verwende alle Bestandteile des Pfades bis auf den letzten Punkt und den Teil dahinter (= .Dateityp; siehe dazu "for /?" gegen Ende).

Grüße
bastla
Member: BrandonQuest
BrandonQuest Jul 04, 2009 at 11:15:33 (UTC)
Goto Top
Vielen Dank, bastla!

Ich bin erst in einigen Stunden wieder da und werde es dann gleich verdauen, ausprobieren und rückmelden!

Gruß
Brandon