German Daten aus Text Datei in SQLite Datenbank einfügen

friedwald

Member
Hallo,
ist es möglich aus einer ausgewählten Text Datei den Inhalt in eine SQLite Datenbank zuschreiben?
Wenn ja könntet ihr mir es bitte erklären?

Aufbau TXT-Datei:

"00000000";"0001";"Beispiel Text";"Beispiel Text 2"
"00000000";"0002";"Beispiel Text";"Beispiel Text 2"
usw...

Mit freundlichen Grüßen

Friedel
 

cmweb

Active Member
Licensed User
Longtime User
Hi,

Du liest die Zeilen aus Deiner Textdatei aus, nimmst die einzelnen Felder aus der Zeile und schreibst diese in eine SQL Datenbank.

Was genau ist Deine Frage?

Herzliche Grüße

Carsten
 

friedwald

Member
Hi,

Du liest die Zeilen aus Deiner Textdatei aus, nimmst die einzelnen Felder aus der Zeile und schreibst diese in eine SQL Datenbank.

Was genau ist Deine Frage?

Herzliche Grüße

Carsten
Hi Carsten,
genau das soll passieren.

Ich weiß nur leider nicht welche Befehle ich nutzen muss um Zeilen auszulesen und die jeweiligen Felder zB "0001";"TextBeispiel" zutrennen.

Habe mit File.ReadString schon viel Experimentiert dennoch komm ich nicht voran.

MfG
 

cmweb

Active Member
Licensed User
Longtime User
Hi,

nimm File.ReadList und lies' die Datei aus:

B4X:
dim actionlist as list
actionlist = File.Readlist(File.DirInternal,"datei.txt")

Dann machst Du eine Schleife:

B4X:
for i = 1 to actionlist.size -1
...
next

Innerhalb dieser Schleife extrahierst Du mit SubString bzw. SubString2 und IndexOf die einzelnen Felder der jeweiligen Zeile und schreibst sie in die Datenbank.

Hilft das weiter?

Herzliche Grüße

Carsten
 

Paulsche

Well-Known Member
Licensed User
Longtime User
Beispielcode aus meiner APP, vielleicht hilft Dir das weiter:

B4X:
      ret = FileDialog.Show("Select CSV-Datei", "OK", "Cancel", "", Null)         ' Dialog für Dateiauswahl anzeigen

   csvfile    = FileDialog.ChosenName
   csvpath    = FileDialog.FilePath
   csvtabelle    = StringUtil.LoadCSV(csvpath, csvfile, ";")
   firstRow    = csvtabelle.Get(0)                                       
   If CHKboxKopfzeile.Checked = True Then                                 ' Wenn Kopfzeile angehakt wurde
      kopf = 1
       eintraege   = csvtabelle.Size -1                                 ' Anzahl einträge minus Kopfzeile
   Else
      kopf = 0
      eintraege   = csvtabelle.Size
   End If   
   
   For x = kopf To csvtabelle.Size -1                                    ' Schleife nach Anzahl Zeilen
      For i = 0 To firstRow.Length - 1                                 ' Schleife nach Anzahl der Spalten
         Dim row() As String
         row = csvtabelle.Get(x)                                       ' row(i) = aktueller Spaltenwert
      Next   
         
      datum      = row(SNRdatum-1)                                    ' Datum
      If datum.Length = 10 Then                                       ' Wenn Datums-Jahr 4-stellig
         Dim datkurz As StringBuilder
         datkurz.Initialize
         datkurz.Append(datum)
         datkurz.Remove(6,8)                                          ' Jahreszahl in 2-stellig wandeln
         datum    = datkurz 
      End If
      ticks      = DateTime.DateParse(datum)                              ' Datum in Ticks umwandeln

      If SNRzeit > 0 Then
         zeit_string   = row(SNRzeit-1)                                 ' Uhrzeit
      Else
         zeit_string = "12:00"                                       ' Standarduhrzeit vorbelegen
      End If   
      zeit_ticks   = DateTime.TimeParse(zeit_string)
      
      If SNRort > 0 Then
         ort      = row(SNRort-1)                                       ' Ort
      Else
         ort    = ""
      End If   

      tacho      = row(SNRtacho-1)                                    ' Tachostand      
      ltr         = row(SNRliter-1)                                    ' Liter
      ltrpreis   = row(SNRlpreis-1)                                    ' Literpreis
      verbrauch   = 0                                                ' Verbrauch
      rech      = ltr * ltrpreis                                    ' Rechnung

      If SNRnotiz > 0 Then
         notiz    = row(SNRnotiz-1)                                    ' Notiz
      Else
         notiz   = ""
      End If   
      
      If row(SNRart-1) = LBL11dat_voll.Text Then                              ' Wert für Tankart setzen
         art    = "Volltankung"
      Else
         art    = "Teiltankung"
      End If
      
      SQLtnk.ExecNonQuery("INSERT INTO Tankdaten VALUES('"&kfzauswahl&"','"&ticks&"','"&datum&"','"&ort&"','"&tacho&"','"&ltr&"','"&ltrpreis&"','"&verbrauch&"','"&rech&"','"&art&"','"&notiz&"','"&zeit_ticks&"','"&zeit_string&"')")
   Next
 

friedwald

Member
Hallo ihr beiden,
sry das ich jetzt erst antworte war im Urlaub.

Vielen Dank für eure große und schnelle Hilfe.
Ich werde mich heute mal ransetzen und eure Codes umsetzen.

Wünsch euch eine angenehme Woche

MfG

Friedel
 

friedwald

Member
Hallo,
ich komme leider wieder nicht weiter.

Jede Zeile wurde jetzt eingelesen, dass klappt auch wunderbar habe es mir mit

B4X:
Msgbox (actionlist.get(i),"Titel")

anzeigen lassen.

Substring bzw Substring2 und IndexOf hilft mir aber nicht weiter

Ich weiß nicht wie ich nur den Inhalt zwischen den "" bekomme.
Da sich der Index der " ja in jeder Zeile verändert.


Ich habe zb in der Datei folgendes stehen
"1234";"abc"
"12345";"ab"
"123";"abcdef"

Daraus macht er mir dann

B4X:
Msgbox (data.Substring(0),"Titel")

1234";"abc"
12345";"ab"
123";"abcdef"

B4X:
Msgbox (data.Substring2(0,6),"Titel")

1234";
12345"
123";"



Hier bekomme ich eine Fehlermeldung (bin im mom auf Arbeit und habe sie nicht zur Hand).

Ich denke mal Dim b as Int wird falsch sein.
B4X:
Dim a as Int
Dim b as Int
a=0
b=data.IndexOf2(Chr(34),1)
Msgbox (data.Substring2(a,b),"Titel")


Mit freundlichen Grüßen

Friedel
 

cmweb

Active Member
Licensed User
Longtime User
Hi,

mit

B4X:
data.replace(Quote,"")
solltest Du die Anführungszeichen eliminieren können.

Dann gehst Du hin und machst folgendes:

B4X:
dim kommapos as int      'Position des Semikolon
kommapos = data.indexof(";")    'Position des Semikolon ermitteln
zahl = data.substring2(0,kommapos)     'Zahl aus dem String nehmen
text = data.substring(kommpos+1)    'Text aus dem String nehmen

Herzliche Grüße

Carsten
 
Top