mrmojo
Goto Top

VBScript Ausgabe von unterschiedlichen Einträgen in 2 Arrays

Hallo,

habe ein kleines Problem und zwar wie bekomme ich bei folgendem Script die 0 und die 2 (stellvertretend für andere Strings) ausgegeben und nicht nur die doppelten Einträge??
Weil so bekomme ich als Ergebnis nur 1 1
3 3
4 4 in eine Textdatei geschrieben, mich interessieren aber auch die übrigen Einträge.
mfg


Dim Array1(3), Array2(3)
const forwriting = 2

Array1(0) = "1"
Array1(1) = "2"
Array1(2) = "3"
Array1(3) = "4"

Array2(0) = "4"
Array2(1) = "3"
Array2(2) = "1"
Array2(3) = "0"

set fso = createobject("scripting.filesystemobject")
set f= fso.opentextfile("C:\Bat\backup\projekt\ergebnis.txt", 2)

for i = 0 to ubound(Array1)
for s = 0 to ubound(Array2)

if instr(Array1(i), Array2(s)) > 0 then

msgbox Array1(i) & " " & Array2(s)
f.writeline Array1(i) & " " & Array2(s)

end if

next
next

Content-Key: 113327

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

Printed on: April 26, 2024 at 05:04 o'clock

Member: bastla
bastla Apr 06, 2009 at 15:16:37 (UTC)
Goto Top
Hallo mrmojo und willkommen im Forum!

Etwa so:
Dim Array1(3), Array2(3)

Array1(0) = "1"  
Array1(1) = "2"  
Array1(2) = "3"  
Array1(3) = "4"  

Array2(0) = "4"  
Array2(1) = "3"  
Array2(2) = "1"  
Array2(3) = "0"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set f = fso.CreateTextFile("C:\Bat\backup\projekt\ergebnis.txt")  

For i = 0 to UBound(Array1)
    Found = False
    For s = 0 To UBound(Array2)
        If InStr(Array1(i), Array2(s)) > 0 Then
            WScript.Echo Array1(i) & " " & Array2(s)  
            f.WriteLine Array1(i) & " " & Array2(s)  
            Found = True
            Exit For
        End If
    Next
    If Not Found Then WScript.Echo "Nur in Array1: " & Array1(i)  
Next

For s = 0 to UBound(Array2)
    Found = False
    For i = 0 To UBound(Array1)
        If InStr(Array1(i), Array2(s)) > 0 Then
            Found = True
            Exit For
        End If
    Next
    If Not Found Then WScript.Echo "Nur in Array2: " & Array2(s)  
Next
Natürlich kannst Du die "Einzelgänger" auch zusätzlich in eine weitere Ausgabedatei schreiben.

Anzumerken wäre noch, dass Du nicht auf Gleichheit der Werte prüfst, sondern darauf, ob der Wert aus dem Array2 in einem Wert des Array1 enthalten ist, was allerdings bei gleicher Zeichenanzahl in den jeweiligen Strings zum selben Ergebnis führt.

[Edit] Als Ergänzung: Wenn tatsächlich auf Gleichheit der Einträge geprüft werden sollte, wäre auch die Verwendung eines "Dictionary" eine Möglichkeit:
Set d = CreateObject("Scripting.Dictionary")  
d.Add "1", False 'Eintrag hinzufügen, Vorgabe von "False" als Kennzeichen für "auch in Array2 enthalten"  
d.Add "2", False  
d.Add "3", False  
d.Add "4", False  

Array2 = Array("4","3","1","0")  

Set fso = CreateObject("Scripting.FilesystemObject")  
Set f = fso.CreateTextFile("C:\Bat\backup\projekt\ergebnis.txt")  

For s = 0 to UBound(Array2)
    Wert = Array2(s)
    If d.Exists(Wert) Then
        WScript.Echo Wert
        f.WriteLine Wert
        d.Item(Wert) = True 'Dictionary-Eintrag aktuallisieren  
    Else
        WScript.Echo "Nur in Array2: " & Wert  
    End If
Next

For Each K In d.Keys
    If Not d.Item(K) Then WScript.Echo "Nur in Array1: " & K 'für den Wert K ist noch immer "False" eingetragen, daher nicht in Array2 enthalten  
Next
[/Edit]

Grüße
bastla