jschneider
Goto Top

Wert Exakt ! finden (z.B. eine IP-Adresse)

Hallo *hust*

ich mal wieder. Ich hätte da gern mal ein Problem face-wink

Ich habe 2 Source-Dateien, deren Formatierung (Trennzeichen etc.) ich mir selbst zusammenbaue.
In beiden Dateien befinden sich neben IP-Adressen noch andere Werte, die ich per suche nach IP-Adresse miteinander mergen mächte. Also nur bestimmte Werte aus beiden Dateien.

Beispiel-Datei 1
10.11.12.13;-;-;das ist eine Lustige Adresse
10.11.12.14;-;-;das ist komisch
Beispiel-Datei 2
10.11.12.13;-;12233;irgendwas1
10.11.12.13;-;48433;irgendwas2
10.11.12.14;-;98734;irgendwas3
10.11.12.140;-;976;irgendwas4

Wenn jetzt für jede IP aus Beispiel-Datei 1 eine schleife ausgeführt wird, die diese IP in der zweiten Datei sucht und die dazugehörigen Werte ermittelt.....
for /f "tokens=1,2 delims=;" %%i in ('findstr /c:"10." %SourceMergeFile%') do (  
call :Compare %%i %%j
)

:compare
set "sIP=%1"  
set "ippName=%2"  

for /f "tokens=1,2,3,4 delims=;" %%a in ('findstr /c:"%sIP%" %SourceCompareFile%') do (  
   echo  %%a;%ippname%;%%c;%%d >> %CheckFile02%

findet diese Funktion leider auch IP-Adresen in der der die erste UP-Adresse nur enthalten, nicht aber die gleiche ist.

Also die suche nach 10.11.12.13 findet 10.11.12.13 UND 10.11.12.130


kennt ihr irgendeinen Ansatz der mir hier weiterhelfen könnte ?

Wenn ich mal laut nachdenke kann dieser Sonderfall ja nur an der letzten Stelle auftreten. hm oder ?
Könnte ich dann also evtl bei der Quell-IP die Länge der IP ermitteln und dieses als Bedingung für das finden des Wertes in der Datei2 benutzen oder so ?

also 10.11.12.13 hat (mit Punkten) 11 Zeichen
suche nach 10.11.12.13 -> finden von 10.11.12.130 schauen wv Zeichen wenn nicht genau 11 Zeichn dann nicht korrekt .. oder so ??

sollte an einer anderen Stelle eine IP 1 zeichen weniger haben so würde die suche an sich schon fehlschlagen und es zu einem vergleich der


*schwitz*

habt ihr andere Vorschläge oder wenn mein Ansatz ganz gut klingt .. wie ermittle ich die Länge eines Wertes ?

Gruß, Jan

Content-ID: 80748

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

Ausgedruckt am: 25.11.2024 um 17:11 Uhr

Dani
Dani 14.02.2008 um 14:33:24 Uhr
Goto Top
Hallo Jan,
setze doch einfach mal den Parameter /L bei findstr zusätzlich. Somit sollte er nur eine IP-Adresse matchen.


Grüße
Dani
jschneider
jschneider 14.02.2008 um 14:42:57 Uhr
Goto Top
Hallo Jan,
setze doch einfach mal den Parameter /L bei
findstr zusätzlich. Somit sollte er nur
eine IP-Adresse matchen.


Grüße
Dani


ui , danke für die schnelle Rückmeldung. aber bei deinem Ansatz müsste sichergestellt werden, dass 10.11.12.13 VOR 10.11.12.130 kommt.


ich habe aber eine Lösung gefunden.
ich lese einfach IP1 aus datei 1, suche die Zeile(n) in der IP1 vorhanden ist/sind.. suche dann wiederum aus dieser Zeile die IP und vergleiche die beiden erstmal

for /f "tokens=1,2,3,4 delims=;" %%a in ('findstr /c:"%sIP%" %SourceCompareFile%') do (  
  if %sIP% EQU %%a (
   set  /a foundcounter="foundcounter+1"  
   echo  IPCounter = %IPCounter% - - - FoundCounter =  %foundcounter%    
   echo  %%a;%ippname%;%%c;%%d
   echo  %foundcounter%;%sIP%;%%a;%ippname%;%%c;%%d >> %CheckFile02%
  ) else (
         echo %sIP% ist nicht wirklich %%a
	 echo --------------------------------------
         %beep_bin% 3 -p
        )
 )

sorry fürs voreilige posten, danke fürs dennoch lesen face-wink

manchmal komm ich nach stundenlangem nachdenken erst auf eine Lösung wenn ichs wem anders erzählt oder wie hier eben gepostet habe..

das ist wohl das archimedische Prinzip

, Jan
miniversum
miniversum 14.02.2008 um 16:39:15 Uhr
Goto Top
Eine geringe Abwandlung deiner Batch aus dem eingangsposting wäre so:
:compare
set "sIP=%1"  
set "ippName=%2"  

for /f "tokens=1,2,3,4 delims=;" %%a in ('findstr /c:"%sIP%;" %SourceCompareFile%') do (  
   echo  %%a;%ippname%;%%c;%%d >> %CheckFile02%

So wird dann nach "10.11.12.13;" gesucht und kann auch ncith mit "10.11.12.130" verwechselt werden.

miniversum
jschneider
jschneider 14.02.2008 um 20:33:04 Uhr
Goto Top
hmm , die Lösung lag so nah ^^

danke