Entwickler-Ecke
Dateizugriff - Inhalt eines Arrays in einen Paradox Tabelle schreiben?
NoEon - Mi 01.09.04 11:09
Titel: Inhalt eines Arrays in einen Paradox Tabelle schreiben?
Hallo, ich habe ein DynArray.
Ich weiss jetzt nicht welche abgaben man noch brauch dafür damit Ihr weiterhelfen könnt.
Einfach sagen! Ich lerne das alles gerade! Kann daher nicht allszuviel!
Ziel. bzw Vorgensweise:
Auslesen einer Datei (CSV) immer noch.
Diese wird in ein DynArray geschrieben.
Dann soll Zeilenweise meine Paradox Tabelle gefüllt werden mit dem Inhalt.
Ist das hier noch die richtige Kategorie?!
Gruss
Lars
jasocul - Mi 01.09.04 11:50
Hallo Lars,
ich schreib Dir hier keinen Source, sondern nur Hinweise, damit Du ein bisschen selber tüfteln musst. Das hilft beim lernen.
Auslesene einer Datei und ins Array schreiben:
Dateivariable definieren vom Typ Textfile
Datei zum lesen öffnen
über eine Schleife (bis eof) lesen
in der Schleife den eingelesenen String parsen und ins Array einlesen
Datei schließen.
Tabelle füllen:
Schleife über das Array
Für jede Arrayzeile ein Append auf Tabelle und jedem Feld die Daten zuweisen
Wenn Du weitere Hilfe brauchst, schreibe einfach an welcher Stelle Du nicht weiter kommst.
grayfox - Mi 01.09.04 12:10
hallo lars!
hier hast du eine 'einfache' routine zum einlesen eines csv-files in eine paradox-tabelle
feldtrennzeichen = ';', texterkennung gibts keine
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44:
| {$UNTESTED, da einfach eingetippt} var T: TextFile; instring: String; aTrennPos: ShortInt; aTempStr: String; Counter: LongInt; aFeldNr: ShortInt; begin table1.Open; AssignFile(T,aFilename); Reset(T); Readln(T,instring); aCounter:= 0;
while not EOF(T) do begin readln(T,instring); instring:= instring + ';' inc(aCounter); if (aCounter mod 100)= 0 then begin StaticText1.Caption:= Format('SatzNr: %9d eingelesen',[aCounter]); StaticText1.Update end;
aFeldNr:= 0; aTrennPos:= Pos(';',instring); table1.Append; while if aTrennPos > 0 do begin inc(aFeldNr); aTempStr:= Copy(instring,1,aTrennPos-1); table1.Fields[aFeldNr].Value:= aTempStr; Delete(instring,1,aTrennPos+1); aTrennPos:= Pos(';',instring) end table1.Post end;
CloseFile(T); table1.close;
StaticText1.Caption:= Format('SatzNr: %9d eingelesen',[aCounter]); StaticText1.Update; ShowMessage(Format('Import von %s beendet',[aFilename])); end; |
wozu du allerdings den umweg über ein array gehst, hab ich noch nicht verstanden...
mfg, stefan
//edit: das nächste mal tippe ich schneller ;)
NoEon - Mi 01.09.04 12:41
hi @ stefan,
sorry das mit dem Array ist ziemlich kompliziert... ich hab bis jetzt auch noch kein Plan warum ich das so gemacht habe un ddas Array darüber laufen lasse!
War eien Möglichkeit die ichausprobiert habe...
Das ist ne ziemlich heftige Sache für mich schon dieses Arry zu rallen..?! *doof schau*
Aber auf diese Art eine CSV zu importieren ist so ziemlich genau das was ich wollte..
Wenn ich das richtig gelesen habe, wird eine Tabelle zum Import erstellt?!
Oder wie läuft das?
Was ist wenn die Tabelle merh doer weniger Spalten hat als die CSV Datei?
Gruss
Lars
grayfox - Mi 01.09.04 12:53
hallo lars!
na, dann hab ich doch mal den daumen genau auf den nagel getroffen! ;)
Zitat: |
wird eine Tabelle zum Import erstellt |
nein, die tabelle muss schon bestehen - falls du eine neue tabelle erstellen willst (musst), dann --> [suchen] --> [CreateTable] bzw in der delphi-hilfe findest du auch ein beispiel dazu
Zitat: |
Oder wie läuft das? |
das prog iteriert durch das csv file, liest eine zeile ein, zerlegt sie in einzelfelder und befüllt die tabelle
Zitat: |
Was ist wenn die Tabelle mehr doer weniger Spalten hat als die CSV Datei? |
dann baust du die zerlegeroutine um ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| aFeldNr:= 0; aTrennPos:= Pos(';',instring); table1.Append; while if aTrennPos > 0 do begin inc(aFeldNr); aTempStr:= Copy(instring,1,aTrennPos-1); case aFeldNr of 1: table1.FieldByName('ID').asInteger:= StrToInt(aTempStr); 2: table1.FieldByName('Bezeichnung').asString:= aTempStr; 4: usw, usf.... end; Delete(instring,1,aTrennPos+1); aTrennPos:= Pos(';',instring) end table1.Post |
mfg, stefan
NoEon - Mi 01.09.04 13:21
hmm das klingt interessant!
Kannst Du öfter mal einen Blick auf dieses Postimg werfen?
Das wäre ziemlich genial.
Am genialsten wäre die Methode das ich mir diese CSV Datei nehme.
Daruaf hin die Headerspalte auslese und auf dieser Spalten Basis meine Paradox Tabelle bauen kann!
An dieser Stelle kommt wieder....
Wie geht das?!
Gruss
lars
NoEon - Mi 01.09.04 15:54
also,
ich muss ja die Tabellen erstellen, also mus ich zuerst wissen, wie viele Spalten hat die CSV Datei
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var T: TextFile; instring: String; aTrennPos: ShortInt; aTempStr: String; Counter: LongInt; aFeldNr: ShortInt; aFilename : string; aCounter: integer; begin
with para_temp1 do begin Active := False; DatabaseName := 'import'; TableType := ttParadox; TableName := 'para_temp1';
if not Table1.Exists then begin with FieldDefs do begin Clear
CSV_Datei_Spalten.colcount := para_temp1.FieldCount; for i := 0 to CSV_Datei_Spalten.fieldcount -0 do CSV_Datei_Spalten.cells[0,i] := para_temp1.fields[i].fieldname; |
das wäre jetzt mein ansatz das sich an Stefans Beispiel mit den oben genannten Variablen anlehnt!
Es muss doch eine solche schleifduchlaufen oder bin ich auf dem Holzweg?
gruss
lars
grayfox - Mi 01.09.04 18:17
hallo lars!
Delphi-Quelltext
1: 2: 3: 4: 5:
| if not Table1.Exists then begin with FieldDefs do begin Clear;
--> CSV_Datei_Spalten.colcount := para_temp1.FieldCount; |
1. hat die csvdatei keine eigenschaft colcount...
2. ist die tabelle noch nicht erstellt, daher kann der table mit 'fieldcount' nicht viel anfangen
----------------------------------------------------------------------------------------
programmieren heisst auch denken und nicht nur bilderl herumschubsen ;)
----------------------------------------------------------------------------------------
1) womit sind die einzelnen felder im csv-file unterteilt?
die trennzeichen zählen könnte dich schon ein gutes stück weiterbringen
bitte, was ist das -->
Zitat: |
CSV_Datei_Spalten.colcount |
oder das -->
Zitat: |
CSV_Datei_Spalten.cells[0,i] |
[/code]
ist CSV_Datei_Spalten ein stringgrid?
2)
Zitat: |
Es muss doch eine solche schleifduchlaufen |
tu nicht schon herumschleifen, sondern überleg dir, woher du die feldbezeichnung, die feldtypen, längen, etc für deine tabelle nehmen willst *g*
mfg, stefan
grayfox - Mi 01.09.04 18:25
Zitat: |
Daruaf hin die Headerspalte auslese und auf dieser Spalten Basis meine Paradox Tabelle bauen kann!
An dieser Stelle kommt wieder....
Wie geht das?!
|
du könntest dir zb ein eigenes csv-format erstellen
in der ersten zeile stehen die feldnamen, in der zweiten die feldtypen, usw...
es kommt nur drauf an, wie flexibel du beim import sein willst/musst.
normalerweise steht aber die tabellenstruktur fest und du kannst dir diese verrenkungen ersparen.
in meinen csm-dateien findest du in der ersten zeile die anzahl der zeilen und spalten
darunter die feldbezeichnungen und in der dritten zeile die breite der spalten im string-
grid, da ich damit vorwiegend mit stringgrids arbeite
mfg, stefan
ps: du darfst dir auch selbst löstungswege überlegen. schon klar, das man am beginn etliche leere kilometer zurücklegt, aber nur bekommt man dadurch mehr erfahrung, als wenn man vorgefertigte routinen übernimmt
NoEon - Fr 03.09.04 08:24
hi Stafan,
danke für die Anregungen, gedanklich bringen die mich ein ganzes Stück weiter.
Wie Du schon sagst "Erfahrung".
Auf fertige Routinen habe ich auch keine Lust.
Selber Hirnschmalz das find ich auch ok.
Nur mein Problem ist. Ich bin Azubi, sitze hier ganz alleine. Und von dem was ich hier mache hat niemand auch nur einen blassen schimmer!! D.H. ich sitz mit Delphi /Psacal hier alleine!
Keiner hilft, stellt Fragen oder gibt mal hilfestellungen!
Das ist ziemlich ätzend.
ich kann ja nicht mal schauen ob mein Lösungsansatz in die richtige Richtung geht.
Aso: zur Dynamischen erzeugung der Tabellen.
Ein eigenes Format wollte ich nicht entwickel, ich wollte mir die Option schaffen das alles Felder alphanummerisch sind und 255 Zeichen "vertragen"
Ich muss jetzt mal wieder reinkommen.
Gestern hatte ich ein Problem da sich nicht lösen kann.
Ein merkwüriger Debug Fehler! Kein Plan was Delphi von mir will! :-(
Wenn es was nützt dann stell ich das Programm mal zum Download zur verfügung?! Wegen des Fehlers!
Gruss
Lars
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!