Problem mit Speichern von Var Record

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Erwin
Beiträge: 225
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 16.04 / x86_64_linux-gtk 2 / L 1.6+dfsg-1 / FPC 3.0.0

Problem mit Speichern von Var Record

Beitrag von Erwin »

Hallo.

Bis jetzt hatte ich Type Records genutzt/erstellt. Wusste vorher ja nicht mal, dass es auch mit Var geht. Var Records sollen aber angeblich besser (?) sein, als Type Record. Außerdem nutzte ich meinen Record nur einmal (also keine Vermehrung des Records vorgesehen). Und es scheint mir direkter zu sein.

Der Punkt ist: Seit ich mein Record von Type zu Var ändere, kann ich den Record nicht mehr speichern.

Vorher konnte ich mit

Code: Alles auswählen

var
  MeinRecord:TMyRecord;
  SpeichernFileRecord: file of TMyRecord;
die nötigen File-Vorrausetzung(?) für die Operationen zum Abspeichern anlegen:

Code: Alles auswählen

AssignFile(SpeichernFileRecord, SpeicherPfadUndDateinameVar);
Rewrite(SpeichernFileRecord);
Write(SpeichernFileRecord, MeinRecord);
CloseFile(SpeichernFileRecord)
Die Probleme treten aber (bis jetzt?) nur beim ersten Code-Block auf. Er meldet den Fehler 'Type identifer expected'. Mein Englisch ist leider schlecht, aber so aus dem Bauch heraus: Er bemängelt falschen Tpye, er kann ihn nicht richtig erkennen. Wie kann man das beheben?
Ich hatte es ja bereits zum einem mit folgendem naheliegendem versucht:

Code: Alles auswählen

var
// MeinRecord:TMyRecord; - Da es kein Type mehr ist, brauche ich das ja nicht mehr.
// Änderte auch den Namen des Records (bzw. in dem Beispiel)
// von TMyRecord in VarMeinRecord
  SpeichernFileRecord: file of VarMeinRecord;

// ODER
  SpeichernFileRecord:VarMeinRecord;
// aber auch dies funktionierte nicht:
'Error in Type defination' bemängelt er aber beim Zweiten, was (der 2. Versuch) in einem Thread als Lösung genannt wurde?

Danke.
Win 7 / Lazarus 1.6 / FP 3.0.0 / x86_64-win64-win32/win64

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2284
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit Speichern von Var Record

Beitrag von m.fuchs »

Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33
Var Records sollen aber angeblich besser (?) sein, als Type Record.

Wer sagt das und was soll die Begründung sein?
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33
Außerdem nutzte ich meinen Record nur einmal

Nein, du willst den Typen zweimal nutzen:
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33

Code: Alles auswählen

var
  MeinRecord:TMyRecord;
  SpeichernFileRecord: file of TMyRecord;
Einmal für deine Variable und einmal für die Typisierung der File.

Du wirst meiner Meinung nach nicht um die Nutzung eines definierten Typs herumkommen.
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33
'Error in Type defination' bemängelt er aber beim Zweiten, was (der 2. Versuch) in einem Thread als Lösung genannt wurde?
Hast du mal einen Link zu diesem Thread?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Mathias
Beiträge: 5039
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunc)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Problem mit Speichern von Var Record

Beitrag von Mathias »

Ich würde mir angewöhnen, eine file Variable mit einem "f" zu deklarieren.
Dann weist du immer was zusammengehört.

Code: Alles auswählen

type
  TMyRecord = record
    a, b, c: byte;
  end;
var
  MyRecord: TMyRecord;
  fMyRecord: file of TMyRecord;  
Mit Lazarus sehe ich gün
Mit Java und C/C++ sehe ich rot

Erwin
Beiträge: 225
Registriert: Mi 16. Sep 2009, 14:15
OS, Lazarus, FPC: Xubuntu 16.04 / x86_64_linux-gtk 2 / L 1.6+dfsg-1 / FPC 3.0.0

Re: Problem mit Speichern von Var Record

Beitrag von Erwin »

m.fuchs hat geschrieben:
Fr 12. Jun 2020, 19:08
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33
Var Records sollen aber angeblich besser (?) sein, als Type Record.
Wer sagt das und was soll die Begründung sein?
Wo ich das gelesen habe, weiß ich nicht mehr. Weiß nur noch den Sinn:
'Type ist nicht so sicher wie Var, aber anderseits sei bis jetzt nichts bekannt, dass Type ärger gemacht habe.'
So, oder so ähnlich Äußerte sich Jemand dazu. Eine ... Begründung dafür ... kann ich mich jetzt nicht erinnern, dass er da was erwähnte.'
Aber da man Records auch mit Var erstellen kann, scheint mir es schon logisch, dass Var Sinnvoller ist, weil man das Origanl nutzen kann, und nicht die Kopie nutzt. ?

