IP Adresse aus TXT auslesen und neue Textdatei zusammenbauen!?
Die Suche nach IP Adressen mit regulärem Ausdruck funktioniert schon.
Fehlt nur noch wie ich den gefundenen Ausdruck in eine neue TXT Datei schreiben kann?!
Guten Tag,
es liegt eine Textdatei in folgendem Format vor:
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.205
Davon gibt es mehrere Zeilen!
Ich möchte aus jeder Zeile die IP-Adresse extrahieren und in eine neue TXT Datei schreiben, finde aber nicht die richtigen Mittel dazu, oder suche einfach nach dem falschen.
Mit Hilfe dieses Codes: http://www.mcseboard.de/windows-forum-scripting-71/zeile-string-auslese ...
und dem RegExp: "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
kann ich zumindest schon einmal die Zeilen "greifen" in denen die IP vorhanden ist.
Kann mir jmd. nen Tipp geben wie ich den getroffenen Ausdruck nun abgespeichert bekomme?
Danke für eure Ratschläge!
Fehlt nur noch wie ich den gefundenen Ausdruck in eine neue TXT Datei schreiben kann?!
Guten Tag,
es liegt eine Textdatei in folgendem Format vor:
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.205
Davon gibt es mehrere Zeilen!
Ich möchte aus jeder Zeile die IP-Adresse extrahieren und in eine neue TXT Datei schreiben, finde aber nicht die richtigen Mittel dazu, oder suche einfach nach dem falschen.
Mit Hilfe dieses Codes: http://www.mcseboard.de/windows-forum-scripting-71/zeile-string-auslese ...
und dem RegExp: "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
kann ich zumindest schon einmal die Zeilen "greifen" in denen die IP vorhanden ist.
Kann mir jmd. nen Tipp geben wie ich den getroffenen Ausdruck nun abgespeichert bekomme?
Danke für eure Ratschläge!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 135969
Url: https://administrator.de/forum/ip-adresse-aus-txt-auslesen-und-neue-textdatei-zusammenbauen-135969.html
Ausgedruckt am: 09.04.2025 um 03:04 Uhr
21 Kommentare
Neuester Kommentar
hallo!
mein Vorschlag in vbs:
die Variable FILE meint deine txt-Datei.
Achtung: Dieser rudimentäre Code funktioniert nur, wenn Deine IP-Adressen nur 13 Zeichen lang sind (wie in Deinem Beispiel). Ansonsten halt die Zeileipadresse = ..... entsprechend ändern
Solltest Du auch längere Ip-Adressen (oder kürzere) haben, dann bitte hier nochmal posten (oder selber suchen...)
Ich würde mich mit InstrRev an die Sache heranwagen...
hoffe, geholfen zu haben
lg
mein Vorschlag in vbs:
file = "ipliste.txt"
fileneu = "ipneu.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set File = fs.OpenTextFile(file , 1, true)
' Datei zum Lesen öffnen
Do While not file.AtEndOfStream
ipadresse = ipadresse & right(file.ReadLine,13) & vbcrlf
Loop
set objtextstream = fs.createtextfile(fileneu, True)
strwritestring = ipadresse
objtextstream.write strwritestring
objtextstream.close
set objtextstream = nothing
set file = nothing
set fs = nothing
die Variable FILE meint deine txt-Datei.
Achtung: Dieser rudimentäre Code funktioniert nur, wenn Deine IP-Adressen nur 13 Zeichen lang sind (wie in Deinem Beispiel). Ansonsten halt die Zeileipadresse = ..... entsprechend ändern
Solltest Du auch längere Ip-Adressen (oder kürzere) haben, dann bitte hier nochmal posten (oder selber suchen...)
Ich würde mich mit InstrRev an die Sache heranwagen...
hoffe, geholfen zu haben
lg
Hallo!
der Vollständigkeit halber der fertige Code für ALLE Längen von IP-Adressen (der Code sucht nach dem letzten Leerzeichen, ab da muss die IP-Adresse beginnen....)
(Code in VBS, wer mag kann aber auch noch den batch-code posten... eh klar!)
Ergebnis
ipliste.txt:
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.34.205
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.206
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.255.207
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.8
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.205
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.16.0.206
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.207
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.18.0.28
ipneu.txt:
192.168.34.205
192.168.0.206
192.168.255.207
192.168.0.8
192.168.0.205
192.16.0.206
192.168.0.207
192.18.0.28
Hoffe, das entpsricht Deinen Anforderungen. Falls dem so ist: bitte Frage als gelöst markieren!
Hoffe, geholfen zu haben und freue mich - wie immer eigentlich - über postives Feedback
lg
der Vollständigkeit halber der fertige Code für ALLE Längen von IP-Adressen (der Code sucht nach dem letzten Leerzeichen, ab da muss die IP-Adresse beginnen....)
(Code in VBS, wer mag kann aber auch noch den batch-code posten... eh klar!)
file = "ipliste.txt"
fileneu = "ipneu.txt"
Set fs = CreateObject("Scripting.FileSystemObject")
Set File = fs.OpenTextFile(file , 1, true)
' Datei zum Lesen öffnen
Do While not file.AtEndOfStream
zeile = (file.ReadLine)
Iplaenge = len(zeile)-InstrRev(zeile," ")
ipadresse = ipadresse & right(zeile,Iplaenge) & vbcrlf
Loop
set objtextstream = fs.createtextfile(fileneu, True)
strwritestring = ipadresse
objtextstream.write strwritestring
objtextstream.close
file.close
set objtextstream = nothing
set file = nothing
set fs = nothing
Ergebnis
ipliste.txt:
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.34.205
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.206
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.255.207
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.8
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.205
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.16.0.206
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.168.0.207
AP IP hostname 00:07:0e:38:ae:a0 11.02.2010 15:30:00 192.18.0.28
ipneu.txt:
192.168.34.205
192.168.0.206
192.168.255.207
192.168.0.8
192.168.0.205
192.16.0.206
192.168.0.207
192.18.0.28
Hoffe, das entpsricht Deinen Anforderungen. Falls dem so ist: bitte Frage als gelöst markieren!
Hoffe, geholfen zu haben und freue mich - wie immer eigentlich - über postives Feedback
lg
Hallo Mike85 und willkommen im Forum!
Soferne nicht alle Zeilen eine IP enthalten und daher tatsächlich RegEx benötigt wird, etwa so:
Grüße
bastla
Soferne nicht alle Zeilen eine IP enthalten und daher tatsächlich RegEx benötigt wird, etwa so:
DateiEin = "D:\Liste.txt"
DateiAus = "D:\IP.txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set rE = New RegExp
rE.Global = True
rE.Pattern = "\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b"
Set Aus = fso.CreateTextFile(DateiAus, True)
For Each Match In rE.Execute(fso.OpenTextFile(DateiEin).ReadAll)
Aus.WriteLine Match
Next
Aus.Close
bastla
Hallo Mike85!
Da sich offensichlich auch TAB zwischen den einzelnen Feldern befinden, poste bitte Deine Beispieldaten unter -Tags ...
Gibt es nur die beiden beschriebenen Arten von Zeilen? Falls nein: Sind die Zeilen mit den Hostnamen eindeutig anhand des "AP Name" zu erkennen?
@urobe73
Danke für die Blumen - Deine zweite Version hat mir aber auch gefallen ...
Grüße
bastla
Da sich offensichlich auch TAB zwischen den einzelnen Feldern befinden, poste bitte Deine Beispieldaten unter -Tags ...
Gibt es nur die beiden beschriebenen Arten von Zeilen? Falls nein: Sind die Zeilen mit den Hostnamen eindeutig anhand des "AP Name" zu erkennen?
@urobe73
Danke für die Blumen - Deine zweite Version hat mir aber auch gefallen ...
Grüße
bastla
hallo Mike85!
hier nun ein Update...
Achtung: Das Array wird in Zeile mit 50 Hosts angenommen...
Entweder hat bastla hier einen Verbesserungsvorschlag (Redim wird hier ja nicht funktionieren, oder? kenne mich aber mit Arrays nicht ganz soo aus) oder Du korrigierst den Wert auf Deine Anzahl...
Ansonsten gebe ich bastla recht:
Schön wäre es gewesen, Du hättest gleich einen Auszug Deiner .txt hier gepostet...
Tipp: Verwende den "< code >" Tag (ohne Leerzeichen)
lg
hier nun ein Update...
file = "ipliste.txt"
fileneu = "ipneu.txt"
dim liste(50,1)
Set fs = CreateObject("Scripting.FileSystemObject")
set objtextstream = fs.createtextfile(fileneu, True)
Set File = fs.OpenTextFile(file , 1, true)
i = 0
k = 0
Do While not file.AtEndOfStream
zeile = (file.ReadLine)
Iplaenge = len(zeile)-InstrRev(zeile," ")
if Instr(zeile,"AP Name")>= 1 then
liste(i,0) = right(zeile,Iplaenge)
i = i+1
else
liste(k,1) = right(zeile,Iplaenge)
K = k+1
end if
Loop
for i = 0 to ubound(liste)
objtextstream.write liste(i,1) & ";" & liste(i,0) & vbcrlf
next
Achtung: Das Array wird in Zeile mit 50 Hosts angenommen...
Entweder hat bastla hier einen Verbesserungsvorschlag (Redim wird hier ja nicht funktionieren, oder? kenne mich aber mit Arrays nicht ganz soo aus) oder Du korrigierst den Wert auf Deine Anzahl...
Ansonsten gebe ich bastla recht:
Schön wäre es gewesen, Du hättest gleich einen Auszug Deiner .txt hier gepostet...
Tipp: Verwende den "< code >" Tag (ohne Leerzeichen)
lg
Hallo Mike85!
Da ich leider gerade nicht mehr Zeit habe, als Grundgerüst (und unter der Annahme, dass sich die Felder anhand von TAB trennen lassen und anhand des ersten Feldes der jeweilige Satz identifiziert werden kann):
Grüße
bastla
Da ich leider gerade nicht mehr Zeit habe, als Grundgerüst (und unter der Annahme, dass sich die Felder anhand von TAB trennen lassen und anhand des ersten Feldes der jeweilige Satz identifiziert werden kann):
DateiEin = "D:\Liste.txt"
DateiAus = "D:\IPHost.txt"
Host = "AP Name"
IP = "AP IP"
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")
Set Aus = fso.CreateTextFile(DateiAus, True)
T = Split(fso.OpenTextFile(DateiEin).ReadAll, vbCrLf)
For i = 0 To UBound(T)
F = Split(T(i), vbTab)
If F(0) = Host Then d.Add F(1), F(4)
Next
For i = 0 To UBound(T)
F = Split(T(i), vbTab)
If F(0) = IP Then
If d.Exists(F(1)) Then
Aus.WriteLine F(4) & ";" & d.Item(F(1))
End If
End If
Next
Aus.Close
bastla
Servus bastla!
Tja, auf "split" hätte ich auch kommen können....
Wäre bei mir trotzdem nicht so schön ausgefallen...
Respekt!
Danke für den Tipp mit Redim Preserve. Habe allerdings wenig ergoogelt, das dafür gesprochen hätte...
habe mich also für ein Workaround entschieden....
@mike
Ersetze bitte die Schleife am Ende meines codes gegen
Dann verschwinden diese überflüssigen ";"
btw: Der Code von bastla ist selbstverstänlich deutlich sexyer...
Da dieser bei mir leider nicht funktionierte (hab den fehler nicht gesucht...) und falls Du - so wie ich - auch mit quick und dirty zufrieden bist, die 2.beste-Lösung
Und: dieser Code gibt nur Sinn für Dich, wenn Deine Ausgangsdatei wirklich zuerst die Namen und dann in der selben Reihenfolge die Adressen gespeichert hat. Einen Abgleich der MAC nehme ich nicht vor...
lg
Tja, auf "split" hätte ich auch kommen können....
Wäre bei mir trotzdem nicht so schön ausgefallen...
Respekt!
Danke für den Tipp mit Redim Preserve. Habe allerdings wenig ergoogelt, das dafür gesprochen hätte...
habe mich also für ein Workaround entschieden....
@mike
Ersetze bitte die Schleife am Ende meines codes gegen
for i = 0 to ubound(liste)
zeile = liste(i,1) & ";" & liste(i,0) & vbcrlf
if len(zeile)>= 5 then objtextstream.write zeile
next
Dann verschwinden diese überflüssigen ";"
btw: Der Code von bastla ist selbstverstänlich deutlich sexyer...
Da dieser bei mir leider nicht funktionierte (hab den fehler nicht gesucht...) und falls Du - so wie ich - auch mit quick und dirty zufrieden bist, die 2.beste-Lösung
Und: dieser Code gibt nur Sinn für Dich, wenn Deine Ausgangsdatei wirklich zuerst die Namen und dann in der selben Reihenfolge die Adressen gespeichert hat. Einen Abgleich der MAC nehme ich nicht vor...
lg
Hallo Mike85!
Nur als Anmerkung: Splitten kannst Du auch anhand des Trennzeichens "TAB" - das "
Für das Testen meines Ansatzes hatte ich übrigens folgende Daten verwendet:
Abhängig von den tatsächlichen TAB-Positionen sind ggf die Felder (zB F(1) für die MAC-Adresse) anzupassen ...
Grüße
bastla
Nur als Anmerkung: Splitten kannst Du auch anhand des Trennzeichens "TAB" - das "
Replace
" ist nicht nötig ...Für das Testen meines Ansatzes hatte ich übrigens folgende Daten verwendet:
AP Name 00:07:0e:38:ae:a0 15.02.2010 14:45:00 hostname01
AP Name 00:0f:24:78:07:70 15.02.2010 14:45:00 hostname02
AP Name 00:0f:24:78:07:a0 15.02.2010 14:45:00 hostname03
AP IP 00:07:0e:38:ae:a0 15.02.2010 14:45:00 192.168.0.1
AP IP 00:0f:24:78:07:70 15.02.2010 14:45:00 192.168.0.2
AP IP 00:0f:24:78:07:a0 15.02.2010 14:45:00 192.168.0.3
Grüße
bastla
Hallo Mike85!
Wenn Du vor dem Replace keine ";" in der Zeile hattest, danach aber schon (sonst würde das Splitten nicht funktionieren), kann ja nur jeweils ein TAB ersetzt worden sein ...
Was ich eigentlich meinte: Du könntest gleich
verwenden.
Grüße
bastla
P.S.: Mit einem vernünftigen Editor (oder zur Not auch mit zB Word) kannst Du Dir ja Steuerzeichen anzeigen lassen - dann weißt Du ganz genau, ob TAB oder " ".
Wenn Du vor dem Replace keine ";" in der Zeile hattest, danach aber schon (sonst würde das Splitten nicht funktionieren), kann ja nur jeweils ein TAB ersetzt worden sein ...
Was ich eigentlich meinte: Du könntest gleich
feld = Split(strLine, vbTab)
Grüße
bastla
P.S.: Mit einem vernünftigen Editor (oder zur Not auch mit zB Word) kannst Du Dir ja Steuerzeichen anzeigen lassen - dann weißt Du ganz genau, ob TAB oder " ".
[OT] Moin bastla,
oder einer vernünftigen Editorin...
Immer schön gender-konform bleiben...
Grüße
Biber
[/OT]
oder einer vernünftigen Editorin...
Immer schön gender-konform bleiben...
Grüße
Biber
[/OT]
[OT ii]
Auch Editörin ... oder Editesse... ...Hauptsache rothaarig...
Und ihre TABs muss sie zeigen..
*~~ 50c in die Chauvikasse schnipp ~~*
Grüße
Biber
[/OT ii]
Auch Editörin ... oder Editesse... ...Hauptsache rothaarig...
Und ihre TABs muss sie zeigen..
*~~ 50c in die Chauvikasse schnipp ~~*
Grüße
Biber
[/OT ii]
Hi!
Oder Edith's Tine...aber ob die wirklich rothaarig ist, muss ich erst mal genau erschauen, sehe sie momentan eher selten.
Solange die TABs keine Leerzeichen sind ;-P bin ja schon ruhig...
mrtux
Oder Edith's Tine...aber ob die wirklich rothaarig ist, muss ich erst mal genau erschauen, sehe sie momentan eher selten.
Und ihre TABs muss sie zeigen..
Solange die TABs keine Leerzeichen sind ;-P bin ja schon ruhig...
mrtux