SQLite mit einer :memory: - DatenbankLittle John hat geschrieben:Hast Du da 'ne gute Idee, Kiffi?

Grüße ... Kiffi
SQLite mit einer :memory: - DatenbankLittle John hat geschrieben:Hast Du da 'ne gute Idee, Kiffi?
Nein im Moment nicht. Zur Zeit besteht der Code aus den 2 Routinen:Kiffi hat geschrieben:@LJ: Du liest die komplette CSV in den Speicher und parst sie dann?
Code: Alles auswählen
ReadCsvRecord()
WriteCsvRecord()
Theoretisch habe ich daran auch schon gedacht. Praktisch habe ich davon keine Ahnung.Kiffi hat geschrieben:SQLite mit einer :memory: - DatenbankLittle John hat geschrieben:Hast Du da 'ne gute Idee, Kiffi?
Gut!Little John hat geschrieben:Nein im Moment nicht.
welche Sprache verwendest Du hier?Little John hat geschrieben:Z.Z. wird jeder Record in einer Datenstruktur gehalten, die es in PB nicht gibt.
Schwierig...Little John hat geschrieben:In welcher Form sollte denn ein Datensatz am besten an die SQLite-Datenbank übergeben werden?
Code: Alles auswählen
Create Table CSV (c1, c2, c3, ...)
Code: Alles auswählen
Insert Into CSV (c1, c2, c3, ...) Values ('" + v1 + "', '" + v2 + "', '" + v3 + "'...)
Code: Alles auswählen
v1;v2;v3
v1;v2;v3
v1;v2;v3;v4
v1;v2;v3
Ja, genau deshalb verarbeite ich Dateien immmer gerne in kleineren "Häppchen" (wenn möglich).Kiffi hat geschrieben:Theoretisch können CSV-Dateien unbegrenzt
groß sein. Ich muss beispielsweise CSV-Dateien parsen, die
schon mal 500 MB groß sind. Diese komplett in den Speicher
laden zu wollen ist natürlich suboptimal.
Ich weiß mal grade so was "DotNet" bedeutet, aber mehr nicht.Kiffi hat geschrieben:Ich verwende übrigens für obige Dateien die DotNet
TextFieldParser-Klasse.
Siehe Posteingang.Kiffi hat geschrieben:welche Sprache verwendest Du hier?
Vielen Dank, da hast Du mir erstmal die richtige Richtung gezeigt. Ich werde mich sobald wie möglich dazu belesen.Kiffi hat geschrieben:Schwierig...Little John hat geschrieben:In welcher Form sollte denn ein Datensatz am besten an die SQLite-Datenbank übergeben werden?
Normalerweise liest man die erste Zeile ein, parst sie und kennt
dann die Anzahl der Felder. Aufgrund dieser Information kann man
dann die Tabelle erstellen:danach wird Zeile für Zeile geparst und in die Tabelle eingefügt:Code: Alles auswählen
Create Table CSV (c1, c2, c3, ...)
soweit die Theorie...Code: Alles auswählen
Insert Into CSV (c1, c2, c3, ...) Values ('" + v1 + "', '" + v2 + "', '" + v3 + "'...)
Ja? Ich dachte immer das sei nicht erlaubt. Aber Du kennst Dich da bestimmt besser aus. Ich dachte, dass die "kürzeren" Records dann mit leeren Feldern aufgefüllt werden müssen:Kiffi hat geschrieben:Was aber, wenn eine Zeile mehr Felder als die anderen Zeilen enthält?
(ist meines Erachtens CSV-technisch erlaubt)Code: Alles auswählen
v1;v2;v3 v1;v2;v3 v1;v2;v3;v4 v1;v2;v3
Code: Alles auswählen
v1;v2;v3;
v1;v2;v3;
v1;v2;v3;v4
v1;v2;v3;
Nee, nicht schön das ...Kiffi hat geschrieben:Also müsste man die CSV zweimal parsen: Ein Lauf, um die max. Anzahl
der Felder zu ermitteln (und dann die Tabelle zu erstellen)
und einmal, um die Daten zu ermitteln. Das macht die Sache natürlich nicht
schneller...
Was genau? Mit welchem Programm?zoidberg hat geschrieben:Also, daß eine Zeile mehr Werte enthält geht. Ich habe es gerade ausprobiert.
Gibts bei CSV überhaupt festgelegte Regularien?Little John hat geschrieben:Ja? Ich dachte immer das sei nicht erlaubt. Aber Du kennst Dich da bestimmt besser aus. Ich dachte, dass die "kürzeren" Records dann mit leeren Feldern aufgefüllt werden müssen:Code: Alles auswählen
v1;v2;v3; v1;v2;v3; v1;v2;v3;v4 v1;v2;v3;
Code: Alles auswählen
Name;Strasse;Postleitzahl;Ort
v1;v2;v3;
v1;v2;v3;
v1;v2;v3;v4
v1;v2;v3;
v1;v2;;v4
Schäm Dich!Little John hat geschrieben:Ich weiß mal grade so was "DotNet" bedeutet, aber mehr nicht.
ja, kann man. Allerdings funktioniert das bei SQLite ein wenig umständlicher als bei anderen DBs. Hier gibt es nämlich keinLittle John hat geschrieben:Kann man denn eine SQLite-Tabelle mit 20 Feldern schnell auf 10 Felder "kürzen", falls man am Ende der Datei feststellt dass alle Records doch nur 10 Felder hatten?
ist mir gestern unter der Dusche auch eingefallen.Little John hat geschrieben:Oder die CSV-Daten evtl. in PureBasics XML-Datenstrukturen einlesen? Ist auf jeden Fall flexibler, und man muss die maximale Feldanzahl nicht vorher kennen.
Gibts nicht! (lediglich MS-bildet sich wieder ein, so wie sie es machen ist es standardDrFalo hat geschrieben: Gibts bei CSV überhaupt festgelegte Regularien?