![]() |
Re: typisierte Datei zum Speichern fehlerhaft
Zitat:
Wenn du's anschaust... da wärst du bestimmt seblst drauf gekommen.
Delphi-Quellcode:
procedure TForm1.Button1_SpeichernClick(Sender: TObject);
var Messwert: TLeistung; i, anzahl: integer; fs : TFileStream; begin anzahl:=StrToInt(Edit3_Eingabe_anzahl.Text); fs := TFileStream.Create('solarz.dat', fmCreate); try for i:= 1 to anzahl do with Messwert do begin nr:= i; Spannung:= StrToFloat(StringGrid1.Cells[1,i]); Strom:= StrToFloat (StringGrid1.Cells [2,i]); Leistung:=StrToFloat (StringGrid1.Cells [3,i]); end; fs.WriteBuffer(Messwert, Sizeof(Messwert)); finally fs.Free; end; end; |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo shmia,
ich habe den Code geändert und in der Zeile
Delphi-Quellcode:
die Fehlermeldung: Es gibt keine überladene Version non 'WriteBuffer', die man mit diesen Argumenten aufrufen kann.
fs.WriteBuffer(Messwert, Sizeof(Messwert));
Gruß Technikus |
Re: typisierte Datei zum Speichern fehlerhaft
fs.writesbuffer + F1 und lesen
|
Re: typisierte Datei zum Speichern fehlerhaft
Hallo!
Danke nochmal an shmia ich bin mit meinem Problem noch nicht einen cm weitergekommen.[Delphi 2005 Prof.] Kann mir bitte jemand helfen? Das Compilieren hängt an der Stelle fs.writebuffer...
Delphi-Quellcode:
In der Hilfe finde ich z.B. den Syntax
type TLeistung= record
nr: byte; Spannung, Strom, Leistung: double; end; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; i, anzahl: integer; fs : TFileStream; begin anzahl:=StrToInt(Edit3_Eingabe_anzahl.Text); fs := TFileStream.Create('solarz.dat', fmCreate); try for i:= 1 to anzahl do with Messwert do begin nr:= i; Spannung:= StrToFloat(StringGrid1.Cells[1,i]); Strom:= StrToFloat (StringGrid1.Cells [2,i]); Leistung:=StrToFloat (StringGrid1.Cells [3,i]); end; fs.WriteBuffer(Messwert,Sizeof(Messwert)); finally fs.Free; end; end; [Delphi] public procedure WriteBuffer(const Buffer: array of Byte, Count: Integer); Damit kann ich aber nichts anfangen. Vielleicht weiß jemand, was ich wie ändern muss. Danke Technikus |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo Technikus,
ich finde deine binäre Ausgabe nicht gut - die Ausgabe im CSV-Format oder als XML-Datei fände ich dem Anwendungsfall angemessener - aber so sollte es funktionieren:
Delphi-Quellcode:
Grüße vom marabu
type
TLeistung= record nr: byte; Spannung, Strom, Leistung: double; end; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; Buffer: array [1..SizeOf(TLeistung)] of byte absolute Messwert; ... begin ... fs.WriteBuffer(Buffer, Sizeof(Buffer)); ... end; |
Re: typisierte Datei zum Speichern fehlerhaft
Zitat:
Auf dem Weg dahin wäre vielleicht DFM ganz brauchbar. Ohne das öffentliche Interface des alten Records zu ändern wäre das möglich:
Delphi-Quellcode:
Nun hast du eine laufende Lösung bis du XML unterstützen willst.
interface
uses Classes, dpCollection; type TLeistung = class(TCollectionItem) private fSpannung : double; fLeistung : double; fStrom : double; fNr : Byte; published property Nr : Byte read fNr write fNr; property Spannung : double read fSpannung write fSpannung; property Strom : double read fStrom write fStrom; property Leistung : double read fLeistung write fLeistung; end; {$DEFINE TYPED_DP_COLLECTION_TEMPLATE} _COLLECTION_ITEM_ = TLeistung; {$INCLUDE dpCollection_tmpl.pas} TLeistungCollection = class(_COLLECTION_) end; implementation {$INCLUDE dpCollection_tmpl.pas} end. Vielleicht baut das einer der "neuen dpCollection-Fritzen" hier in der Zwischenzeit ein. ;)
Delphi-Quellcode:
Nicht gerade elegant, allemale netter als all das record-Gefriemel. :)
var
Leistung : TLeistung; Leistungen : TLeistungCollection; begin Leistungen := TLeistungCollection.Create(); try for i := 1 to 10 do begin Leistung := Leistungen.Add(); Leistung.Nr := i; Leistung.Spannung := ...; end; Leistungen.SaveToFile('Miep.dfm'); finally Leistungen.Free(); end; btw: Die dpCollection gibt's hier: ![]() |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo!
Komme gerade erst von Arbeit, deshalb meine Verspätung. Danke erst mal für die Antworten . marabu--> ich habe den Quelltext so geändert, aber jetzt gibt es eine neue Fehlermeldung:siehe Zeile 8. Kann mir jemand bei der Fehlersuche helfen?
Delphi-Quellcode:
Gruß
type TLeistung= record
nr: byte; Spannung, Strom, Leistung: double; end; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; Buffer: array [1..SizeOf(TLeistung)] of byte absolute Messwert; {E2026 Konstantenausdruck erwartet} i, anzahl: integer; fs : TFileStream; begin anzahl:=StrToInt(Edit3_Eingabe_anzahl.Text); fs := TFileStream.Create('solarz.dat', fmCreate); try for i:= 1 to anzahl do with Messwert do begin nr:= i; Spannung:= StrToFloat(StringGrid1.Cells[1,i]); Strom:= StrToFloat (StringGrid1.Cells [2,i]); Leistung:=StrToFloat (StringGrid1.Cells [3,i]); end; fs.WriteBuffer(Buffer,Sizeof(Buffer)); finally fs.Free; end; end; Technikus |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo Technikus,
dein Compiler mag die Art nicht, in der ich die Obergrenze des array angegeben habe. Entweder du findest den Compilerschalter, der den Code so akzeptiert, wie ich ihn dir gegeben habe, oder du änderst den Code nochmal ab:
Delphi-Quellcode:
Grüße vom marabu
procedure TForm1.Button1_SpeichernClick(Sender: TObject);
var Messwert: TLeistung; Buffer: array [1..32] of byte absolute Messwert; ... begin ... fs.WriteBuffer(Buffer, Sizeof(Messwert)); ... |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo marabu,
jetzt meldet er, dass er nicht mit dem "absolute" zurechkommt.
Delphi-Quellcode:
Gruß Technikus
type TLeistung= record
nr: byte; Spannung, Strom, Leistung: double; end; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; Buffer: array [1..32] of byte absolute Messwert; {E1030 Ungültige Compileranweisung: 'absolute'} i, anzahl: integer; fs : TFileStream; begin anzahl:=StrToInt(Edit3_Eingabe_anzahl.Text); fs := TFileStream.Create('solarz.dat', fmCreate); try for i:= 1 to anzahl do with Messwert do begin nr:= i; Spannung:= StrToFloat(StringGrid1.Cells[1,i]); Strom:= StrToFloat (StringGrid1.Cells [2,i]); Leistung:=StrToFloat (StringGrid1.Cells [3,i]); end; fs.WriteBuffer(Buffer,Sizeof(Buffer)); finally fs.Free; end; end; |
Re: typisierte Datei zum Speichern fehlerhaft
Welche Delphiversion hast du? Keine Probleme mit D6 und D2005.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:57 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