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-Key: 64308

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

Printed on: May 5, 2024 at 15:05 o'clock

Member: miniversum
miniversum Jul 20, 2007 at 11:16:08 (UTC)
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
Member: TheQuestion
TheQuestion Jul 20, 2007 at 12:09:50 (UTC)
Goto Top
danke für die schnelle antwort
probiere das gleich mal aus
Member: TheQuestion
TheQuestion Jul 23, 2007 at 06:24:14 (UTC)
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 .......
Member: Biber
Biber Jul 23, 2007 at 07:01:57 (UTC)
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
Member: TheQuestion
TheQuestion Jul 23, 2007 at 07:42:06 (UTC)
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
Member: Biber
Biber Jul 23, 2007 at 08:19:47 (UTC)
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
Member: TheQuestion
TheQuestion Jul 23, 2007 at 08:35:33 (UTC)
Goto Top
super danke,

test läuft ergebnisse gibts gleich!
Member: TheQuestion
TheQuestion Jul 23, 2007 at 08:38:09 (UTC)
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........
Member: bastla
bastla Jul 23, 2007 at 09:03:48 (UTC)
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]
Member: TheQuestion
TheQuestion Jul 23, 2007 at 09:12:53 (UTC)
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
Member: miniversum
miniversum Jul 23, 2007 at 09:25:17 (UTC)
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.
Member: TheQuestion
TheQuestion Jul 23, 2007 at 10:08:24 (UTC)
Goto Top
egal ob zu spät

danke nochmals für die rege Beteiligung
Member: TheQuestion
TheQuestion Jul 23, 2007 at 10:26:31 (UTC)
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??
Member: bastla
bastla Jul 23, 2007 at 11:21:18 (UTC)
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
Member: bastla
bastla Jul 23, 2007 at 11:24:36 (UTC)
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
Member: TheQuestion
TheQuestion Jul 23, 2007 at 11:34:31 (UTC)
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
Member: Biber
Biber Jul 23, 2007 at 12:10:05 (UTC)
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
Member: bastla
bastla Jul 23, 2007 at 14:13:17 (UTC)
Goto Top
@Biber

Thx

Grüße
bastla
Member: bastla
bastla Jul 23, 2007, updated at Oct 18, 2012 at 16:32:14 (UTC)
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