Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Daten mit bestimmten Kriterien aus Textdatei in Excel einlesen

Frage Entwicklung VB for Applications

Mitglied: flexxis

flexxis (Level 1) - Jetzt verbinden

05.12.2007, aktualisiert 13.12.2007, 14581 Aufrufe, 6 Kommentare

Hallo Community,

folgendes Ausgangsproblem stellt sich für mich als völligen Skript- Laien :

in einer DHCP Log- Datei befinden sich u.a. die MAC- Adresse, Hostname und Seriennummer von NAS- Platten, die ich gerne auslesen möchte.

bc4b5ac8e20d7e6ed21b48573966730e-bild1 - Klicke auf das Bild, um es zu vergrößern

Es interessieren nur die "Abschnitte" der Log- Datei, in denen Der Hostname mit "nas01" endet, also in denen es um die NAS- Platten geht (siehe Bild).
Es müssen nicht für jede NAS alle Angaben vorhanden sein.

Mein erster Schritt ist gewesen, ein VBA- Macro im Visual Basic Skript Editor von Excel zu schreiben, welches einfach alle Zeilen untereinander in eine Text-Datei schreibt, in denen die benötigten Daten stehen.

1. Frage:
Danach habe ich versucht, das ganze in Excel in der ersten Arbeitsmappe auch untereinander auszugeben (siehe Skript).
Wo steckt da der Fehler drin?



Sub nas01()

Const szSuch = "nas01" ' Such nas01
Const szSuch2 = "NAS01" 'Such NAS01
Const szSuch3 = "Comment = S/N" ' Such Comment S/N
Const szSuch4 = "MAC Address" ' Such MAC

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSourceFile = objFSO.openTextFile("Pfad\zur\Datei\DHCP3TAB", 1) ' Quelldatei öffnen
Set objDestFile = Workbooks.Open("Pfad\zur\Datei\Mappe1.xls").Worksheets("Tabelle1") 'ZielDatei/-Tabelle


Do Until objSourceFile.AtEndOfStream ' Gesammtes TextDok durchgehen
szNextLine = objSourceFile.Readline ' Zeile aus Quelldatei einlesen
If InStr(szNextLine, szSuch) Then ' Wenn Suchtest vorhanden
objDestFile.writeline szNextLine ' Zeile in Zieldatei schreiben
End If
If InStr(szNextLine, szSuch2) Then ' Wenn Suchtest vorhanden
objDestFile.writeline szNextLine ' Zeile in Zieldatei schreiben
End If
If InStr(szNextLine, szSuch3) Then ' Wenn Suchtest vorhanden
objDestFile.writeline szNextLine ' Zeile in Zieldatei schreiben
End If
If InStr(szNextLine, szSuch4) Then ' Wenn Suchtest vorhanden
objDestFile.writeline szNextLine ' Zeile in Zieldatei schreiben
End If
Loop

End Sub

// EDIT: 2. Frage ist schon erledigt. Geht ja auch mit Bordmitteln, manchmal sieht man den Wald vor Bäumen nicht :P -> Suchen/Ersetzen
2. Frage:
Ich würde Ergebniszeilen wie "Hostname = xxxx" "MAC = xx.xx" "SN= xx" bekommen.
Wie ich kann die Bezeichnungen Hostname, MAC, SN im Anschluss entfernen? Diese Bezeichnungen werden ja spätestens sinnlos, wenn sie in Excel in Spalten stehen.




Vielen Dank!
Mitglied: wakko
05.12.2007 um 12:16 Uhr
Moin,

wenn ich das richtig sehe, schreibst du in eine xls-Datei wie in eine Textdatei.
Das geht so nicht.
Probier mal, vorweg ein
01.
Dim objDestFile as Excel.Workbook 
02.
 
Danach kannst du in die Zellen der Excel-datei mit
01.
objDestFile.Sheets(1).Cells(iSpalte, 1).value = szNextLine
Hoffe, der Ansatz hilft dir weiter.
Gruß,
Henrik
Bitte warten ..
Mitglied: flexxis
05.12.2007 um 12:54 Uhr
könntest du den vollständigen Code mal posten?
Ich hatte den Skript - Schnipsel von woanders her geklaut, weiß was es zu bedeuten hat, kann allerdings überhaupt nicht mit VBA programmieren.

Wäre sehr dankbar!

