Vergleichen eines längeren Strings mit einem Kürzeren
Hallo zusammen,
für mein Vorhaben benötige ich ein VBS, welches einen längeren String mit einem Kürzeren vergleicht.
Gegeben ist ein Active Directory und ein dazugehöriges Distributed File System.
Vom AD bekomm ich folgende Daten nach einer Abfrage in eine Textdatei:
user1
user2
user3
user5
Aus dem DFS bekomm ich folgende Daten:
\\sub.pfad\abteilung\user1
\\sub.pfad\abteilung\user2
\\sub.pfad\abteilung\user4
\\sub.pfad\abteilung\user5
Mein bisheriger Code:
Oben stehenden Code hab ich 2 mal in einer vbs Datei.
Beim einen werden die Pfade mit den Usern abgeglichen.
Da erhalte ich wenn ein User kein Share hat den User als Ergebnis in einer txt Datei. (Wird für die weitere Verarbeitung verwendet.)
Beim umgedrehten Fall hab ich das Problem, dass die User mit den Pfaden verglichen werden.
Das geht ja so ohne weiteres leider nicht.
Ich bekomme als Ergebnis immer alle Übereinstimmungen ausgegeben.
Dabei brauche ich aber die Pfade, die keine User zugeordnet haben. (In dem Fall als Ergebnis \\sub.pfad\abteilung\user4)
Habt Ihr eine Idee, wie man das umsetzen kann?
Beste Grüße
Oliver
für mein Vorhaben benötige ich ein VBS, welches einen längeren String mit einem Kürzeren vergleicht.
Gegeben ist ein Active Directory und ein dazugehöriges Distributed File System.
Vom AD bekomm ich folgende Daten nach einer Abfrage in eine Textdatei:
user1
user2
user3
user5
Aus dem DFS bekomm ich folgende Daten:
\\sub.pfad\abteilung\user1
\\sub.pfad\abteilung\user2
\\sub.pfad\abteilung\user4
\\sub.pfad\abteilung\user5
Mein bisheriger Code:
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile1 = objFSO.OpenTextFile("ad.txt", 1)
If objFSO.getfile("ad.txt").size > 0 Then
strComp = lcase(objFile1.ReadAll)
End If
objFile1.Close
Set objFile2 = objFSO.OpenTextFile("share.txt", 1)
Do Until objFile2.AtEndOfStream
strComp2 = lcase(objFile2.ReadLine)
If InStr(strComp,strComp2) = 0 Then
strResult = strResult & strComp2 & vbCrLf
End If
Loop
objFile2.Close
Oben stehenden Code hab ich 2 mal in einer vbs Datei.
Beim einen werden die Pfade mit den Usern abgeglichen.
Da erhalte ich wenn ein User kein Share hat den User als Ergebnis in einer txt Datei. (Wird für die weitere Verarbeitung verwendet.)
Beim umgedrehten Fall hab ich das Problem, dass die User mit den Pfaden verglichen werden.
Das geht ja so ohne weiteres leider nicht.
Ich bekomme als Ergebnis immer alle Übereinstimmungen ausgegeben.
Dabei brauche ich aber die Pfade, die keine User zugeordnet haben. (In dem Fall als Ergebnis \\sub.pfad\abteilung\user4)
Habt Ihr eine Idee, wie man das umsetzen kann?
Beste Grüße
Oliver
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 110960
Url: https://administrator.de/forum/vergleichen-eines-laengeren-strings-mit-einem-kuerzeren-110960.html
Ausgedruckt am: 19.04.2025 um 10:04 Uhr
4 Kommentare
Neuester Kommentar
Hallo milo86 und willkommen im Forum!
Wenn Du für jeden "share"-String nur den Teil nach dem letzten "\" vergleichen willst, kannst Du diesen Teil zB so erhalten:
Um einen gesicherten Vergleich mit den einzelnen Zeilen von strComp zu erhalten, würde ich an den Anfang und das Ende von strComp noch ein vbCrLf setzen (damit ist jede Zeile mit Usernamen von Zeilenschaltungen umgeben) und dann als Suchbegriff
verwenden - so kannst Du verhindern, dass ein User "huber" gefunden wird, obwohl es nur einen "mayerhuber" gibt.
Grüße
bastla
Wenn Du für jeden "share"-String nur den Teil nach dem letzten "\" vergleichen willst, kannst Du diesen Teil zB so erhalten:
If InStr(strComp2, "\") > 0 Then strComp2 = Mid(strComp2, InStrRev(strComp2, "\") + 1)
vbCrLF & strComp2 & vbCrLf
Grüße
bastla
Hallo milo86!
Abteilung auslesen: Wenn es um den (unter Berücksichtigung des Trennzeichens "\") vierten Teil des Strings geht (die beiden "\" am Beginn des Pfades werden einzeln gezählt), dann etwa so:
3 deshalb, weil Split() ein 0-basiertes Array erzeugt (erstes Element hat demnach Index 0).
Kurze Erklärung zum vorher geposteten Code:
InStrRev() sucht nach dem ersten Vorekommen von "\", beginnt allerdings am Ende des Strings (sucht also von rechts nach links). Die Zeichenposition der Fundstelle wird aber, wie von InStr() her gewohnt, von links gezählt.
Da der gefundene "\" nicht benötigt wird, Position um 1 erhöhen und mit Mid() ab dieser Position bis zum Ende (daher keine Angabe der Länge des gewünschten Teilstrings) den Rest des Strings als Ergebnis verwenden.
Grüße
bastla
Abteilung auslesen: Wenn es um den (unter Berücksichtigung des Trennzeichens "\") vierten Teil des Strings geht (die beiden "\" am Beginn des Pfades werden einzeln gezählt), dann etwa so:
strComp2 = Split(lcase(objFile2.ReadLine), "\")(3)
Kurze Erklärung zum vorher geposteten Code:
InStrRev() sucht nach dem ersten Vorekommen von "\", beginnt allerdings am Ende des Strings (sucht also von rechts nach links). Die Zeichenposition der Fundstelle wird aber, wie von InStr() her gewohnt, von links gezählt.
Da der gefundene "\" nicht benötigt wird, Position um 1 erhöhen und mit Mid() ab dieser Position bis zum Ende (daher keine Angabe der Länge des gewünschten Teilstrings) den Rest des Strings als Ergebnis verwenden.
Grüße
bastla