If-Schleifeninhalt auf doppelten Inhalt vergleichen

Xervek

Mitglied
Hallo,

ich habe ein kleines Problem im bezug auf die ShellExecute, wobei es mehr ein Problem um die Shell rum ist.
Und zwar lese ich aus 100 Dateien den Inhalt per If-Schleife in einem Array aus.
Nun habe ich also 100 Dateien als Array voll mit Inhalt. Nun würde ich aber gern prüfen, ob z.B. der Inhalt aus Array 1 bereits in einem weiteren array steht. Also 100 x 100 Dateien Prüfen, bzw. ansich einfach prüfen ob der Inhalt einer Arrayvariablen bereits in einem der anderen Steckt.

Leider habe ich keinen Plan wie ich sowas anständig abfragen kann und deshalb wäre es nett, wenn mir eventuell jemand helfen könnte...

Vielen Dank im Voraus!
 
Hi Xervek,

ich würde schon beim einlesen der Daten aus den Dateien die Überprüfung in den vorhandenen Arrays durchführen.

Wenn du wissen willst, wie du es am besten einbaust, dann poste mal deinen Quellcode und schreib auch gleich, was mit den doppelten Einträgen passieren soll. Ignorieren? Einfügen? Oder was sonst?
 
Hallo,

vielen Dank für die Antwort, dachte schon die Frage verschwindet. Wobei ich bein darüber nachdenken festgestellt habe, dass sie kompletter Mist ist.

Code:
For i = 1 To ac_support_games

    If FileExists(App.Path & "\games\game" & i & ".game") Then
    
        Open (App.Path & "\games\game" & i & ".game") For Input As #1
            Input #1, buildversion(i)
            Input #1, game_name(i)
            Input #1, game_path(i)
            Input #1, image_path(i)
            Input #1, close_program(i)
            Input #1, save_file(i)
        Close #1
    
        list_games.AddItem game_name(i)
        
    End If
Next i

Ich habe eine ListBox in die der "Name" des jeweiligen Arrays eingetragen wird. In diesem Fall wurde "Dim i as integer" und alle arrays gehen derzeit von 1 - 100. Das Funktioniert wirklich ohne weiteres, wenn ich jetzt aber versuche mit folgendem Code etwas zu öffnen:

