German IndexOf auf Teilstring

peternmb

Well-Known Member
Licensed User
Longtime User
Hallo,

ich habe eine Datei in der in Listenform Namen und Infos gespeichert sind, z.B.
Huber,35,3,2,1,50,10
Maier,38,4,0,0,80,20
Schulze,32,2,1,1,90,10

wie kann ich prüfen ob z.B. "Maier" dabei ist?
B4X:
ListDat = File.readlist(ListDir,ListFile)  
If ListDat.IndexOf("Maier,38,4,0,0,80,20") = -1 Then  'funktioniert
If ListDat.IndexOf("Maier") = -1 Then                 'funktioniert nicht
 

klaus

Expert
Licensed User
Longtime User
Was genau funktioniert nicht ?

Beispiel:
ListDat = "Maier,38,4,0,0,80,20"
ListDat.IndexOf("Maier") ergibt 0
ListDat.Contains("Maier") ergibt True

ListDat = "Huber,35,3,2,1,50,10"
ListDat.IndexOf("Maier") ergibt -1
ListDat.Contains("Maier") ergibt False

Für mich funktioniert das richtig.

Wenn Du mit ListDat.IndexOf("Maier") -1 bekommst, bist Du sicher dass in diesem Fall wirklich "Maier" in ListDat drin ist und nicht "Meier" ?

Beste Grüsse.
 

peternmb

Well-Known Member
Licensed User
Longtime User
so funktioniert es (ich erhalte die Meldung "gefunden"):
B4X:
If ListDat.IndexOf("Maier,38,4,0,0,80,20") = -1 Then 
   Msgbox("nicht gefunden","")
Else
   Msgbox("gefunden","")
End if

so funktioniert es nicht (ich erhalte die Meldung "nicht gefunden"):
B4X:
If ListDat.IndexOf("Maier") = -1 Then           
   Msgbox("nicht gefunden","")
Else
   Msgbox("gefunden","")
End if
Ich werde es mal mit ListDat.contains versuchen, das habe ich noch nicht gekannt :sign0104:
 

peternmb

Well-Known Member
Licensed User
Longtime User
ListDat.contains kennt er nicht!

Ich lese die Daten aus einer Datei ein, so dass es eine Liste kein String ist.
Könnte es damit zusammenhängen - oder mache ich da irgendwo einen Denkfehler :BangHead:

so funktioniert es (ich erhalte die Meldung "gefunden"):
B4X:
ListDat = File.readlist(ListDir,ListFile) 
If ListDat.IndexOf("Maier,38,4,0,0,80,20") = -1 Then 
   Msgbox("nicht gefunden","")
Else
   Msgbox("gefunden","")
End if

so funktioniert es nicht (ich erhalte die Meldung "nicht gefunden"):
B4X:
ListDat = File.readlist(ListDir,ListFile) 
If ListDat.IndexOf("Maier") = -1 Then           
   Msgbox("nicht gefunden","")
Else
   Msgbox("gefunden","")
End if
 

klaus

Expert
Licensed User
Longtime User
Entschuldige, Ich hatte nicht genau hingeschaut und nicht aufgepasst dass Du eine List einlist.
Mit List geht es nicht da musst Du jede Zeile der List durchgehen:
B4X:
Dim ListItem As String
For i = 0 To ListDat.Size - 1
    ListItem = ListDat.Get(i)
    If ListItem.IndexOf("Maier,") > -1 Then
        Exit
    End If
Next

If i < ListDat.Size Then
    Log("gefunden")
Else
    Log("nicht gefunden")
End If
Du musst bei der Suche noch ein Komma anhängen den auch wenn Du 'Maier' suchst würde 'Maierhofer' auch gefunden werden.

Ist Deine Datei einen Textdatei ?
Wenn ja, könntest Du es auch so machen:
B4X:
If File.ReadString(ListDir, ListFile).IndexOf("Maier,") > 0 Then
    Log("gefunden")
Else
    Log("nicht gefunden")
End If
Weisst dann aber nicht in welchem Eintrag der Name ist.


Das funktioniert weil in diesem Beispiel ein voller Eintrag der List getestet wird.
B4X:
If ListDat.IndexOf("Maier,38,4,0,0,80,20") = -1 Then
Beste Grüsse.
 
Last edited:

peternmb

Well-Known Member
Licensed User
Longtime User
Mit List geht es nicht da musst Du jede Zeile der List durchgehen
Ja, das habe ich mir mittlerweile fast gedacht.
Ich setze es so in einem anderen Programmteil ein und es funktioniert tadellos - da ist aber der Suchstring identisch mit der kompletten Zeile...

Ist Deine Datei einen Textdatei ?
Wenn ja, könntest Du es auch so machen:
B4X:
If File.ReadString(ListDir, ListFile).IndexOf("Maier,") > 0 Then
    Log("gefunden")
Else
    Log("nicht gefunden")
End If
Weisst dann aber nicht in welchem Eintrag der Name ist.
Vielen Dank.
Das funktioniert bestens. Ich muss nur wissen, ob der Name vorhanden ist - das wo ist egal :sign0098:
 
Top