Textdatei durchsuchen und in Excel Tabelle ausgeben
Hallo,
folgendes Problem, ich habe eine große Textdatei mit vielen sinnlosen Informationen.
Wenn jetzt ein bestimmter Text vorkommt soll nur ein bestimmter teil aus der Textdatei in eine Excel Tabelle geschrieben werden. Wie realisiere ich das ?
Auszug aus der Textdatei:
Dhcp Server 10.101.10.20 Scope 10.10.0.0 set optionvalue 3 IPADDRESS "10.10.1.4"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 set optionvalue 51 DWORD "691200"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.30.124 0030050f1f5f "INV02905.blabla.de" "" "BOTH"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.7 000400ec2ba7 "LXK37D4E5.blabla.de" "lxk37d4e5" "DHCP"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.9 00062999846c "INV01693.blabla.de" "inv01693" "DHCP"
Dhcp Server 10.101.10.20 add scope 10.50.0.0 255.255.0.0 "TE VLan => Dyn.: .33.128 - .36.254 / Res.: .38.128 - .39.254" "bla bla"
Dhcp Server 10.101.10.20 Scope 10.50.0.0 set state 1
.
.
.
usw...
Wenn jetzt der Text
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip
in einer zeile vorkommt soll nur die Ip Adresse dahinter und die inventarnummer "in...." in eine Excel Tabelle geschrieben werden.
Zu beachten:
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.9 00062999846c "INV01693.blabla.de" "inv01693" "DHCP"
ist EINE Zeile in dem Textdokument.
Über Hilfe würde ich mich freuen.
Gruß
Sven
folgendes Problem, ich habe eine große Textdatei mit vielen sinnlosen Informationen.
Wenn jetzt ein bestimmter Text vorkommt soll nur ein bestimmter teil aus der Textdatei in eine Excel Tabelle geschrieben werden. Wie realisiere ich das ?
Auszug aus der Textdatei:
Dhcp Server 10.101.10.20 Scope 10.10.0.0 set optionvalue 3 IPADDRESS "10.10.1.4"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 set optionvalue 51 DWORD "691200"
- ======================================================================
- End Add OptionValues to the Scope : 10.10.0.0, Server : 10.101.10.20
- ======================================================================
- ======================================================================
- Start Add ReservedIp to the Scope : 10.10.0.0, Server : 10.101.10.20
- ======================================================================
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.30.124 0030050f1f5f "INV02905.blabla.de" "" "BOTH"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.7 000400ec2ba7 "LXK37D4E5.blabla.de" "lxk37d4e5" "DHCP"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.9 00062999846c "INV01693.blabla.de" "inv01693" "DHCP"
- ======================================================================
- End Add ReservedIp to the Scope : 10.10.0.0, Server : 10.101.10.20
- ======================================================================
Dhcp Server 10.101.10.20 add scope 10.50.0.0 255.255.0.0 "TE VLan => Dyn.: .33.128 - .36.254 / Res.: .38.128 - .39.254" "bla bla"
Dhcp Server 10.101.10.20 Scope 10.50.0.0 set state 1
.
.
.
usw...
Wenn jetzt der Text
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip
in einer zeile vorkommt soll nur die Ip Adresse dahinter und die inventarnummer "in...." in eine Excel Tabelle geschrieben werden.
Zu beachten:
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.9 00062999846c "INV01693.blabla.de" "inv01693" "DHCP"
ist EINE Zeile in dem Textdokument.
Über Hilfe würde ich mich freuen.
Gruß
Sven
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 54610
Url: https://administrator.de/contentid/54610
Ausgedruckt am: 26.11.2024 um 17:11 Uhr
13 Kommentare
Neuester Kommentar
das ganze geht entweder durch die Importfunktion von Excel und dann halt über Filter oder ein Makro
oder
man lässt ein Excel-Makro erstmal die entsprechenden Zeilen auslesen und in Excel eintragen und extrahiert dann die entsprechenden Daten in Spalten
ich guck mal, ob ich was einfaches basteln kann...
*nachtrag*
ich hab was gebastelt und getestet und bei mir funktioniert es mit Excel 2003:
das Ergebnis in der aktivierten Tabelle sieht dann so aus (Spalte A und B):
IP-Adresse INV-Nr.
10.10.30.124 INV02905.blabla.de
10.10.37.7 LXK37D4E5.blabla.de
10.10.37.9 INV01693.blabla.de
Erklärung/Erläuterung:
die Exceldatei mit dem Makro muss im gleichen Ordner wie die Logdatei sein
den Namen Deiner Logdatei trägst du oben im Makro bei EingDatei am Ende ein
also statt dem "DHCP.log" halt Deinen Dateinamen
ansonsten musst Du eigentlich nix ändern ;)
oder
man lässt ein Excel-Makro erstmal die entsprechenden Zeilen auslesen und in Excel eintragen und extrahiert dann die entsprechenden Daten in Spalten
ich guck mal, ob ich was einfaches basteln kann...
*nachtrag*
ich hab was gebastelt und getestet und bei mir funktioniert es mit Excel 2003:
Option Explicit
Dim WSHShell, FSO, FileIn, FileOut
Dim Pfad, EingDatei, AusgDatei, ZKette, Zeile, Antwort, i
Const DeleteReadOnly = True
Sub DHCP_einlesen()
Set FSO = CreateObject("Scripting.FileSystemObject")
Pfad = ActiveWorkbook.Path
EingDatei = Pfad & "\DHCP.log"
AusgDatei = Pfad & "\DHCP_neu.log"
ZKette = "Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip"
If Not FSO.FileExists(EingDatei) Then
WSHShell.Popup (EingDatei & " wurde nicht gefunden."), 3, "*** Problem ***", 64
End
End If
If FSO.FileExists(AusgDatei) Then
Antwort = MsgBox(AusgDatei & " existiert bereits - soll sie gelöscht werden?", 4 + 32 + 256, "*** Problem ***")
If Antwort = vbYes Then FSO.DeleteFile (AusgDatei), True
End If
If Not FSO.FileExists(EingDatei) Then
WSHShell.Popup (EingDatei & " wurde nicht gefunden."), 3, "*** Problem ***", 64
End
End If
Set FileIn = FSO.OpenTextFile(EingDatei, 1)
Set FileOut = FSO.OpenTextFile(AusgDatei, 8, True)
i = 0
Do While Not (FileIn.atEndOfStream)
i = i + 1
Zeile = FileIn.Readline
If InStrRev(UCase(Zeile), UCase(ZKette)) > 0 Then FileOut.WriteLine (Zeile)
Loop
FileIn.Close
Set FileIn = Nothing
FileOut.Close
Set FileOut = Nothing
Cells.Select
Selection.ClearContents
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:="Text;DHCP_neu.log", Destination:=Range("A1"))
.Name = "DHCP_neu"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 9, 1, 9, 2, 9, 9)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Select
ActiveCell.FormulaR1C1 = "IP-Adresse"
Range("B1").Select
ActiveCell.FormulaR1C1 = "INV-Nr."
Range("A1").Select
End Sub
das Ergebnis in der aktivierten Tabelle sieht dann so aus (Spalte A und B):
IP-Adresse INV-Nr.
10.10.30.124 INV02905.blabla.de
10.10.37.7 LXK37D4E5.blabla.de
10.10.37.9 INV01693.blabla.de
Erklärung/Erläuterung:
die Exceldatei mit dem Makro muss im gleichen Ordner wie die Logdatei sein
den Namen Deiner Logdatei trägst du oben im Makro bei EingDatei am Ende ein
also statt dem "DHCP.log" halt Deinen Dateinamen
ansonsten musst Du eigentlich nix ändern ;)
erstell eine neue Excel-Datei, geh dann auf Extras - Makros - Visual Basic Editor
öffne dort auf der linken Seite "Diese Arbeitsmappe" per Doppelklick
kopiere dort meinen Makro-Code hinein und speichere danach die Excel-Datei
im gleichen Ordner, wo auch Dein Log-File liegt
nun hast Du 2 Möglichkeiten:
entweder Du benennst Deine Log-Datei um in "DHCP.log" oder aber Du änderst im Makro in der 8. Zeile am Ende das "DHCP.log" gegen Deinen Log-Dateinamen um
wenn Du nun die Auswertung machen willst, dann öffnest Du einfach die abgespeicherte Excel-Datei, gehst auf Extras - Makro - Makros und führst dann das Makro "DHCP_einlesen" aus
dann sollte das Makro laufen und die Auswertung machen
öffne dort auf der linken Seite "Diese Arbeitsmappe" per Doppelklick
kopiere dort meinen Makro-Code hinein und speichere danach die Excel-Datei
im gleichen Ordner, wo auch Dein Log-File liegt
nun hast Du 2 Möglichkeiten:
entweder Du benennst Deine Log-Datei um in "DHCP.log" oder aber Du änderst im Makro in der 8. Zeile am Ende das "DHCP.log" gegen Deinen Log-Dateinamen um
wenn Du nun die Auswertung machen willst, dann öffnest Du einfach die abgespeicherte Excel-Datei, gehst auf Extras - Makro - Makros und führst dann das Makro "DHCP_einlesen" aus
dann sollte das Makro laufen und die Auswertung machen
ich vermute mal, das das Importieren der DHCP_neu.log nach Excel rein fehlschlägt (Laufzeitfehler 1004), da die Datei ja zumindest mit den Daten gefüllt wird
welche Excel-Version benutzt Du denn? ich vermute mal Excel 2000 (rauskriegen in Excel -> eifach das Fragezeichen oben rechts im Menü klicken und dann auf Info gehen)
das Problem ist nämlich, das Makros von Excel 2003 gerade noch unter Excel XP, aber größtenteils eben nicht mehr unter Excel 2000 laufen
zu Hause könnte ich das dann anpassen, da ich dort noch Excel 2000 habe, aber eben nicht hier auf dem Firmen-PC
wenn möglich: könntest Du mir das Logfile mal per Mail oder auf anderem Wege zukommen lassen?
wenn ja, dann schick mir eine Nachricht übers Forum (einfach meinen Nick über dem Post anklicken)
welche Excel-Version benutzt Du denn? ich vermute mal Excel 2000 (rauskriegen in Excel -> eifach das Fragezeichen oben rechts im Menü klicken und dann auf Info gehen)
das Problem ist nämlich, das Makros von Excel 2003 gerade noch unter Excel XP, aber größtenteils eben nicht mehr unter Excel 2000 laufen
zu Hause könnte ich das dann anpassen, da ich dort noch Excel 2000 habe, aber eben nicht hier auf dem Firmen-PC
wenn möglich: könntest Du mir das Logfile mal per Mail oder auf anderem Wege zukommen lassen?
wenn ja, dann schick mir eine Nachricht übers Forum (einfach meinen Nick über dem Post anklicken)
Moin sven1986,
ich würde einen CMD-Prompt aufmachen und folgende paar Buchstaben eingeben:
Reicht doch, oder?
Gruss
Biber
[Edit] Okay, eine Kopfzeile mit "IP-Adresse";"Inv.-Nr:" könnte ich auch noch in diesem Oneliner erzeugen ..
ich würde einen CMD-Prompt aufmachen und folgende paar Buchstaben eingeben:
(=18:45:24 D:\temp=)
> for /f "eol=# tokens=8,10" %i in ('findstr "Add reservedip" x:\pfad\DHCP.log') do @echo %i;%j
## Ergebnis (mit den oben geposteten Beispieldaten als DHCP.log):
<b>10.10.30.124;"INV02905.blabla.de"
10.10.37.7;"LXK37D4E5.blabla.de"
10.10.37.9;"INV01693.blabla.de"</b>
## Das ganze als Excel-Datei im *.csv-Format speichern:
> for /f "eol=# tokens=8,10" %i in ('findstr "Add reservedip" x:\pfad\DHCP.log') do @echo %i;%j >Dhcplog.csv
Gruss
Biber
[Edit] Okay, eine Kopfzeile mit "IP-Adresse";"Inv.-Nr:" könnte ich auch noch in diesem Oneliner erzeugen ..
(@echo "IP-Adresse";"Inv.-Nr:" & for /f "eol=# tokens=8,10" %i in ('findstr "Add reservedip" x:\pfad\DHCP.log') do @echo %i;%j )>Dhcplog.csv
ich hab das Makro nun unter Excel 2000 erstellt, so das es auch unter XP und 2003 ohne Probs läuft:
erstell ein Ordner C:\DHCP und kopier das Logfile und die Excel-Datei da rein
starten, auswerten, glücklich sein ;)
Option Explicit
Dim WSHShell, FSO, FileIn, FileOut
Dim Pfad, EingDatei, AusgDatei, ZKette, Zeile, Antwort, i
Const DeleteReadOnly = True
Sub DHCP_einlesen()
Set FSO = CreateObject("Scripting.FileSystemObject")
Pfad = ActiveWorkbook.Path
If Pfad <> "C:\DHCP" Then
Antwort = MsgBox("Die Dateien liegen nicht im richtigen Ordner." & Chr(13) & "Bitte von C:\DHCP\ aus noch einmal probieren!", vbOKOnly, "Falscher Ordner !")
End
End If
EingDatei = Pfad & "\DHCP.log"
AusgDatei = Pfad & "\DHCP_neu.log"
ZKette = "Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip"
If Not FSO.FileExists(EingDatei) Then
WSHShell.Popup (EingDatei & " wurde nicht gefunden."), 3, "*** Problem ***", 64
End
End If
If FSO.FileExists(AusgDatei) Then
Antwort = MsgBox(AusgDatei & " existiert bereits - soll sie gelöscht werden?", 4 + 32 + 256, "*** Problem ***")
If Antwort = vbYes Then FSO.DeleteFile (AusgDatei), True
End If
If Not FSO.FileExists(EingDatei) Then
WSHShell.Popup (EingDatei & " wurde nicht gefunden."), 3, "*** Problem ***", 64
End
End If
Set FileIn = FSO.OpenTextFile(EingDatei, 1)
Set FileOut = FSO.OpenTextFile(AusgDatei, 8, True)
i = 0
Do While Not (FileIn.atEndOfStream)
i = i + 1
Zeile = FileIn.Readline
If InStrRev(UCase(Zeile), UCase(ZKette)) > 0 Then FileOut.WriteLine (Zeile)
Loop
FileIn.Close
Set FileIn = Nothing
FileOut.Close
Set FileOut = Nothing
Cells.Select
Selection.ClearContents
Range("A1").Select
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\DHCP\DHCP_neu.log", _
Destination:=Range("A1"))
.Name = "DHCP_neu"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = True
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = True
.TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 9, 1, 9, 1, 9, 9)
.Refresh BackgroundQuery:=False
End With
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Select
ActiveCell.FormulaR1C1 = "IP-Adresse"
Range("B1").Select
ActiveCell.FormulaR1C1 = "INV-Nr."
Range("A1").Select
End Sub
erstell ein Ordner C:\DHCP und kopier das Logfile und die Excel-Datei da rein
starten, auswerten, glücklich sein ;)
Moin sven1986,
deinen Fehler kann ich nicht reproduzieren.
Aber Du hast ja auch Iwans Lösung.
Gruss Biber
deinen Fehler kann ich nicht reproduzieren.
(= 9:37:23 D:\temp=)
>(@echo "IP-Adresse";"Inv.-Nr:" & for /f "eol=# tokens=8,10" %i in ('findstr "Add reservedip" f:\temp\DHCP.log') do @echo %i;%j )
"IP-Adresse";"Inv.-Nr:"
10.10.30.124;"INV02905.blabla.de"
10.10.37.7;"LXK37D4E5.blabla.de"
10.10.37.9;"INV01693.blabla.de"
Aber Du hast ja auch Iwans Lösung.
Gruss Biber