Zápis struktury či datového typu binárně do souboru – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zápis struktury či datového typu binárně do souboru – Delphi – Fórum – Programujte.comZápis struktury či datového typu binárně do souboru – Delphi – Fórum – Programujte.com

 

oxidián0
Grafoman
18. 4. 2020   #1
-
0
-

 Mám dva možné typy

type TDATE1 = record
  dates: Array[0..2] of Longint;
end;

type TDATE2 = record
  dates: Array[0..7] of Longint;
end;

A nějakou proměnnou var records = Array of TDATE1; či var records = Array of TDATE2;

Každé datum v poli .dates má zaznamenávat kdy bylo dané slovíčko naposled testováno na dané úrovni (je 8 úrovní obtížnosti).

Takže když mám tyto data v records připravená, jak bych je měl uložit do souboru?

Za druhé pokud bych to ještě rozšíšil na:

TYPE TRECORDS1 = record
  items: word;
  records: Array of TDATE1;
end;

TYPE TRECORDS2 = record
  items: word;
  records: Array of TDATE2;
end;
var records1: TRECORDS1;
var records2: TRECORDS2;


Tak abych byl schopen hned ze souboru ze začátku načíst číslo počtu položek, bylo by to fajn.

Bylo by možné sem uvést celé řešení? Pro dephi 7.

Nahlásit jako SPAM
IP: 89.176.180.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 4. 2020   #2
-
0
-

Určitě bude existovat nějaká pěkná serializační knihvna, ale nevím teda jak pro D7. Při nejhorším prostě napiš pár funkcí.

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1891 příspěvků
18. 4. 2020   #3
-
0
-

Tohle je do texťádku, ale na tom nesejde. 

type TDATE1 = record
  dates: Array[0..2] of Longint;
  procedure save(var f: text);
end;

TYPE TRECORDS1 = record
  items: word;
  records: Array of TDATE1;
  procedure save(var f: text);
end;

procedure TDATE1.save(var f: text);
var
  i: integer;
begin
  for i:=low(dates) to high(dates) do
    writeln(f, dates[i]);
end;

procedure TRECORDS1.save(var f: text);
var
  i: integer;
begin
  writeln(f, items);
  writeln(f, length(records));
  for i:=0 to high(records) do
    records[i].save(f);
end;

var
  f: Text;
...
assignfile(f, 'data.txt');
rewrite(f);
records1.save(f);
closefile(f);
Nahlásit jako SPAM
IP: 213.211.51.–
oxidián0
Grafoman
21. 4. 2020   #4
-
0
-

#3 gna
Díky. A jsi si jistý, že by to mělo fungovat i na D7?

Mám chybu: end expected but procedure found

Nahlásit jako SPAM
IP: 89.176.180.–
Jerry
~ Anonymní uživatel
512 příspěvků
21. 4. 2020   #5
-
0
-

#4 oxidián
no musíš to upravit a dát tam

begin

end.

aby to fungovalo ne ??? .. ježiš ...

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:4c68:29c6:a9f1:4e4a...–
gna
~ Anonymní uživatel
1891 příspěvků
22. 4. 2020   #6
-
0
-

Tipuju, že mu vadí procedure v deklaraci toho recordu. Delphi by to mělo umět, ale nevím od jaké verze.

Pokud D7 neumí recordy s metodami, tak to holt napiš jako samostatnou funkci. Nebo místo recordu použij třídu.

Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
22. 4. 2020   #7
-
0
-

Stejně je zvláštní, když v dnešní době někdo řeší ukládání binárních dat. Buď je serializuji, anebo je hodím do databáze. Obojí je výhodnější než vlastní binární formát.

Nahlásit jako SPAM
IP: 37.188.180.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 10 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý