thequestion
Goto Top

In einer txt.datei einen bestimmten Bereich auslesen

Hallo zusammen,

ich habe ein Problem und zwar bekomme ich jeden Tag 2 Logdateien. Diese sind aber locker 30 - 50 Seiten stark und das kostet mich jeden Tag viel Zeit diese Logs zu kontrollieren.
In dieser Kontrolle such ich einfach nach den Dateiabschnnitten wo ein Kopiervorgang nicht funktioniert hat.
Dieses wird mit dem Wort "failed" angezeigt.
Ich bekomme zusätzlich eine Tabelle (in der txt.datei) mit der Auflistung was bei jedem Kopiervorgang gemacht wurde.
Sieht so aus=>

24bf2c2696e34c266df5863402ab049b-1

Wie man sieht sind hier "0 Files mit Failed".
Nun ist meine Frage gibt es eine Möglichkeit das in eine Batch.datei oder eine andere Art von Datei zu packen, dass diese mir dann nur diese Tabellen oder alles was unter dem Wort "FAILED" steht anzeigt?
Da ich aber, ich würde mal sagen, nur geringe Programmierfähigkeiten besitzte und diese dann nur in C++, hänge ich nun einwenig in der Luft.
Wäre schön wenn mir jemand einen Lösungsanssatz nennen könnte.....

schonmal Danke im Vorraus für eure Hilfe.

Gruss Stephan

Content-ID: 64308

Url: https://administrator.de/forum/in-einer-txt-datei-einen-bestimmten-bereich-auslesen-64308.html

Ausgedruckt am: 24.12.2024 um 16:12 Uhr

