German eine große Datenbank durchsuchen

Thorman

Member
Licensed User
Longtime User
Hallo zusammen,

ich habe eine Datenbank in CSV Format mit 21622 Datensätzen. Eine Spalte beinhaltet das Kürzel einer Station und die Andere den dazugehörige Langnamen.

AABG;Agathenburg
AACW;Achterwehr
AADF;Adendorf
AAE;Brest-Aspe
...

Wie kann ich eine schnelle Suche nach einer Station realisieren? Bzw. ist das bei dieser Größe überhaupt möglich?


Gruß
Thorman
 

DonManfred

Expert
Licensed User
Longtime User
kannst du ein beispiel einer solchen csv-datei mal in ein zip packen und hier hochladen?
 

Thorman

Member
Licensed User
Longtime User
Hier ein Auszug der Datei in Textform!
 

Attachments

  • DL100_kurz2.txt
    144.9 KB · Views: 316

Thorman

Member
Licensed User
Longtime User
Danke für die schnelle Antwort!
Mein Problem ist aber vor allem die Suche in der Datenbank. Es soll nach Eingabe des Kürzels oder des Langnamens der betreffene Datensatz gefunden werden. Eine Schleife scheidet durch die größe der Datenbank sicherlich aus.
 

Thorman

Member
Licensed User
Longtime User
Nein, nicht unbedingt! Optimal wäre, wenn der Anwender Vorschläge bekommt. Ich denke da an die AutoCompleteEditText Funktion.
 

Thorman

Member
Licensed User
Longtime User
Alles klar! Mit "AutoCompleteEditText" funktioniert es! Vielen Dank für die Hilfe!
 

Thorman

Member
Licensed User
Longtime User
Leider dauert der Durchlauf der Schleifen extrem lange.
Ich habe das über den AutoCompleteEditText gelöst.

B4X:
Sub Globals
   
   
    Dim ACT_Kurz, ACT_Lang As AutoCompleteEditText
    Dim ListLangname As List
    Dim ListKurzname As List
       
    Dim List1 As List


End Sub




Sub Activity_Create(FirstTime As Boolean)
   
    ListLangname.Initialize
    ListKurzname.Initialize
   
       

ReadCSV



    ACT_Kurz.Initialize("ACT")
    ACT_Lang.Initialize("ACT")
    Activity.AddView(ACT_Kurz, 50dip, 10dip, 200dip, 70dip)
    Activity.AddView(ACT_Lang, 50dip, 80dip, 200dip, 70dip)
   
    ACT_Kurz.SetItems2(ListKurzname, ACT_Kurz.Typeface, Gravity.FILL, 12, Colors.Blue)
    ACT_Lang.SetItems2(ListLangname, ACT_Kurz.Typeface, Gravity.NO_GRAVITY, 12, Colors.DarkGray)


   
End Sub

Sub ReadCSV
    If File.Exists(File.DirAssets, "stations.csv") Then
        Dim i As Int
        Dim tr As TextReader

        tr.Initialize2(File.OpenInput(File.DirAssets, "stations.csv"), "ISO-8859-1")

        List1 = tr.ReadList
        For i = 1 To List1.Size - 1
            Dim VString() As String
            VString = Regex.Split(";", List1.Get(i))
           
            ListKurzname.Add(VString(0))
            ListLangname.Add(VString(1))

        Next
    Else
        Msgbox("Datei fehlt ","Datei")
    End If

End Sub

Sub ACT_TextChanged (Old As String, New As String)

    If Old = New Then Return
       
    If ListKurzname.IndexOf(ACT_Kurz.text) > -1 Then
   
        Activity.Title = ListLangname.Get(ListKurzname.IndexOf(ACT_Kurz.text)) & "  " & ACT_Kurz.text
   
    End If
   
    If ListLangname.IndexOf(ACT_Lang.text) > -1 Then
   
        Activity.Title =ListKurzname.Get(ListLangname.IndexOf(ACT_Lang.text)) & "  " & ACT_Lang.text
       
    End If
   

End Sub
 

ernschd

Active Member
Licensed User
Longtime User
Wäre in diesem Fall eine Map nicht auch eine gute Möglichkeit, statt mit zwei Listen zu arbeiten? Dadurch hat man automatisch die Zuordnung zwischen den Schlüsseln und den Werten.
 
Top