gdnmarc
Goto Top

VBS - Hinzufügen einer Zeile

Hallo,

ich habe die Anforderung eine neue Zeile (bsp. 155.1.1.2 test.com) in die Hosts-Datei (an das Ende) hinzuzufügen.

Dabei soll vorher überpürft werden, ob die Zeile mit diesem Wert schon vorhanden ist, wenn ja, soll nichts gemacht werdn, wenn nein den wert an das Ende der Datei hinzufügen.

1000DANK!!!!

Content-Key: 101596

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

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

Member: bastla
bastla Nov 12, 2008 at 10:40:41 (UTC)
Goto Top
Hallo gdnmarc!

Etwa so:
Datei = "D:\Datei.txt"  
Zeile = "155.1.1.2 test.com"  
Set fso = CreateObject("Scripting.FileSystemObject")  
Inhalt = fso.OpenTextFile(Datei).ReadAll
If InStr(1, Inhalt, Zeile, vbTextCompare) = 0 Then
	fso.OpenTextFile(Datei, 8).WriteLine Zeile
End If
Einschränkung: Es wird nicht exakt nach einer Zeile, sondern nur nach dem Vorhandensein der Zeile als Teilstring des gesamten in der Datei enthaltenen Textes gesucht - allerdings sollte die Kombination aus IP-Adresse und Hostnamen wohl kaum in einer anderen Zeile enthalten sein.

Wenn Du tatsächlich (genau) zeilenweise vergleichen willst, dann in ein Array einlesen und Zeile für Zeile durchgehen.

Grüße
bastla
Member: dog
dog Nov 12, 2008 at 10:43:06 (UTC)
Goto Top
Ein paar Stichworte:

Scripting.FileSystemObject -> OpenTextFile,Readline
Left()
Split()
Scripting.Dictionary
Trim()
Member: gdnmarc
gdnmarc Nov 14, 2008 at 13:41:27 (UTC)
Goto Top
Vielen Dank schonmal.

Ich glaube es ist besser jede Zeile einzeln zu durchsuchen, da evt. ein Hosteintrag auch mit einem # auskommentiert sein könnte. D.h. ich möchte überprüfen, ob die IP-Adresse in einer Zeile vorhanden ist, aber das erste Zeichen kein # ist.

Viele Grüße an Euch!!
Member: bastla
bastla Nov 14, 2008 at 16:55:09 (UTC)
Goto Top
Hallo gdnmarc!

Dann eben auf die harte Tour face-wink ...
Datei = "D:\Datei.txt"  
ZeileNeu = "155.1.1.2 test.com"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Zeilen = Split(fso.OpenTextFile(Datei).ReadAll, vbCrLf) 'gesamte Datei in Array Zeilen einlesen  

Append = True 'Schalter für "Zeile hinzufügen" setzen  
For i = 0 To UBound(Zeilen) 'alle eingelesenen Zeilen durchgehen  
    If StrComp(Trim(Zeilen(i)), ZeileNeu, vbTextCompare) = 0 Then 'Gibt es die neue Zeile schon (ev Leerzeichen an Anfang und/oder Ende der Zeile werden ignoriert)?   
        Append = False 'Wenn ja, dann keine Zeile hinzufügen ...  
        Exit For '... und die weiteren Zeilen nicht mehr überprüfen.  
    End If

    If InStr(1, Zeilen(i), ZeileNeu, vbTextCompare) > 0 Then 'Ist die neue Zeile in der aktuell überprüften Zeile enthalten ...  
        If Left(Zeilen(i), 1) = "#" Then '... und beginnt diese Zeile mit "#", ...  
            Zeilen(i) = Mid(Zeilen(i), 2) '... dann "#" entfernen und ...  
            Write = True '... vormerken, dass die Datei neu geschrieben werden muss.  
            Append = False 'Die neue Zeile muss nicht hinzugefügt werden.  
            Exit For 'Auch hier kann das Prüfen der restlichen Zeilen entfallen.  
        End If
    End If
Next
If Append Then 'Wenn die neue Zeile hinzugefügt werden muss, ...  
    fso.OpenTextFile(Datei, 8).WriteLine ZeileNeu '... machen wir das, ...  
ElseIf Write Then '... ansonsten noch prüfen, ob neu geschrieben werden muss (da "#" entfernt) ...  
    fso.CreateTextFile(Datei, True).Write Join(Zeilen, vbCrLf) '... und dieses ausführen.  
End If
Grüße
bastla