sven1986
Goto Top

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 ? face-smile

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"

        1. ======================================================================
        2. End Add OptionValues to the Scope : 10.10.0.0, Server : 10.101.10.20
        3. ======================================================================


        1. ======================================================================
        2. Start Add ReservedIp to the Scope : 10.10.0.0, Server : 10.101.10.20
        3. ======================================================================


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"


        1. ======================================================================
        2. End Add ReservedIp to the Scope : 10.10.0.0, Server : 10.101.10.20
        3. ======================================================================


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

Content-Key: 54610

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

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: Iwan
Iwan 21.03.2007 um 11:11:11 Uhr
Goto Top
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:
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 ;)
Mitglied: sven1986
sven1986 21.03.2007 um 11:43:13 Uhr
Goto Top
Moin,


schonmal vielen Dank für deine Mühe.
---
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 ;)
--

Kenne mich mit Excel Makros usw auch noch nicht so aus. Was muss ich da genau machen??
Mitglied: Iwan
Iwan 21.03.2007 um 12:15:58 Uhr
Goto Top
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
Mitglied: sven1986
sven1986 21.03.2007 um 12:45:01 Uhr
Goto Top
Moin,

nochmals danke face-smile
nur jetzt habe ich das Problem, wenn ich den Makro ausführe, das der Fehler 400 kommt.
Wenn ich dann in die Log Datei schaue werden nur ca 10 Werte eingelesen. Wiederspricht einem block.

Woran könnte das liegen??
Mitglied: sven1986
sven1986 21.03.2007 um 13:23:13 Uhr
Goto Top
Habe es mittlerweile so hinbekommen das alle Werte gelesen werden, habe die Zeicheknette auf Add reservedip 1 geändert.

Nur jetzt kommt am Ende kommt:

Laufzeitfehler '1004':

Anwendungs- oder objektfehler.

Daten sind in er dhcp_leu.log wie folgt vorhanden:

Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.30.124 00300501f5f "INV02905.blabla.de" "" "BOTH"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.30.8 0030537d0b3 "in003329.blabla.de" "Verdeckprfbock E84" "DHCP"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.32.25 00055b26702 "INV00792.blabla.de" "" "BOTH"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.33.169 00200f3b052 "lxkf3b052" "lxkf3b052 (Conlas06)" "BOTH"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.10 000400ed7ce "LXK37EB73" "LXK37EB73" "BOOTP"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.7 000400e2ba7 "LXK37D4E5.blabla.de" "lxk37d4e5" "DHCP"
Dhcp Server 10.101.10.20 Scope 10.10.0.0 Add reservedip 10.10.37.9 0002999846c "INV01693.blabla.de" "inv01693" "DHCP"
Dhcp Server 10.101.10.20 Scope 10.50.0.0 Add reservedip 10.50.30.16 0030053dd13 "in100495.blabla.de" "IN100495; Herr Zckmantel" "DHCP"
Dhcp Server 10.101.10.20 Scope 10.50.0.0 Add reservedip 10.50.30.167 000054932cc "in100849.blabla.de" "in100849" "DHCP"
.
.
.
Insgesamt ca 800 Einträge.

Die Daten werden nicht in die Excel Tabelle geschrieben.

Kann das evtl daran liegen das die Adresse nach Scope und reservedip teils Stellen dazubekommt?

mfg

sven
Mitglied: Iwan
Iwan 21.03.2007 um 13:44:46 Uhr
Goto Top
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)
Mitglied: sven1986
sven1986 21.03.2007 um 18:29:27 Uhr
Goto Top
Moin,

Office XP. Bin wieder zu Hause habe die Daten nicht hier.
Wie könnte man die Daten den in eine einfache TXT Datei schreiben, das da nur die Inv Nr und die IP steht ?
Würde zur Not auch gehen

mfg
Mitglied: Biber
Biber 21.03.2007 um 18:49:59 Uhr
Goto Top
Moin sven1986,

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  
Reicht doch, oder?

Gruss
Biber
[Edit] Okay, eine Kopfzeile mit "IP-Adresse";"Inv.-Nr:" könnte ich auch noch in diesem Oneliner erzeugen ..face-wink
(@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  
Mitglied: Iwan
Iwan 21.03.2007 um 18:56:02 Uhr
Goto Top
ich hab das Makro nun unter Excel 2000 erstellt, so das es auch unter XP und 2003 ohne Probs läuft:
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 ;)
Mitglied: sven1986
sven1986 22.03.2007 um 07:36:54 Uhr
Goto Top
Moin,

danke das klappt doch super face-smile
Vielen Dank für deine Arbeit.

Welche einträge müssten den geändert werden wenn ich zusätzlich zb die Mac Adresse in der tabelle noch haben möchte?


mfg
Mitglied: sven1986
sven1986 22.03.2007 um 07:55:47 Uhr
Goto Top
Hi Biba,

bei deinem Script kommt folgendes:

c:\DHCP\dhcp.log ist syntaktisch an dieser Stelle nicht verarbeitbar.

Gruß

sven
Mitglied: Iwan
Iwan 22.03.2007 um 08:56:18 Uhr
Goto Top
schön, das es funktioniert face-smile

die 11. Zeile von unten ist dafür verantwortlich, was importiert wird

IP und Inv-Nr.:
.TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 9, 1, 9, 1, 9, 9)

IP, Mac und Inv-Nr.:
.TextFileColumnDataTypes = Array(9, 9, 9, 9, 9, 9, 9, 1, 1, 1, 9, 9)
Mitglied: Biber
Biber 22.03.2007 um 09:40:00 Uhr
Goto Top
Moin sven1986,

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