Also ich habe die Lösung inzwischen auch über den Umweg der Text- Datei hinbekommen, aber ich würde es einfach sehr gerne wissen! Ich habe schon nach Lösungen gegooglet, werde dadurch aber nicht schlauer.
Bitte warten ..
Mitglied: wakko
05.12.2007 um 16:07 Uhr
Naja, habe keine Testdatei, daher unngetestet und nur so neben der Arbeit
01.
Sub nas01() 
02.
Dim ws As Excel.Worksheet, iRow%, strTemp$, datnr% 
03.
Const szSuch = "nas01" ' Such nas01 
04.
Const szSuch2 = "NAS01" 'Such NAS01 
05.
Const szSuch3 = "Comment = S/N" ' Such Comment S/N 
06.
Const szSuch4 = "MAC Address" ' Such MAC 
07.
datnr = FreeFile 
08.
Open "Pfad\zur\Datei\DHCP3TAB" For Input As #datnr 'Textdokument zum Lesen öffnen 
09.
Set ws = ActiveWorkbook.Sheets(1) 
10.
i = 1 
11.
Do Until EOF(datnr) 'Abbruch bei Ende des Dokuments 
12.
    Line Input #datnr, strTemp 'Zeile in strTemp einlesen 
13.
    If InStr(strTemp, szSuch) > 0 _ 
14.
        Or InStr(strTemp, szSuch2) > 0 _ 
15.
        Or InStr(strTemp, szSuch3) > 0 _ 
16.
    Then 'Vergleich mit Suchstring 
17.
        ws.Cells(i, 1).Value = szNextLine 'Wert in Zelle schreiben 
18.
        i = i + 1 'Zähler für nächste Zeile erhöhen 
19.
    End If 
20.
Loop 
21.
Close #datnr 
22.
End Sub
Mit freundlichen Grüßen
Bitte warten ..
Mitglied: flexxis
10.12.2007 um 09:27 Uhr
Nachtrag meinerseits:
Das funktionierte noch nicht ganz. Hab es etwas verändert. Das unten stehende Skript tat seine Arbeit gut.
Beim Import nach Excel fiel mir auf, dass Leerstellen in der Textdatei (also wenn der Text in der Zeile etwas eingerückt ist) in Excel durch ein Sonderzeichen dargestellt werden. Gibt es da eine Möglichkeit, dem korrekt nachzuhelfen?


Sub test()

Dim ws As Excel.Worksheet

Const szSuch = "nas01" ' Such nas01
Const szSuch2 = "NAS01" 'Such NAS01
Const szSuch3 = "Comment = S/N" ' Such Comment S/N
Const szSuch4 = "MAC Address" ' Such MAC

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objSourceFile = objFSO.OpenTextFile("Pfad\zur\Datei\DHCP3TAB", 1) ' Quelldatei öffnen
Set ws = ActiveWorkbook.Sheets(1) ' Zieldatei anlegen / überschreiben

i = 1
Do Until objSourceFile.AtEndOfStream ' Gesammtes TextDok durchgehen
szNextLine = objSourceFile.Readline ' Zeile aus Quelldatei einlesen


If InStr(szNextLine, szSuch) Then

ws.Cells(i, 1).Value = szNextLine 'Wert in Zelle schreiben
i = i + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben


ElseIf InStr(szNextLine, szSuch2) Then

ws.Cells(i, 1).Value = szNextLine 'Wert in Zelle schreiben
i = i + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben

ElseIf InStr(szNextLine, szSuch3) Then

ws.Cells(i, 1).Value = szNextLine 'Wert in Zelle schreiben
i = i + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben

ElseIf InStr(szNextLine, szSuch4) Then

ws.Cells(i, 1).Value = szNextLine 'Wert in Zelle schreiben
i = i + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben

End If

Loop

End Sub
Bitte warten ..
Mitglied: wakko
12.12.2007 um 10:35 Uhr
Hi,

da kannst du die replace-Funktion nutzen,
also:
01.
 szNextLine = replace (szNextLine, chr(9), "")
chr(9) entspricht dem Tabulator, wenn das nicht läuft geht das evt. mit copy'n'paste des Zeichens aus Excel in deinen Quellcode. Wenn es nur Leerzeichen sind, kannst du auch die LTRIM-Funktion nutzen.

Gruß,
Henrik
Bitte warten ..
Mitglied: flexxis
13.12.2007 um 10:10 Uhr
Mit Replace hat es wunderbar geklappt. Danke!
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Microsoft Office
Aus Outlook 2013 Daten aus Tabellenfeldern in Excel übertragen (7)

Frage von ich2110 zum Thema Microsoft Office ...

Microsoft Office
gelöst CSV-Datei mit einem VBA Makro in Excel einlesen und leicht anpassen (5)

Frage von JoSiBa zum Thema Microsoft Office ...

VB for Applications
Bestimmte Daten aus eine CSV-Datei in eine Excel-Tabelle importieren (2)

Frage von MariaElena zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...