Seite 1 von 1

Textdatei in Datenbank ( über Arbeitsspeicher )

Verfasst: 18.06.2005 13:52
von Hermann
Hallo zusammen.

Leider habe ich zu meinem Problem nichts gefunden.

Problem:
Ich will eine Textdatei zeilenweise in eine Datenbank ( SQLite ) kopieren. Hierzu lese ich die Textdatei zeilenweise aus ( Fasttext ) und schreibe die Zeile dann als Datensatz in die Datenbank. Soweit klappt das auch. Nun dauert dieser Vorgang jedoch durch die Laufwerkszugriffe ellenlang.

Mein Gedanke war, die Textdatei in den Speicher zu laden, dort auslesen und dann in die Datenbank zu schreiben.

Leider habe ich keine Ahnung wie ich dieses bewerkstelligen kann :-(

Kann mir jemand einen Tip bzw. Anleitung geben?

Hier nun der Code wie ich es bislang mache :

Code: Alles auswählen

File$=OpenFileRequester("Datei öffnen:","","Text | *.txt",1)

FileOpened=ReadFile(1,File$)

LinesCount=FastOpenTextFile(File$) 
 ;MessageRequester("Test","Count lines :"+StrU(LinesCount,2),0)

If SQLiteOpen(Datenbanknummer.l,#Datenbankname)
  
  For i= 1 To LinesCount
    Textline.s = FastReadLine(i)
    abfrage1$ = "insert into Liste (Feld1,Feld2) "
    abfrage2$ = "values ('" + Str(i) + "','" +  Textline.s + "')"
    abfrage.s=abfrage1$+abfrage2$
    SQLiteExec(abfrage.s)
  Next
  
  SQLiteClose(Datenbanknummer.l)
  
  MessageRequester("Import abgeschlossen","Count lines :"+StrU(LinesCount,2),0)
  
EndIf
Danke für jede Hilfe.

Hermann

Verfasst: 18.06.2005 14:16
von FGK
Hallo Hermann,

mach aus deiner Textline.s ein Array und dimensionier es mit LinesCount.
Dann liest du alles in einem Rutsch ins Array und dann setzt du den Inhalt des Arrays wie bisher in deine Datenbank.

Gruß

FGK

Re: Textdatei in Datenbank ( über Arbeitsspeicher )

Verfasst: 18.06.2005 15:09
von Kiffi
Hallo Hermann,

Transaktionen beschleunigen Deine Datenbankanweisungen erheblich (in
Deinem Code mit drei Ausrufezeichen gekennzeichnet).

Code: Alles auswählen

File$=OpenFileRequester("Datei öffnen:","","Text | *.txt",1)

FileOpened=ReadFile(1,File$)

LinesCount=FastOpenTextFile(File$) 
 ;MessageRequester("Test","Count lines :"+StrU(LinesCount,2),0)

If SQLiteOpen(Datenbanknummer.l,#Datenbankname)
  
    SQLiteExec("BEGIN TRANSACTION;") ; !!!

  For i= 1 To LinesCount
    Textline.s = FastReadLine(i)
    abfrage1$ = "insert into Liste (Feld1,Feld2) "
    abfrage2$ = "values ('" + Str(i) + "','" +  Textline.s + "')"
    abfrage.s=abfrage1$+abfrage2$
    SQLiteExec(abfrage.s)
  Next
  
    SQLiteExec("COMMIT;") ; !!!

  SQLiteClose(Datenbanknummer.l)
  
  MessageRequester("Import abgeschlossen","Count lines :"+StrU(LinesCount,2),0)
  
EndIf
Grüße ... Kiffi

Verfasst: 18.06.2005 15:14
von NicTheQuick
Außerdem wird es höchstens langsamer, wenn man die Zeilen, die man mit der FastFile-Lib ausliest nochmal in ein Array schreibt, weil die FastFile-Lib einfach nicht schneller zu machen ist. Sie holt schon alles an Geschwindigkeit heraus. Intern macht sie nämlich das, was du vorhast, und noch etwas mehr.

Re: Textdatei in Datenbank ( über Arbeitsspeicher )

Verfasst: 19.06.2005 01:58
von Hermann
Kiffi hat geschrieben: Transaktionen beschleunigen Deine Datenbankanweisungen erheblich....
Danke. Das wars.

Liebe Grüße , Hermann