jschneider
Goto Top

IP-Adresse an unbestimmter Stelle einer Zeile auslesen

Hallo Gemeinde


ich stehe mal wieder auf dem Schlauch...

ich würde gerne IP-Adressen aus Zeilen auslesen, die aber an unbestimmten Stellen auftauchen können.

Das sähe dann in etwa so aus


irgendwas1 irgendwas2 10.11.12.13 irgendwas3
irgendwas1 irgendwas2  irgendwas3 10.11.12.14 irgendwas4

schlussendlich brauch ich immer irgendwas 1 und die IP-Adresse zurück.
Irgendwas1 ist ja einfach, aber da die IP mal an dritter , mal an vierter Stelle auftauchen kann . . .

Irgendwas2 und irgendwas3 können nur folgende Zustände haben
-Paused
-error printing (einiger fall für irgendwas2 und irgendwas3)
-idle

kleinen Tipp bitte ? face-wink

<edit>
die IP-Adresse fängt IMMER mit einer 10. an
</edit>

Content-Key: 80459

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

Printed on: April 19, 2024 at 09:04 o'clock

Member: miniversum
miniversum Feb 11, 2008 at 14:24:41 (UTC)
Goto Top
Versuchs mal so:
@echo off
FOR /F "tokens=1,3,4 delims= " %%a in (Datei.txt) do set irgendwas1=%%a & set M1=%%b & set M2=%%c
if [%M1:~0,3%]==[10.] (set IP=%M1%) else (set IP=%M2%)
echo %irgendwas1%
echo %IP%
Member: jschneider
jschneider Feb 11, 2008 at 15:18:09 (UTC)
Goto Top
hmm das sieht prima aus. allerdings funktioniert jetzt so meine Schleife nicht mehr in der ich diverse Dateien aus einem Verzeichnis ermittle und diese Funktion gegen all diese Dateien fahre. So wie im code unten wird nur noch die erste Zeile abgearbeitet...

ist bestimmt was total doofes face-smile
@echo off & setlocal
cls
rem *************************************************************
rem ***
rem ***  Globale Einstellungen
rem ***   
set Basedir=\\Servername\PrintScripte\PMC-Merge
set IPrintExportDir=%Basedir%\Iprint-Exports
set MergeFile=%BaseDir%\temp1.txt
if exist %MergeFile% del %MergeFile% 
rem 
rem                                                           ***
rem *************************************************************


rem ***
rem *** Liste der Exportdateien ermitteln

if NOT Exist "%IPrintExportDir%" (  
  echo kein Iprint Export Verzeichnis gefunden
 goto :eof
 )

for %%i in (%IPrintExportDir%\*.txt) do (
  echo %%i >>  %MergeFile%
  call :ExportFileRead  %%i
)

goto fertig

:ExportFileRead
rem ***
rem *** Aus den ermittelten Dateien die Werte auslesen
rem 
set "iPrintExportFile=%1"  
rem echo bearbeite datei %iPrintExportFile%

FOR /F "skip=3 tokens=1,3,4 delims= " %%a in (%iPrintExportFile%) do set iPrintName=%%a & set M1=%%b & set M2=%%c  
if [%M1:~0,3%]==[10.] (set IP=%M1%) else (set IP=%M2%)
echo %IP%;-;-;-;%iPrintName% >> %MergeFile%



:fertig
echo fertig
Member: bastla
bastla Feb 11, 2008 at 16:08:39 (UTC)
Goto Top
Hallo jschneider!

Du musst das Unterprogramm ":ExportFileRead" beenden, indem Du eine Zeile
goto :eof
(vor ":fertig") einfügst.

Alternative: Ersetze "goto fertig" einfach durch
echo fertig
goto :eof

Grüße
bastla
Member: jschneider
jschneider Feb 11, 2008 at 16:46:01 (UTC)
Goto Top
das hilft leider nicht


