Re: pascal - binarni soubor

From: Mart Spurny (spurnymart@atlas.cz)
Date: 10. 08. 2002, 16:14 CEST


ahoj
nesledoval jsem to od zacatku, ale myslim ze to co potrebujes je zapis do
netypovyho souboru
niz sem neco napsal tak by to melo jit 
martin

<priklad>
program pokus;
var  f:file;
      s1,s2:string;
delka:byte;
zapsano:byte;
begin
  s1:='ab';
  s2:='dcba';

  assign(f,'f.str');
  rewrite(f,1);
  delka:=length(s1)+1;
  blockwrite(f,delka,sizeof(byte),zapsano);
{tohle tady byt nemusi, ale me se to pak lip cte, nemusim se vracet, je to
vetsi o jeden byte na string
   if zapsano<>sizeof(byte) then  - chyba nejde zapsat
 blockwrite(f,s1,delka,zapsano);
  if zapsano<>delka then   chyba nejde zapsat
  close(f);

</priklad>



----- Original Message -----
From: Paco <paco@seznam.cz>
To: <servis-internet@nawebu.cz>
Sent: Friday, August 09, 2002 9:44 PM
Subject: Re: pascal - binarni soubor


> a to me prave zajima!
> nejde nejakou direktivou nebo necim jinym nastavit aby se ukladaly delky
> tech stringu v zavislosti na pouzite delce? martin

Hmm, tys to zjevne nepochopil. File of string je proste
jen standardni typovy soubor, cili soubor zaznamu o pevne
delce, respektive delce odpovidajici pouzitemu typu. Obecne
tedy file of <type> kde type je nejaka datova struktura
(o pevne delce). Je lhostejne, jde-li o nejakou standardni
strukturu jako treba string, nebo explicitne definovany
typ. A jelikoz typ string ma v Pascalu implicitne delku
256 bytes, je soubor tvoren prave zaznamy o delce 256 bytes,
kde byte 0 obsahuje 'vyuzitou' delku stringu a zbyle bytes
1..255 pak obsahuji text (o delce byte 0) a evtl. zbyla
'prazdna' mista (do delky typu string).

Pokud by ti vadila jen zbytecna delka implicitniho stringu,
kterou v konkretnim pripade nikdy nevyuzijes, deklaruj si
typ stringu o potrebne delce a na tomto typu pak postav ten
soubor (str64:string[64]; .... f:file of str64;  ...)

Jinak nevidim duvod, proc nepouzit textfile, chces-li jenom
ukladat text, respektive obsah stringu. Nic ti prece nebrani
potom k tomu souboru pristupovat jako k netypovemu, nebo
treba file of bytes (char).

Nemuzes-li z nejakeho duvodu pouzit textfile a ukladat do
zcela obecneho souboru vzdycky pouze onu 'vyuzitou' delku
stringu, pouzij netypovy 'binarni' soubor a data ze stringu
do nej zapisuj cyklem pres string. Budes pak ale mit potize
se ctenim takoveho souboru, pokud nebudes vkladane stringy
oddelovat napriklad crlf (cimz vzniknou radky a soubor se
bude chovat jako textfile). Taky muzes ukladat stringy
vcetne byte 0 (delka) a na cteni takoveho souboru si napises
fci, ktera bude tuto strukturu predpokladat a bude moci
cist jednotlive stringy budto ciste sekvencne, nebo 'jakoby'
primym pristupem k n-temu stringu. Jakoby, protoze interne
se bude zase muset k n-temu stringu prokousat sekvencne
podle delek, pocinaje byte 0.

Taky existuje moznost pouzit (tusim od verze TP 7) strukturu
stringu tzv. zero-terminated strings, podobne jako je tomu
treba v C. Jejich support je mozno nastavit v compileru, ale
blizsi podrobnosti RTFM :), protoze jsem to v dobach Pascalu
nepouzival a nevim, jak je to v TP implementovane.

pako Paco.


______________________________________________________________________
Reklama:
Jak si stoji kurz koruny? http://kurzy.seznam.cz

--
-- Konference magazinu Internet -------------- servis-internet --
-- Pravidla: http://pravidla.kab.cz ------ FAQ: http://faq.kab.cz
-- Archiv a instrukce pro odhlaseni: http://internet.nawebu.cz



This archive was generated by hypermail 2.1.2 : 10. 08. 2002, 16:16 CEST