miniversum
miniversum 20.07.2007 um 13:16:08 Uhr
Goto Top
Versuchs mal mit ner Batch datei die so aussieht:
@echo off & setlocal enabledelayedexpansion
set "failedzeile="
FOR /F "tokens=1 delims=" %%a in ('find /N "FAILED" Datei.txt) do if not defined failedzeile set failedzeile = %%a
FOR /F "skip=%failedzeile% delims=" %%l in (Datei.txt) do echo %%i
set /a failedzeile-=1
set counter=0
FOR /F "skip=%failedzeile% delims=" %%l in (Datei.txt) do (
if !counter! leq 4 echo %%i>>Tabelle.txt
set /a counter+=1
)

miniversum
TheQuestion
TheQuestion 20.07.2007 um 14:09:50 Uhr
Goto Top
danke für die schnelle antwort
probiere das gleich mal aus
TheQuestion
TheQuestion 23.07.2007 um 08:24:14 Uhr
Goto Top
mhm Ok, dass hat erstmal noch nicht geklappt. Versuche es aber weiter.
Hier ist der Fehler der mir ausgegeben wird.

=> " delims="" ist syntaktisch an dieser Stelle nicht verarbeitbar.
das bekomme ich zweimal...

Sagt mit leider nicht viel .......
Biber
Biber 23.07.2007 um 09:01:57 Uhr
Goto Top
Moin TheQuestion,

mmh...die Fehlermeldung ist auch irreführend, weil der Tippfehler ganz woanders liegt:

STREICHE: ....... ('find /N "FAILED" Datei.txt) .......
SETZE: ............ ('find /N "FAILED" Datei.txt') .......

---> bzw. ergänze das fehlende einfache Hochkomma.

Grüße
Biber
TheQuestion
TheQuestion 23.07.2007 um 09:42:06 Uhr
Goto Top
ok den Tippfehler habe ich korregiert, aber die Fehlermedlung bleibt die selbe,
so sieht die Batch-datei nun aus.

@echo off & setlocal enabledelayedexpansion
set "failedzeile="  
FOR /F "tokens=1 delims=" %%a in ('find /N "FAILED" Dateiname') do if not defined failedzeile set failedzeile = %%a  
FOR /F "skip=%failedzeile% delims=" %%l in (Dateiname) do echo %%i  
set /a failedzeile-=1
set counter=0
FOR /F "skip=%failedzeile% delims=" %%l in (Dateiname) do (  
if !counter! leq 4 echo %%i>>Tabelle.txt
set /a counter+=1
)
pause
ist da vielleicht noch irgendwo nen Fehler drin den ich übersehen habe?

MfG
Biber
Biber 23.07.2007 um 10:19:47 Uhr
Goto Top
Moin TheQuestion,

>..ist da vielleicht noch irgendwo nen Fehler drin den ich übersehen habe?
Nein, Du nicht... aber ich *schäm*

Sorry, ich hatte auch nur biooptisch-global gescant (=einen kurzen Blick darauf geworfen).
Der nächste Fehler ist für einen Laien kaum zu finden:
Bei den dynamischen Zählvariablen wird im Gegensatz zu allen anderen CMD-Variablen zwischen GROSS- und klein-Schreibung unterschieden. Sprich GROSS-%%I ist ungleich klein-%%i.

Und das ist in mehreren FOR-Anweisungen so.
Ich versuche es mal ungetestet zu korrigieren:
@echo off & setlocal EnableDelayedExpansion
set "failedzeile="  
FOR /F "tokens=1 delims=" %%a in ('find /N "FAILED" Dateiname') do (  
     if not defined failedzeile set "failedzeile=%%a"  
)
REM Uncomment for Debug ##: FOR /F "skip=%failedzeile% delims=" %%i in (Dateiname) do echo %%i 
set /a failedzeile-=1
set counter=0
FOR /F "skip=%failedzeile% delims=" %%i in (Dateiname) do (  
             if !counter! leq 4 echo %%i>>Tabelle.txt
             set /a counter+=1
)

So in etwa müsste es von miniversum gemeint gewesen sein... ich habe alle GROSS-%%I durch klein-%%i ersetzt.

Bitte neuer Versuch.
Grüße
Biber
TheQuestion
TheQuestion 23.07.2007 um 10:35:33 Uhr
Goto Top
super danke,

test läuft ergebnisse gibts gleich!
TheQuestion
TheQuestion 23.07.2007 um 10:38:09 Uhr
Goto Top
Mhm Test ist gelaufen, Ergebniss
=> bekomme immer noch den selben Fehler bloss diesmal nur noch einmal!
Ist schon ne Verbesserung face-wink
Sorry würde gerne mehr helfen als immer nur Fehler zuposten........
bastla
bastla 23.07.2007 um 11:03:48 Uhr
Goto Top
Hallo TheQuestion!

Ersetze
FOR /F "tokens=1 delims=" %%a in ('find /N "FAILED" Dateiname') do (  
durch
FOR /F "<b>skip=2</b> delims=" %%a in ('find /N "FAILED" Dateiname') do (  
oder besser
FOR /F "delims=:" %%a in ('findstr /N "FAILED" Dateiname') do (  

Grüße
bastla

[Edit] "findstr"-Variante ergänzt [/Edit]
TheQuestion
TheQuestion 23.07.2007 um 11:12:53 Uhr
Goto Top
Erstmal herzlichen Dank für eure Hilfe

@ bastla=> klasse jetzt funktioniert die batch.datei.
Hier mal die korrigierte Batch:

@echo off & setlocal EnableDelayedExpansion
set "failedzeile="  
FOR /F "skip=2 delims=" %%a in ('find /N "FAILED" Dateiname') do (  
     if not defined failedzeile set "failedzeile=%%a"  
)
REM Uncomment for Debug ##: FOR /F "skip=%failedzeile% delims=" %%i in (Dateiname) do echo %%i 
set /a failedzeile-=1
set counter=0
FOR /F "skip=%failedzeile% delims=" %%i in (Dateiname) do (  
             if !counter! leq 4 echo %%i>>Tabelle.txt
             set /a counter+=1
)

So beitrag kann dann auch auf gelöst und geschlossen gesetzt werden.

Gruss TheQuestion
miniversum
miniversum 23.07.2007 um 11:25:17 Uhr
Goto Top
Lese es jetzt erst. Ups hab das mal wieder ncith getestet.

@TheQuestion
Nimm mal die Batch die Biber gepostet hat.
In der ersten Forschleife fehlt noch was. Mach aus dem
FOR /F "tokens=1 delims=" %%a in ('find /N "FAILED" Datei.txt') do (
das:
FOR /F "skip=2 tokens=1 delims=" %%a in ('find /N "FAILED" Datei.txt') do (

Dann sollte es gehen.

miniversum

EDIT: ups zu spät.
TheQuestion
TheQuestion 23.07.2007 um 12:08:24 Uhr
Goto Top
egal ob zu spät

danke nochmals für die rege Beteiligung
TheQuestion
TheQuestion 23.07.2007 um 12:26:31 Uhr
Goto Top
Sorry aber mir ist gerade nochwas eingefallen,

in den Logs stehen mehr als nur eine Tabelle mit Failed drin.
Kann man da eine For-Schleife ein bauen die von einer Tabelle in die nächste springt?
Habe es mit einer anderen Batch.datei porbiert die die von oben immer aufruft aber das bringt ja nichts, oder mehr gesagt immer das selbe.

Kann mir da jemand nochmal unter die arme greifen??
bastla
bastla 23.07.2007 um 13:21:18 Uhr
Goto Top
Hallo TheQuestion!
@echo off & setlocal EnableDelayedExpansion
set "Datei=D:\Robolog.txt"  
set "Tabelle=D:\Tabelle.txt"  
if exist "%Tabelle%" del "%Tabelle%"  
set "failedzeile="  
FOR /F "delims=:" %%a in ('findstr /N "FAILED" "%Datei%"') do set "failedzeile=%%a" & call :Ausgabe  
goto :eof
:Ausgabe
echo Zeile %failedzeile%>>"%Tabelle%"  
set /a failedzeile-=1
set counter=0
FOR /F "usebackq skip=%failedzeile% delims=" %%i in ("%Datei%") do (  
             if !counter! leq 4 echo %%i>>"%Tabelle%"  
             set /a counter+=1
)
echo.>>"%Tabelle%"  
echo.>>"%Tabelle%"  
goto :eof
Es werden in dieser Version die zu verwendenden Dateien mit "set"-Zeilen am Anfang festgelegt. Außerdem habe ich Zeilennummer und 2 Leerzeilen vor bzw nach Ausgabe der Tabellen hinzugefügt - wenn nicht gewünscht, die entsprechenden "echo"-Zeilen entfernen.

Grüße
bastla
bastla
bastla 23.07.2007 um 13:24:36 Uhr
Goto Top
Eigentlich hatte ich da oben etwas mehr geschrieben, nämlich:

Hallo TheQuestion!

@echo off & setlocal EnableDelayedExpansion
set "Datei=D:\Robolog.txt"  
set "Tabelle=D:\Tabelle.txt"  
if exist "%Tabelle%" del "%Tabelle%"  
set "failedzeile="  
FOR /F "delims=:" %%a in ('findstr /N "FAILED" "%Datei%"') do set "failedzeile=%%a" & call :Ausgabe  
goto :eof
:Ausgabe
echo Zeile %failedzeile%>>"%Tabelle%"  
set /a failedzeile-=1
set counter=0
FOR /F "usebackq skip=%failedzeile% delims=" %%i in ("%Datei%") do (  
             if !counter! leq 4 echo %%i>>"%Tabelle%"  
             set /a counter+=1
)
echo.>>"%Tabelle%"  
echo.>>"%Tabelle%"  
goto :eof

Es werden in dieser Version die zu verwendenden Dateien mit "set"-Zeilen am Anfang festgelegt. Außerdem habe ich Zeilennummer und 2 Leerzeilen vor bzw nach Ausgabe der Tabellen hinzugefügt - wenn nicht gewünscht, die entsprechenden "echo"-Zeilen entfernen.

Grüße
bastla
TheQuestion
TheQuestion 23.07.2007 um 13:34:31 Uhr
Goto Top
ok da wäre ich selber nicht drauf gekommen!
Also nochmal danke nun habe ich alles bei sammmen und kann mir dadurch ziemlich viel arbeit sparen!!!

Achso habe ich fast vergessen, es funktioniert einwandfrei!

Bis zum nächsen Mal

Gruss Thequestion
Biber
Biber 23.07.2007 um 14:10:05 Uhr
Goto Top
Moin TheQuestion,
>kann mir dadurch ziemlich viel arbeit sparen
Ist ja auch in Ordnung...aber das Setzen des Beitrags auf "Gelöst" ist noch Dein Job! face-wink

@bastla [OT - zum Bug beim Posten]
Habe den bei Deinem Kommentar aufgefallenen Bug im ) eingestellt.

Werde auch posten, wenn dieser Bug lokalisiert und gefixt ist.
An Deinem geposteten Kommentar finde ich auch keine Auffälligkeiten.

Grüße
Biber
bastla
bastla 23.07.2007 um 16:13:17 Uhr
Goto Top
@Biber

Thx

Grüße
bastla
bastla
bastla 23.07.2007, aktualisiert am 18.10.2012 um 18:32:14 Uhr
Goto Top
@Biber

Falles es ev hilft: Von dem Bug sind auch andere Threads / User betroffen, siehe zB Bug im Script - wer kennt sich aus?
und Dateinamen aus Ftpverzeichnis auslesen, in HTML-Links umwandeln und in .txt speichern

Grüße
bastla