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