Code:
For i = 1 To ac_support_games

    If close_program(i) = 1 Then
        If list_games.Text = game_name(i) Then
            var = Replace(game_path(i), "\", "/")
            pos = InStrRev(var, "/")
            ShellExecute 0, "open", game_path(i), "", Left(var, pos), 1
            Unload Me
            Exit Sub
        End If
    Else
        If list_games.Text = game_name(i) Then
            var = Replace(game_path(i), "\", "/")
            pos = InStrRev(var, "/")
            ShellExecute 0, "open", game_path(i), "", Left(var, pos), 1
            Exit Sub
        End If
    End If
    
Next i

ac_support_games = 100 als const festgelegt. Den code mit dem "close_program()" ist, damit sich mein programm schließt, wenn es sich schließen soll oder anbleibt, wenn es anbleiben soll.

Öffne ich nun allerdings ein Programm mit diesem Code und ein Eintrag ist 2 mal mit dem gleichen Namen vorhanden, werden 2 Sachen geöffnet (nämlich die, bei denen "game_name()" gleich ist. Hatte den Fehler gemacht um zu testen ob es funktioniert 100 mal das Gleiche eingetragen, wollte eines davon öffnen und schwupps hatte ich ein Programm 100 mal offen.

Nun wie gesagt würde ich gerne abfragen ob ein "game_name()" name schon in einem anderen "game_name()" steckt und dann... irgendwas, ich weiß nicht, was wäre denn angebracht? Ne Fehlermeldung? Ausschließen dieses Arrays? Ja, das Array einfach ausschließen und nicht mit laden.

Leider habe ich keinen Plan und auch etwas wie:
Code:
test = i + 1
if game_name(i) = game_name(test) then
     bla
else
     noch mehr bla
End if

Hab zig sachen versucht, immerzu ist mein Programm entweder ganz gecrasht oder es wurde JEDER eintrag einfach 100 mal eingetragen sodass ich bei 10 "eigentlichen" einträgen 1000 in der Liste hatte bei denen jedes der 10; 100 mal in der Liste stand, ich habe echt keinen Plan wie ich ein array auf doppelten Inhalt prüfen kann - außerdem nehme ich an, dass soeine Abfrage ziemlich Rechenleistung nehmen wird, oder? Dann wäre jeder Programmstart ja eine Hölle?

Nagut ich bin mal still und warte ob du mir helfen kannst :)

Vielen Dank und liebe Grüße
 
Erstmal muss ich was zu deinem Code fragen:

Code:
Open (App.Path & "\games\game" & i & ".game") For Input As #1
    Input #1, buildversion(i)
    Input #1, game_name(i)
    Input #1, game_path(i)
    Input #1, image_path(i)
    Input #1, close_program(i)
    Input #1, save_file(i)
Close #1
Bei dieser Zuordnung kommt was sinnvolles raus?


So und nun zu deinem Quelltext (zum Thema Dateien öffnen)

Code:
If list_games.Text = game_name(i) Then
	
End If
Was genau soll diese Abfrage bewirken



Aber gut - dir geht's ja nur darum, dass in game_name nicht 2 mal derselbe Wert steht, richtig?
Schreib dir doch einfach eine Funktion dafür.

Code:
Private Function Teste_Array(Name As String, NameArray() As String, Nummer As Integer) As Boolean
Dim i As Integer
Teste_Array = False
    If Nummer > 1 Then
        For i = 1 To Nummer - 1
            If NameArray(i) = Name Then
                Teste_Array = True
                Exit Function
            End If
        Next i
    Else
        Teste_Array = False
        Exit Function
    End If
End Function

Ich mach's wahrscheinlich meistens umständlicher als nötig, aber es funktioniert. Du übergibst 3 Parameter - den aktuellen Game_Name, dann das gesamte Game_Name-Array und zuletzt noch die Nummer des aktuellen Elements (also i aus der For-Schleife). Bei jedem Hinzufügen eines Game_Name kannste damit Prüfen ob in den vorigen Elementen des Arrays schonmal der gleiche Name steht.
Ich hoffe ich hab das Problem richtig verstanden :rolleyes:
 
ltPerly hat gesagt.:
Erstmal muss ich was zu deinem Code fragen:

Code:
Open (App.Path & "\games\game" & i & ".game") For Input As #1
    Input #1, buildversion(i)
    Input #1, game_name(i)
    Input #1, game_path(i)
    Input #1, image_path(i)
    Input #1, close_program(i)
    Input #1, save_file(i)
Close #1

Bei dieser Zuordnung kommt was sinnvolles raus?

Was ist denn "sinnvoll"? Es wird das getan, was getan werden soll. Es funktioniert also wirklich wunderbar. Wieso? Was ist daran schlimm?

So und nun zu deinem Quelltext (zum Thema Dateien öffnen)

Code:
If list_games.Text = game_name(i) Then
	
End If
Was genau soll diese Abfrage bewirken

Diese Abfrage soll bewirden, dass wenn game_name(5) beispielweise in der List_Box ausgewählt ist, das dann genau DIESER geöffnet werden soll. Schwupps es passiert, was passieren soll.

Aber gut - dir geht's ja nur darum, dass in game_name nicht 2 mal derselbe Wert steht, richtig?
Schreib dir doch einfach eine Funktion dafür.

Code:
Private Function Teste_Array(Name As String, NameArray() As String, Nummer As Integer) As Boolean
Dim i As Integer
Teste_Array = False
    If Nummer > 1 Then
        For i = 1 To Nummer - 1
            If NameArray(i) = Name Then
                Teste_Array = True
                Exit Function
            End If
        Next i
    Else
        Teste_Array = False
        Exit Function
    End If
End Function

Tja das hätte ich getan aber leider hatte ich keinen Plan wie ich soetwas anstellen konnte. Werde das später mal probieren und gucken obs , mein Rechner ist grade ziemlich am Ackern, besten Dank!
 
Xervek hat gesagt.:
Was ist denn "sinnvoll"? Es wird das getan, was getan werden soll. Es funktioniert also wirklich wunderbar. Wieso? Was ist daran schlimm?
Nee, da is natürlich nichts schlimm ... hab nur so eine Art der Zuweisung noch nicht gesehen - deshalb hat's mich nur mal interessiert.

Und noch ein kleiner Zusatz zu der Funktion - die gibt nen Boolean-Wert zurück: True, wenn der Wert schon im Array vorhanden ist und False, wenn er noch nicht drin steht.
 
Zurück