m.fuchs hat geschrieben:
Fr 12. Jun 2020, 19:08
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33
Außerdem nutzte ich meinen Record nur einmal

Nein, du willst den Typen zweimal nutzen:
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33

Code: Alles auswählen

var
  MeinRecord:TMyRecord;
  SpeichernFileRecord: file of TMyRecord;
Einmal für deine Variable und einmal für die Typisierung der File.

Du wirst meiner Meinung nach nicht um die Nutzung eines definierten Typs herumkommen.
Da dreht man sich aber im Kreis. Weil man Var-Records schwerlich (nicht?) abspeichern kann, kommt man um 2-Fach-Nutzung nicht herum, wenn man Records speichern will. Aber wenn man nur Type-Records einfach Speichern kann ... bleibt mir nichts anderes übrig. Würde auch erklären, wieso ich bei der Suche wegen meinen Problem, immer nur Type-Records vorfand.
m.fuchs hat geschrieben:
Fr 12. Jun 2020, 19:08
Erwin hat geschrieben:
Fr 12. Jun 2020, 18:33
'Error in Type defination' bemängelt er aber beim Zweiten, was (der 2. Versuch) in einem Thread als Lösung genannt wurde?
Hast du mal einen Link zu diesem Thread?
Zumindest habe ich es so verstanden, wenn der Record Rezept eine Variable sei, dass dann auch anders geht: 3. Beitrag.
Win 7 / Lazarus 1.6 / FP 3.0.0 / x86_64-win64-win32/win64

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2284
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.8, FPC 3.0.4)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Problem mit Speichern von Var Record

Beitrag von m.fuchs »

Erwin hat geschrieben:
Fr 12. Jun 2020, 19:58
Wo ich das gelesen habe, weiß ich nicht mehr. Weiß nur noch den Sinn:
'Type ist nicht so sicher wie Var, aber anderseits sei bis jetzt nichts bekannt, dass Type ärger gemacht habe.'
So, oder so ähnlich Äußerte sich Jemand dazu. Eine ... Begründung dafür ... kann ich mich jetzt nicht erinnern, dass er da was erwähnte.'
Falls du noch einmal darüber stolperst und das tatsächlich da steht, setz die entsprechende Seite oder das Buch auf eine Blackliste.
Das wäre vollkommener Unsinn.
Erwin hat geschrieben:
Fr 12. Jun 2020, 19:58
Aber da man Records auch mit Var erstellen kann, scheint mir es schon logisch, dass Var Sinnvoller ist, weil man das Origanl nutzen kann, und nicht die Kopie nutzt. ?
Das hat nichts mit Original und Kopie zu tun. In diesem Falle legst du mit type einen Bauplan für deinen Record fest und gibst ihm einen Namen.
Wenn du deine Record-Definition innerhalb der var-Deklaration machst, legst du auch einen Bauplan fest, gibst dem Plan aber keinen Namen.
Wenn man keinen Namen hat, kann man den Bauplan halt nicht wieder nutzen. Aber genau das willst du später mit file of machen.
Erwin hat geschrieben:
Fr 12. Jun 2020, 19:58
Da dreht man sich aber im Kreis. Weil man Var-Records schwerlich (nicht?) abspeichern kann, kommt man um 2-Fach-Nutzung nicht herum, wenn man Records speichern will. Aber wenn man nur Type-Records einfach Speichern kann ... bleibt mir nichts anderes übrig. Würde auch erklären, wieso ich bei der Suche wegen meinen Problem, immer nur Type-Records vorfand.
Es gibt eigentlich nur einen Grund warum man die Record-Definition direkt unter var macht: man will eine ganz schnelle, schmutzige, einmalverwendbare Lösung.
Da schnelle, schmutzige, einmalverwendbare Lösungen BÖSE™ sind, gibt es also gar keinen Grund das zu machen. :)
Erwin hat geschrieben:
Fr 12. Jun 2020, 19:58
Zumindest habe ich es so verstanden, wenn der Record Rezept eine Variable sei, dass dann auch anders geht: 3. Beitrag.
Nö, das steht da absolut nicht, das ist ein anderes Problem.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten