![]() |
Datenbank: ?? • Zugriff über: ??
Record in .csv Datei schreiben
Hallo,
ich möchte gerne einen Record
Delphi-Quellcode:
den ich über die USB Schnittstelle einlese in eine .csv Datei speichern.
TPCANMsg = record
ID: LongWord; // 11/29 Bit-Kennung MSGTYPE: Byte; // Bits aus MSGTYPE_* LEN: Byte; // Anzahl der gueltigen Daten-Bytes (1..8) DATA: array[0..7] of Byte; // Daten-Bytes 0..7 end; Die Datei kann ich anlegen mit
Delphi-Quellcode:
aber wie schreibe ich die Einträge??
AssignFile(datei,'c:\test.cvs'); //Datei erstellen
If FileExists('c:\test.cvs')then ReSet(datei) //Datei öffnen und dabei alte Daten löschen else ReWrite(datei); //Datei öffnen Geht das schnell?? Bekomme im worst case Fall alle ms einen record. Danke |
Re: Record in .csv Datei schreiben
du kannst den record mit "write(datei, record)" reinschreiben.
allerdings muss die datei dann auch vom selben type sein. also "datei: file of recordtype"; |
Re: Record in .csv Datei schreiben
Hab ich auch so versucht.
Die Datei ist auch als Excel Datei gekennzeichnet, aber beim öffnen kommt eine Fehlermeldung: Es handelt sich um ein nicht erkennbares fromat. Hab die Datei auch so konfiguriert:
Delphi-Quellcode:
Was hab ich falsch gemacht??
datei: file of TPCANMsg;
Werden die Zeilen automatisch nach jedem Eintrag hochgezählt, oder muss ich da noch was machen?? |
Re: Record in .csv Datei schreiben
1. Die Datei muss die Endung CSV haben.
2. Der Code muss etwa so aussehen:
Delphi-Quellcode:
Ungetestet und nur schnell mal reingehackt. Und auch nur für einen Datensatz.
type
TPCANMsg = record ID: LongWord; // 11/29 Bit-Kennung MSGTYPE: Byte; // Bits aus MSGTYPE_* LEN: Byte; // Anzahl der gueltigen Daten-Bytes (1..8) DATA: array[0..7] of Byte; // Daten-Bytes 0..7 end; var rec : TPCANMsg; procedure RecordSchreiben; var datei : TextFile; begin AssignFile(datei,'c:\test.cvs'); //Datei erstellen If FileExists('c:\test.cvs')then ReSet(datei) //Datei öffnen und dabei alte Daten löschen else ReWrite(datei); //Datei öffnen writeln(datei, IntToStr(ID)+';'+IntToStr(MSGTYPE)+';'+IntToStr(LEN)+';'+IntToStr(ID)+';'+ IntToStr(DATA[0])+';'+IntToStr(DATA[1])+';'++IntToStr(DATA[2])+';'+IntToStr(DATA[3])+';' +IntToStr(DATA[4])+';'+IntToStr(DATA[5])+';'+IntToStr(DATA[6])+';'+IntToStr(DATA[7])); closefile(datei); end; Für mehrere Datensätze musst du eine Schleife basteln oder statt Reset eine AppendFile nehmen. |
Re: Record in .csv Datei schreiben
hallo!
möchte in einer zeile 3 spalten mit daten befüllen und dann in die nächste zeile wechseln diese wieder mit 3 zeilen zu befüllen usw. jedoch werden nach der zweiten zeile alle restlichen daten in eine spalte geschrieben und durch ein viereck (carriage return) dargestellt, hab schon alles versucht, sogar ein steuerzeichung für das carriage return einzugeben (wie zb. in c/c++ '\n') was jedoch auch nicht wirklich funktioniert hat. hab mein csv-testfile als attachment hinzugefügt... kleiner auszug aus meinem quellcode:
Delphi-Quellcode:
danke im voraus!
while (ws.Cells.Item[i_i,i_j].text <> '') do
begin str := ''; str :=ws.Cells.Item[i_i,i_j+1].Text; if (i_count > 1) then str_tmp := str_tmp + ';' +ws.Cells.Item[i_i,i_j].Text else str_tmp := ws.Cells.Item[i_i,i_j].Text; if (i_count = 3) then i_count:=0; if (i_j mod 3 = 0) then begin memo1.Lines.Add(str_tmp); assignfile(f_datei,s1); append(f_datei); writeln(f_datei,str_tmp); closefile(f_datei); str_tmp := ''; end; if (str = '') then begin i_j := 0; inc(i_i); end; inc(i_j); inc(i_count); end; |
Re: Record in .csv Datei schreiben
kann mir dabei keiner weiterhelfen?
|
Re: Record in .csv Datei schreiben
da sind doch schon n paar Vorschläge :gruebel:
kannst ja auch ne ini (TIniFile easy 2 handle) benutzen wenns nicht unbedingt CSV sein muß ... |
Re: Record in .csv Datei schreiben
das problem ist, dass der import zur zeit nur mit csv dateien funktioniert...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz