AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi typisierte Datei zum Speichern fehlerhaft
Thema durchsuchen
Ansicht
Themen-Optionen

typisierte Datei zum Speichern fehlerhaft

Ein Thema von Technikus · begonnen am 16. Aug 2005 · letzter Beitrag vom 22. Aug 2005
Antwort Antwort
Seite 3 von 3     123   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#21

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 17:42
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:
procedure TForm1.Button1_SpeichernClick(Sender: TObject);
var Messwert: TLeistung;
    Buffer: SysUtils.PByteArray;
begin
  Buffer := @Messung;
  ...
  fs.WriteBuffer(Buffer^, Sizeof(Messung));
  ...
end;
marabu
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#22

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 18:10
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:
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;
Benutzt werden kann das so: (Ist Im EndEffekt dein Code )
Delphi-Quellcode:
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;
Da gibt es kein Recordgefriemel, kein absolute, keine Compiler zickereien und keinen Byten array...

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.
  Mit Zitat antworten Zitat
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#23

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 18:17
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:

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;
Gruß
Technikus
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#24

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 18:41
Zitat von Technikus:
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
Es ist alles in Ordnung, Technikus. Wer Hilfe braucht, bekommt sie. Manchmal fällt die Einschätzung schwer, worauf man beim Hilfesuchenden aufbauen kann, aber wir lernen alle hinzu - so oder so.

Zitat von Technikus:
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..."
Es hilft manchmal, wenn man weiß mit welcher Delphi-Version der Hilfesuchende arbeitet. Diese Angabe kannst du in deinem Benutzerprofil hier in der DP eintragen.

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:
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;
...
marabu
  Mit Zitat antworten Zitat
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#25

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 18:54
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;
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#26

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 19:13
Technikus, bei mir regt sich der Verdacht, dass du das Projekt nicht als VCL WIN32 angelegt hast.

Kann das sein?

marabu
  Mit Zitat antworten Zitat
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#27

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 19:32
Hallo marabu!
Sollte ich dir das gesamte Projekt gezipt per mail mal zuschicken?
Gruß
Technikus
  Mit Zitat antworten Zitat
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#28

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 19:58
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
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#29

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 21:15
Schau dir mal diesen Post von Robert_G an, dort erläutert er eine neuartige Technik, mit der du deine Daten speichern kannst, mit folgenden Vorteilen:

Einfach unkompliziert

Einfach erweiterbar

abwärtskompatibel, wenn bspw. ein feld hinzugefügt wird

Du kannst lange Strings verwenden

Du kannst verschachtelte Daten speichern, wie z.B. viele Messreihen (jede Beschreibung & Co. + Messwerte)

(Manche müssen eben zu ihrem Glück gezwungen werden ^^)
  Mit Zitat antworten Zitat
Technikus

Registriert seit: 2. Aug 2005
46 Beiträge
 
#30

Re: typisierte Datei zum Speichern fehlerhaft

  Alt 22. Aug 2005, 21:22
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz