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, 3408 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 ..
Ähnliche Inhalte
Batch & Shell
gelöst String automatisch anpassen (erweitern oder kürzen) (9)

Frage von CreatorX zum Thema Batch & Shell ...

Batch & Shell
gelöst Zeitangabe mit aktueller Angabe vergleichen (14)

Frage von Peter32 zum Thema Batch & Shell ...

Linux
gelöst Vergleich zwischen Distributionen. Mögliche Kriterien? (18)

Frage von hansleitner zum Thema Linux ...

Batch & Shell
String Zeichenpaare auslesen und bearbeiten (6)

Frage von ahstax zum Thema Batch & Shell ...

Neue Wissensbeiträge
Windows Server

Umstellung SHA 1 auf SHA 2 - Migration der CA von CSP auf KSP

Tipp von Badger zum Thema Windows Server ...

Windows 10

Quato DTP94 unter Windows 10 x64 installieren und verwenden

Anleitung von anteNope zum Thema Windows 10 ...

Windows 10

Win10 1703 und Nutzerkennwörter bei Ersteinrichtung - erstaunliche Erkenntnis

(15)

Erfahrungsbericht von DerWoWusste zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Internet
gelöst Jeden morgen Internet-Probleme (56)

Frage von pjrtvly zum Thema Internet ...

Server-Hardware
HP DL380 G7: Booten vom USB via USB 3.1-PCI-e Karte möglich? (24)

Frage von Paderman zum Thema Server-Hardware ...

LAN, WAN, Wireless
gelöst IP Adressen - Modem - Switch - Accesspoint (22)

Frage von teuferl82 zum Thema LAN, WAN, Wireless ...

Windows Server
Upgrade von Win Server 2008 auf 2012 gescheitert (19)

Frage von Ghost108 zum Thema Windows Server ...