die freundlicherweise von miniversum gepostete funktion an sich gibt mir nur eine Zeile aus
(so wie sie ist getestet anhand einer gefüllten datei )


die Zeile ist zwar richtig, aber eben nur eine Zeile
Member: miniversum
miniversum Feb 11, 2008 at 17:05:56 (UTC)
Goto Top
Ups das war ungetestet von mir. So wird nur jede Zeile verarbeitet.
Versuchs mal so:
@echo off & setlocal
cls
rem *************************************************************
rem ***
rem ***  Globale Einstellungen
rem ***   
set Basedir=\\Servername\PrintScripte\PMC-Merge
set IPrintExportDir=%Basedir%\Iprint-Exports
set MergeFile=%BaseDir%\temp1.txt
if exist %MergeFile% del %MergeFile% 
rem 
rem                                                           ***
rem *************************************************************


rem ***
rem *** Liste der Exportdateien ermitteln

if NOT Exist "%IPrintExportDir%" (  
  echo kein Iprint Export Verzeichnis gefunden
 goto :eof
 )

for %%i in (%IPrintExportDir%\*.txt) do (
  echo %%i >>  %MergeFile%
  rem echo bearbeite datei %%i
  for /F "skip=3 delims=" %%j in ("%%i") do (    
    call :ExportFileReadLine  "%%j"  
  )
)

goto:fertig

:ExportFileReadLine 
rem ***
rem *** Aus den ermittelten Dateien die Werte auslesen
rem 
set "iPrintExportFile=%~1"  


FOR /F "tokens=1,3,4 delims= " %%a in (%iPrintExportFile%) do set iPrintName=%%a & set M1=%%b & set M2=%%c  
if [%M1:~0,3%]==[10.] (set IP=%M1%) else (set IP=%M2%)
echo %IP%;-;-;-;%iPrintName% >> %MergeFile%
goto:eof


:fertig
echo fertig

miniversum
Member: jschneider
jschneider Feb 11, 2008 at 17:24:47 (UTC)
Goto Top
entweder es liegt daran, dass ich heute schon um 04:00 aufgetanden bin und ich nur noch Bahnhof verstehe oder dir ist ist da ein Fehler unterlaufen...

du hast jetzt in dem Teil, in dem ich die Dateien aus dem Verzeichnis ermittelt habe eine Funktion hinzugefügt, die ich nicht verstehe und die m.E. auch nichts mit den Zeilen innerhalb dieser Dateien zu tun hat.

Der Weg ist mir klar.. Dateien ermitteln, dann aus jeder ermittelten Datei erste Zeile auslesen und für jede zeile die Funktion durchführen

%%i ist ja der Dateiname aber %%j irgendwie auch face-wink
d.h. nicht der Dateiinhalt, sondern der Dateiname wird übergeben

for %%i in (%IPrintExportDir%\*.txt) do (
  echo %%i >>  %MergeFile%
  echo bearbeite datei %%i
  for /F "skip=3 delims=" %%j in ("%%i") do (    
    echo i ist %%i
    echo j ist %%j
    pause
    call :ExportFileReadLine  "%%j"  
  )
)
Member: jschneider
jschneider Feb 11, 2008 at 17:33:50 (UTC)
Goto Top
ah ich hab was gefunden..

