![]() |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo Technikus,
dieser thread wird langsam grotesk. Bekommst du keine Hilfestellung über die Online-Hilfe, wenn du F1 drückst und den Cursor auf die Fehlermeldung setzt? Wenn das Schlüsselwort absolute von deinem Compiler (den möchtest du mal in dein DP-Profil eintragen) nicht gemocht wird und du auch keinen Compilerschalter kennst um diese Pingeligkeit abzustellen, dann hilft nur noch das hier:
Delphi-Quellcode:
marabu
procedure TForm1.Button1_SpeichernClick(Sender: TObject);
var Messwert: TLeistung; Buffer: SysUtils.PByteArray; begin Buffer := @Messung; ... fs.WriteBuffer(Buffer^, Sizeof(Messung)); ... end; |
Re: typisierte Datei zum Speichern fehlerhaft
Hmpf...
Ich probier's nochmal... Ich habe das Item etwas angepasst, so dass es einfacher durch Strings zu füllen ist[1], außerdem bekam die Collection eine Überladung von Add, wodurch man easy ein neues Element hinzufügen kann.
Delphi-Quellcode:
Benutzt werden kann das so: (Ist Im EndEffekt dein Code ;) )
interface
uses Classes, dpCollection; type TMesswert = class(TCollectionItem) private fSpannung : double; fLeistung : double; fStrom : double; fNr : Byte; public procedure FromStrings(const aSpannung, aLeistung, aStrom: string); 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_ = TMesswert; {$INCLUDE dpCollection_tmpl.pas} TMesswertCollection = class(_COLLECTION_) public function Add(aNr: Byte; const aSpannung, aLeistung, aStrom: string) : TMesswert; overload; end; implementation uses SysUtils; {$INCLUDE dpCollection_tmpl.pas} { TMesswert } procedure TMesswert.FromStrings(const aSpannung, aLeistung, aStrom: string); begin fSpannung := StrToFloat(aSpannung); fLeistung := StrToFloat(aLeistung); fStrom := StrToFloat(aStrom); end; { TMesswertCollection } function TMesswertCollection.Add(aNr: Byte; const aSpannung, aLeistung, aStrom: string) : TMesswert; begin with inherited Add() do begin Nr := aNr; FromStrings(aSpannung, aLeistung, aStrom); end; end;
Delphi-Quellcode:
Da gibt es kein Recordgefriemel, kein absolute, keine Compiler zickereien und keinen Byten array...
var
Messwerte : TMesswertCollection; i, Anzahl : Integer; begin if not TryStrToInt(AnzahlEdit.Text, Anzahl) then raise EInvalidCast.Create('irgendwas hier') else begin Messwerte := TMesswertCollection.Create(); try with StringGrid do for i := 1 to Anzahl do Messwerte.Add(i, Cells[1, i], Cells[2, i], Cells[3, i]); Messwerte.SaveToFile('solarz.dat'); finally Messwerte.Free(); end; end; end; Auslesen natürlich mit:
Delphi-Quellcode:
Messwerte := TMesswertCollection.Create();
try Messwerte.LoadFromFile('solarz.dat'); for i := 0 to Messwerte.Count - 1 do Messwerte[i]...;// irgendwas mit dem Messwert machen finally Messwerte.Free(); end; [1]du solltest dir aber überlegen, deine Werte _nicht_ im Grid zu halten, sondern dort nur anzuzeigen p.s.: Das Schreiben des Beitrages dauerte doppelt solange, wie das des Codes. Ich bezweifle also, dass es zu "aufwendig" ist. ;) |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo! (Delphi 2005 Prof.)
Da ich mich mit Delphi noch nicht so gut auskenne, bitte ich um Nachsicht. Ich fühle mich langsam schuldig, dass ich euch zur Last falle, vielleicht liegt der Fehler auch weiter oben im Code? Sollte ich den gesamten Quellcode anhängen, den ich bis jetzt in der unit habe? Nochmal zu dem Speicherabschnitt: In der Hilfe finde ich Script, der mir nichts sagt und ich auch nicht verstehe, also ich auch nicht weiß, was ich ändern sollte. marabu, was verstehst du unter "Wenn das Schlüsselwort absolute von deinem Compiler (den möchtest du mal in dein DP-Profil eintragen) nicht gemocht..." ich habe den Quellcode wiederum wie folgt geändert: Fehlermeldung nun: in Zeile 7
Delphi-Quellcode:
Grußtype TLeistung= record nr: byte; Spannung, Strom, Leistung: double; end; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; Buffer: SysUtils.PByteArray; {E2003 Undefinierter Bezeichner: 'PByteArray'} 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 Buffer:=@Messwert; 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(Messwert)); finally fs.Free; end; end; Technikus |
Re: typisierte Datei zum Speichern fehlerhaft
Zitat:
Zitat:
Der aktuelle Fehler deutet darauf hin, dass der bei mir in der unit SysUtils definierte Typ PByteArray bei deiner Delphi-Version woanders steckt oder fehlt. Da könnte dir das weiter helfen:
Delphi-Quellcode:
marabu
type TLeistung= record
nr: byte; Spannung, Strom, Leistung: double; end; TByteArray = array [0..32767] of byte; PByteArray = ^TByteArray; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; Buffer: PByteArray; ... |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo!
Änderung erfolgt- Fehlermeldung auch geändert.
Delphi-Quellcode:
type TLeistung= record
nr: byte; Spannung, Strom, Leistung: double; end; TByteArray= array [0..32767] of byte; PByteArray= ^TByteArray; procedure TForm1.Button1_SpeichernClick(Sender: TObject); var Messwert: TLeistung; Buffer: PByteArray; {E2410 Unsichere Zeigervariablen, Parameter oder Konstanten sind nur in unsicheren Prozeduren zulässig} 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 Buffer:=@Messwert; 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(Messwert)); finally fs.Free; end; end; |
Re: typisierte Datei zum Speichern fehlerhaft
Technikus, bei mir regt sich der Verdacht, dass du das Projekt nicht als VCL WIN32 angelegt hast.
Kann das sein? marabu |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo marabu!
Sollte ich dir das gesamte Projekt gezipt per mail mal zuschicken? Gruß Technikus |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo marabu!
ich glaube , du hast Recht, dass ich die falsche Formularanwendung .NET habe. Ich werde gesamten Code nochmal unter WIN32 einbinden. Und wenn ich soweit bin, werde ich mich nochmal melden. Danke, Danke erstmal bis dahin Gruß Technikus |
Re: typisierte Datei zum Speichern fehlerhaft
Schau dir mal
![]() :arrow: Einfach unkompliziert :arrow: Einfach erweiterbar :arrow: abwärtskompatibel, wenn bspw. ein feld hinzugefügt wird :arrow: Du kannst lange Strings verwenden :arrow: Du kannst verschachtelte Daten speichern, wie z.B. viele Messreihen (jede Beschreibung & Co. + Messwerte) (Manche müssen eben zu ihrem Glück gezwungen werden ^^) |
Re: typisierte Datei zum Speichern fehlerhaft
Hallo!
Ich habe alles nochmal geschrieben. Und jetzt funktioniert es. Jippi Ich möchte mich in aller Form bei euch bedanken. Ich kanns gar nicht laut genug in die Welt schreien. Diesen Fehler werde ich bestimmt nicht ein zweites Mal machen. Danke Bis zum nächsten Problem Technikus |
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