Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kako ovo odraditi (strukture i fajlovi)

[es] :: Pascal / Delphi / Kylix :: Kako ovo odraditi (strukture i fajlovi)

[ Pregleda: 1590 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Kako ovo odraditi (strukture i fajlovi)21.08.2006. u 16:24 - pre 186 meseci
Code:

type
  TStruktura1 : record
                 NekiString : String[20];
                 NekiBroj   : Integer;
               end;
var
  SFile : File of TStruktura1;
  str1  : TStruktura1;

begin
  AssignFile(SFile, 'C:\test.dat');
  Rewrite(SFile);
    Write(SFile, str1);
  CloseFile(SFile);
end.


^^ Ovaj kod radi ok. E sad, meni treba da mogu da zapisem dve ili vise _razlicitih_ struktura u jedan fajl i da to posle normalno iscitam. Recimo imam TStruktura1 i TStruktura2 i da mogu da zapisem obe strukture u jedan fajl. Moze li ovo ikako da se odradi ?
 
Odgovor na temu

aleksandarpopov
IT consultant
Senta

Član broj: 57172
Poruke: 484
*.sabotronic.co.yu.

Sajt: www.linkedin.com/in/aleks..


Profil

icon Re: Kako ovo odraditi (strukture i fajlovi)21.08.2006. u 17:09 - pre 186 meseci
Odredis koliko ti bajtova zauzima struktura pa upises u fajl, pa koliko bajtova ima druga struktura pa upises, kod iscitavanja iz fajla uzems broj bajtova za strukturu koju citas, pa toliko bajtova iscitas. Ako imas neki redosled kako ces ih upisivati onda nije problem inace ... malo je problem, mozda neki marker za strukturu koja sledi...
Nije bas "normalno" i elegantno resenje ali... kako bi drugacije?
RTFM
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Kako ovo odraditi (strukture i fajlovi)21.08.2006. u 20:29 - pre 186 meseci
Hvala, to je to.
 
Odgovor na temu

Vdjuric
Vladimir Djuric
student
Beograd

Član broj: 20863
Poruke: 64
*.wireless.org.yu.

Sajt: www.marettasoftware.com


Profil

icon Re: Kako ovo odraditi (strukture i fajlovi)22.08.2006. u 23:36 - pre 185 meseci
najbolje ti je da koristis Blockread / blockwrite za zapisivanje razlicitih struktura u fajl...Otprilike ovako:
------------
Var
FOut :File;
St1 :TStruktura1;
St2 :TStruktura2;
BlockSize, BWritten :LongInt;
Begin
AssignFile(FOut, 'C:\proba.dat');
IoResult; {$I-} Rewrite(FOut, 1); {$I+}
If (IoResult <> 0) Then; //...... ... ... ...
BlockSize:=SizeOf(TStruktura1); {$I-} BlockWrite(FOut, St1, BlockSize, BWritten); {$I+}
If (IoResult <> 0)Or(BWritten <> BlockSize) Then; //Doslo je do greske...
BlockSize:=SizeOf(TStruktura2); {$I-} BlockWrite(FOut, St2, BlockSize, BWritten); {$I+}
If (IoResult <> 0)Or(BWritten <> BlockSize) Then; //Doslo je do greske...
CloseFile(FOut);
End;
------------

Poz
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: Kako ovo odraditi (strukture i fajlovi)23.08.2006. u 00:08 - pre 185 meseci
Mnogo ti bre nabijen kod
Evo kako sam odradio, u sustini se svodi na isto :

Code:

procedure TMainWindow.LoadSetup(const AFileName : String);
var
  SFile    : File;
  brsetup  : TBRSetup;
  cbReaded : Integer;
begin
  AssignFile(SFile, AFileName);
  Reset(SFile, 1);
    BlockRead(SFile, percmarkers, SizeOf(TMarkers), cbReaded);
    BlockRead(SFile, brsetup, SizeOf(TBRSetup), cbReaded);
  CloseFile(SFile);
end;
 
Odgovor na temu

_v!rus_
BGD

Član broj: 40451
Poruke: 313
*.dsl.siol.net.



+1 Profil

icon Re: Kako ovo odraditi (strukture i fajlovi)28.08.2006. u 23:35 - pre 185 meseci
Pa covek ti lepo napisa, sa sve trappovanjem i kontrolom greske, tako se pravilno i radi.

Mada, ako vec koristis Delphi a ne paskal, bolje upotrebljavaj TFileStream.
OOP, nije tipovan tj. mozes da pises i citas sta hoces, a pritom je preko base klase (TStream) kompatibilan sa celim VCL-om, 3rd party bibliotekama, itd., ukratko - standard. Za sve greske ti iskace TException koji uhvatis i obradis sa try..except, ne moras da ukljucujes/iskljucujes IO greske (ono $I+-).

Ceo File tip je obsolete vec jako dugo, ostao je tu samo zbog kompatibilnosti sa paskalom.

Code:

procedure TMainWindow.LoadSetup(const AFileName : String);
var
  SFile    : TFileStream;
  brsetup  : TBRSetup;
begin
  SFile := nil;
  try
    SFile := TFileStream.Create(AFileName, fmOpenRead);
    SFile.Read(brsetup, SizeOf(TBrSetup));
    SFile.Read(percmarkers, SizeOf(TMarkers));
    SFile.Free;
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
      if Assigned(SFile) then
        SFile.Free;
    end;
  end;
end;
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: Kako ovo odraditi (strukture i fajlovi)

[ Pregleda: 1590 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.