anstelle

  for /F "skip=3 delims=" %%j in ("%%i") do (    

bringt mich

  for /f "skip=3 delims=" %%j in (%%i) do (    
etwas weiter .. (ausgabe der ersten Zeile für die gesucht werden soll

aber:

die :ExportFileReadLine arbeitet dann nichtmehr gegen eine Datei, sondern gegen die Zeilen


 FOR /F "tokens=1,3,4 delims= " %%a in (%iPrintExportFile%) do set iPrintName=%%a & set M1=%%b & set M2=%%c   

ich versuche mich mal weiter
Member: jschneider
jschneider Feb 11, 2008 at 17:44:47 (UTC)
Goto Top
jetzt gehts

@echo off & setlocal
cls
rem *************************************************************
rem ***
rem ***  Globale Einstellungen
rem ***   
set Basedir=\\vshqprt01\q$\PrintScripte\PMC-Merge
set IPrintExportDir=%Basedir%\Iprint-Exports
set MergeFile=%BaseDir%\temp1.txt
if exist %MergeFile% del %MergeFile% 
rem 
rem                                                           ***
rem *************************************************************


rem ***
rem *** Liste der Exportdateien ermitteln

if NOT Exist "%IPrintExportDir%" (  
  echo kein Iprint Export Verzeichnis gefunden
 goto :eof
 )

for %%i in (%IPrintExportDir%\*.txt) do (
  echo %%i >>  %MergeFile%
  echo bearbeite datei %%i
  for /f "skip=3 delims=" %%j in (%%i) do (    
rem  for /F "skip=3 delims=" %%j in ("%%i") do (   
   echo i ist %%i
    echo j ist %%j
    echo -----------------------------
    
    call :ExportFileReadLine  "%%j"  
  )
)

goto:fertig

:ExportFileReadLine 
rem ***
rem *** Aus den ermittelten Dateien die Werte auslesen
rem 
set "iPrintExportLine=%~1"  
echo %iPrintExportLine%


FOR /F "tokens=1,3,4 delims= " %%a in ("%iPrintExportLine%") do set iPrintName=%%a & set M1=%%b & set M2=%%c  
if [%M1:~0,3%]==[10.] (set IP=%M1%) else (set IP=%M2%)
echo %IP%;-;-;-;%iPrintName% >> %MergeFile%
goto:eof


:fertig
echo fertig
Member: bastla
bastla Feb 11, 2008 at 17:48:05 (UTC)
Goto Top
Hallo jschneider!

Sorry - ich hatte oben nur ganz kurz drübergelesen ...

... und gratuliere, dass Du es selbst ausgetüftelt hast. face-smile

Sicherer wird es übrigens, wenn Du die entsprechende "for"-Zeile so schreibst:
for /f "usebackq skip=3 delims=" %%j in ("%%i") do (  
Dadurch bleibt der Dateiname in "%%i" unter Anführungszeichen - wichtig, falls er einmal Leerzeichen enthalten sollte.

Grüße
bastla
Member: jschneider
jschneider Feb 11, 2008 at 18:05:57 (UTC)
Goto Top
... und gratuliere, dass Du es selbst
ausgetüftelt hast. face-smile

Mühsamm nährt sich das Eichhörnchen - dank diesem Forum aber immer schneller face-wink

Sicherer wird es übrigens, wenn Du die
entsprechende "for"-Zeile so
schreibst:
for /f "usebackq skip=3  
> delims=" %%j in ("%%i") do (  
> 
Dadurch bleibt der Dateiname in
"%%i" unter Anführungszeichen
- wichtig, falls er einmal Leerzeichen
enthalten sollte.

direkt so umgesetzt

danke an euch beide nochmal !
Member: Biber
Biber Feb 11, 2008 at 18:26:59 (UTC)
Goto Top
Moin jschneider,

jetzt, wo ja schon eine funktionierende Lösung vorliegt, kann ich ja gefahrlos einen kleinen Verschlankungsvorschlag machen.

:: ..... bis zu dieser Zeile  "for %%i in (%IPrintExportDir%\*.txt) do ("  ...wie oben  
for %%i in (%IPrintExportDir%\*.txt) do (
  echo %%i >>  %MergeFile%
  echo bearbeite datei %%i
   for /f "tokens=1,*" %%x in ('more +3 "%%i" ^|findstr /C:" 10."') do (  
       for %%a in (%%y) do @if "%%a" LEQ "11." echo %%a;-;-;-;%%x >> %MergeFile%  
 ) )
echo fertig

Grüße
Biber