ritzratz
Goto Top

Wert aus Excel mit Computernamen vergleichen und in Textdatei schreiben

Hi ein neuer Anlauf.....
Danke Biber face-smile)

Hi

mit dem nachfolgenden Code lese ich den Computername aus und schreibe diesen in eine Textdatei.

'*** Computername auslesen und in  Datei schreiben.   

	set fso = createobject ("scripting.filesystemobject")  
	set ntwrk = createobject ("wscript.network")  

	set schreiben = fso.createtextfile("C:\Comp_Name.txt")  

	schreiben.writeline (ntwrk.computername)
	schreiben.close

Nachfolgende möchte ich diesen Wert aus der Textdatei Comp_Name.txt mit den Wert aus Spalte A einer Exceldatei prüfen.

3b2db4f80a3ff19572cb7f70d9b623ff

Wenn der Wert aus der Datei in Spalte A identisch ist, soll der Wert aus Spalte B in eine neue Datei "Comp_Nameneu.txt" angelegt werden.

Kann mir dabei jemand helfen ? HIntergrund ist ein Entwurf für eine Neuordnung der Computernamen.

@ Biber: Ich hoffe das ist jetzt ein wenig verständlicher. Mir geht es hauptsächlich um den Vergleich der Textdatei mit der Exceldatei.

Danke Ritzratz

Content-Key: 159185

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

Printed on: April 24, 2024 at 17:04 o'clock

Mitglied: 76109
76109 Jan 22, 2011 at 07:23:13 (UTC)
Goto Top
Member: bastla
bastla Jan 22, 2011 at 08:34:04 (UTC)
Goto Top
Hallo RitzRatz!

Da ich dem Plan mit dem Schreiben zweier Textdateien mit je einer Zeile noch nicht sonderlich viel Sinnhaftigkeit abgewinnen kann, zunächst nur ein Ansatz zum Auslesen des gesuchten Wertes:
Exceldatei = "C:\Test\test.xls"  

CompName = CreateObject ("WScript.Network").ComputerName  
Wert = CompName & " in " & Exceldatei & " nicht gefunden!"  

Set oXL = WScript.CreateObject("EXCEL.application")  
On Error Resume Next
With oXL
    .Visible = False
    .Workbooks.Open Exceldatei
    Wert = .WorksheetFunction.VLookup(CompName, .Range("Tabelle2!A1:B1000"), 2, False)  
    .ActiveWorkbook.Close False
    .Application.Quit
End With
On Error Goto 0

WScript.Echo Wert
Die Zeile 11 führt übrigens einen simplen SVERWEIS() durch ...

Grüße
bastla
Member: Ritzratz
Ritzratz Jan 22, 2011 at 15:16:30 (UTC)
Goto Top
Hallo Bastla,

Super. Funktioniert bestens. Vielen Dank für den Tipp. mit den SVerweis, Wußte leider nicht wie ich das ins vbs einbinde. Wieder was gelernt.
Ich habe das Skript noch ein wenig angepaßt und voila, alles genauso wie es sein soll.
Übrigens : Über Sinnhaftigkeit von IT-Angelegenheiten mache ich mir schon seit Jahren kein Kopp mehr. face-smile)

Schönes Wochenende noch.

Gruß
Ritzratz
Member: Ritzratz
Ritzratz Jan 23, 2011 at 21:23:56 (UTC)
Goto Top
Hallo zusammen,

ich hätte noch eine Frage zu dem Vergleich, wenn es sich nicht um eine Excel Datei handelt, sondern um eine Textdatei. da funktioniert das mit dem SVwerweis nämlich nicht.


Gruß
RItzratz
Member: bastla
bastla Jan 23, 2011 at 21:28:38 (UTC)
Goto Top
Hallo RitzRatz!

... womit wir wieder bei der beliebten Frage
Wie soll man/frau sich denn den Inhalt der Textdatei vorstellen?
wären ...

Grüße
bastla
Member: Ritzratz
Ritzratz Jan 23, 2011 at 21:43:07 (UTC)
Goto Top
Zitat von @bastla:
Hallo RitzRatz!

... womit wir wieder bei der beliebten Frage
Wie soll man/frau sich denn den Inhalt der Textdatei vorstellen?
wären ...

und die allzeit beliebteste Antwort.
Genauso wie die Exceldatei, 2 Spalten kommasepariert.

Grüße ritzratz


Grüße
bastla
Member: bastla
bastla Jan 23, 2011 at 21:45:17 (UTC)
Goto Top
Hallo RitzRatz!

Na dann:
Liste = ""C:\Test\Test.txt"  
Delim = ","  

CompName = CreateObject ("WScript.Network").ComputerName   
Wert = """" & CompName & """ in """ & Liste & """ nicht gefunden!"   

Set fso = CreateObject("Scripting.FileSystemObject")  
Inhalt = fso.OpenTextFile(Liste).ReadAll

Set rE = New RegExp
rE.Pattern = vbCrLf & CompName & Delim & "(.+)" & vbCrLf  
rE.IgnoreCase = True
On Error Resume Next
Wert = rE.Execute(vbCrLf & Inhalt & vbCrLf)(0).SubMatches(0)
On Error Goto 0

WScript.Echo Wert
Anmerkungen:
Gesucht wird (siehe "rE.Pattern" in Zeile 11) nach der Kombination Zeilenschaltung + Computername + Trennzeichen + beliebiger Text + Zeilenschaltung, wobei "beliebiger Text" aus mindestens einem Zeichen bestehen muss und das eigentlich gewünschte Ergbnis darstellt (weshalb er in Klammern gesetzt ist).

Damit auch in der ersten oder letzten Zeile der Textdatei die Bedingung "beginnt und endet mit einer Zeilenschaltung" erfüllt ist, werden diese "vbCrLf"-Kombinationen einfach beim Aufruf der Suche (in Zeile 14) dem eingelesenen (gesamten) Dateiinhalt hinzugefügt.

Als Suchergebnis kommt nur die erste Fundstelle und davon der erste "SubMatch"-Teil (= der angesprochene "beliebige Text") infrage - daher können die Indizes (jeweils 0) "hardcoded" angegeben werden.

Falls die Variable "Wert" in Zeile 5 (dient ja mehr als Demo) nicht vorbelegt wird, kann natürlich nach Zeile 15 mit zB
If Wert <> "" Then ...
der Sucherfolg abgefragt werden ...

Grüße
bastla

[Edit] Zeile 11 so geändert ("+" anstatt "*"), dass als "Wert" zumindest ein Zeichen enthalten sein muss [/Edit]