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
GELÖST

Vergleichen eines längeren Strings mit einem Kürzeren

Frage Entwicklung VB for Applications

Mitglied: milo86

milo86 (Level 1) - Jetzt verbinden

10.03.2009, aktualisiert 09:01 Uhr, 3393 Aufrufe, 4 Kommentare

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:
01.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
02.
Set objFile1 = objFSO.OpenTextFile("ad.txt", 1) 
03.
If objFSO.getfile("ad.txt").size > 0 Then 
04.
strComp = lcase(objFile1.ReadAll) 
05.
End If 
06.
objFile1.Close 
07.
 
08.
Set objFile2 = objFSO.OpenTextFile("share.txt", 1) 
09.
Do Until objFile2.AtEndOfStream 
10.
    strComp2 = lcase(objFile2.ReadLine) 
11.
    If InStr(strComp,strComp2) = 0 Then 
12.
        strResult = strResult & strComp2 & vbCrLf 
13.
    End If 
14.
Loop 
15.
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
Mitglied: bastla
10.03.2009 um 10:17 Uhr
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:
If InStr(strComp2, "\") > 0 Then strComp2 = Mid(strComp2, InStrRev(strComp2, "\") + 1)
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
vbCrLF & strComp2 & vbCrLf
verwenden - so kannst Du verhindern, dass ein User "huber" gefunden wird, obwohl es nur einen "mayerhuber" gibt.

Grüße
bastla
Bitte warten ..
Mitglied: milo86
10.03.2009 um 11:17 Uhr
Hallo bastla,

vielen Dank für die Willkommensgrüße und für Deine schnelle Hilfe!
Ich hab\'s anhand Deiner Vorgabe wie folgt geschrieben:
01.
If InStr(strComp2, "\") > 0 Then  
02.
strComp2_cut = Mid(strComp2, InStrRev(strComp2, "\") + 1) 
03.
    If InStr(strComp,strComp2_cut) = 0 Then 
04.
        strResult = strResult & strComp2 & vbCrLf 
05.
	End If 
06.
End If
Funktioniert auch wunderbar!
Kannst Du mir bitte etwas erklären, was Deine Zeile Code macht?

Es tat sich ein zweites Problem auf.
Ich lese die Shares aus dem DFS mittels Batch und "dir" aus.
Es gibt ein Share (mein eigenes) in welches ich reingucken darf.
Der Pfad sieht dann so aus: \\sub.pfad\abteilung\mein_user\\eigene dateien\\test

Kann ich meinen eigenen User ausschließen? Weil alle meine Unterordner werden natürlich auch als Ergenis ausgegeben, da der User nicht am Ende steht.

Ist es möglich auch von \\sub.pfad\abteilung\user1 die Abteilung auszulesen?

Grüße
Oliver
Bitte warten ..
Mitglied: bastla
10.03.2009 um 13:38 Uhr
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:
strComp2 = Split(lcase(objFile2.ReadLine), "\")(3)
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
Bitte warten ..
Mitglied: milo86
10.03.2009 um 18:33 Uhr
Hallo bastla,

vielen Dank für Deine Ausführung. Das sollte erstmal ausreichen um ein Script zu schreiben, welches meinen Bedürfnissen genügt.
Wenn es fertig ist, schreib ich nochmal.

Vielen Dank und Grüße
Oliver
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateiinhalte vergleichen - Gemeinsamkeiten anzeigen (9)

Frage von Rotnasenkater zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (17)

Frage von JayyyH zum Thema Switche und Hubs ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

DSL, VDSL
DSL-Signal bewerten (14)

Frage von SarekHL zum Thema DSL, VDSL ...