[ MoHicAn @ 04.03.2002. 21:48 ] @
Elem evo dela kod-a

Code:

  assign(x,imefajla);
  reset(x);
  for i:=1 to linija do
   begin
    readln(x);
   end;
  while not eoln(x) do
   begin
    seek(x,pozicija);
    read(x,ch);
    write(ch);
   end;
  close(x);


E sad problem je u sledecem
kad definisem x kao x:text onda readln(x) radi (prebacuje pokazivac na novi red u fajlu x) ali zato seek ne radi i prijavljuje incompatible file types. Ali kad definisem x kao x: file of char onda mi radi seek al ne radi readln(x) i isto kaze incompatible file types ali ovaj put za readln(x). E sad jel zna neko zasto je ovo tako i ako neko zna elegantniji nacin za menjanje linije u fajlu (meni je ono sa for prvo palo na pamet al to sad i nije tolko vazno) BTW. kolko ja znam tip "text" jeste standardno ime koje je definisano sa
Code:

type
   text=file of char;


PS: ovo je probano u delphiju 5 i u turbo pascalu i isto prijavljuje i u jednom i u drugom
[ Riste Pejov @ 05.03.2002. 09:44 ] @
readln radi SAMO na text files

to ti je isto ko da imas
Code:

var
  x:char;
  linija:string;
........

while not eol(moj_fajl) do
  begin
  read(x,moj_fajl);
  linija:=linija+x;
  end;

a seek radi SAMO typed files !
Code:

type
  moj_tip=record
                moj_int:integer;
                moj_byte:byte;
                end;
var
   reader:moj_tip;
   read_file:file of moj_tip;
begin
   assign(read_file,imefajla); 
   reset(read_file); 
   seek(read_file,3); //prebacujes file pointer na 3-ci record fajla
   read(reader,read_file); //ucitavas 3-ci record iz fajla
   .....
end;


nadam se da sam pomoga

Gojko: a zasto code trimuje space-ove ??!?!
[ MoHicAn @ 06.03.2002. 00:17 ] @
A jel imas onda neku zamenu za seek kad su u pitanju text fajlovi ?

Ja sam nasao kao neko resenje kad se koristi file of char. Samo malo je nabudzeno.
To bi bilo nesto tipa da imam petlju koja se vrti i pri svakom obrtu pomera pokazvac na karakter u fajlu za jedan i stavlja njegovu vrednost u promenjivu ch read(x,ch) npr i onda pri svakom okretu ide provera if ch=asc(13) {* enter ako se ne varam i posle njega moguci *} if filepos(x)+1=asc(10)

Al meni je sve to malo prenatrpano
ima li neko elegantnije resenje ?
[ vujke @ 07.03.2002. 07:15 ] @
Citat:
MoHicAn:
A jel imas onda neku zamenu za seek kad su u pitanju text fajlovi ?

Ja sam nasao kao neko resenje kad se koristi file of char. Samo malo je nabudzeno.
To bi bilo nesto tipa da imam petlju koja se vrti i pri svakom obrtu pomera pokazvac na karakter u fajlu za jedan i stavlja njegovu vrednost u promenjivu ch read(x,ch) npr i onda pri svakom okretu ide provera if ch=asc(13) {* enter ako se ne varam i posle njega moguci *} if filepos(x)+1=asc(10)

Al meni je sve to malo prenatrpano
ima li neko elegantnije resenje ?


Na zalost, ako koristis text file-ove moraces to da odradis pesaka.
[ Riste Pejov @ 07.03.2002. 10:58 ] @
Naravno da ima boljeg reshenja

Pascal ima veoma prost pristup fajlovima, koji ogranicava programera kad
je u pitanje komplicirana struktura fajla ili kad treba da promenis samo neki
deo fajla. Ali zato tu nam je Win API, nazalost nije tako lako kao sa Pascalovih
procedura za manipuliranje za fajlovima.
TFileStream je jednostavni Stream za rad sa fajlovima sa diska, ima procedure kao Read,Seek i Write.
FileStream je jedino resenje za tvog problema.

potrazi u help fajlu File types with file I/O
ja sam radio file streamove sa standardne strukture gde znas velicinu objekta kojeg ucitavas, ali kad je u pitanju text file pitanje je dali je to ASCII ili unicode,
u ascii jedan karakter je 1byte u unicode je 2, tako da velicina objekta moze biti
jedan ili dva bajta.

peace
[ Gojko Vujovic @ 07.03.2002. 14:01 ] @
Citat:
Riste Pejov:
Gojko: a zasto code trimuje space-ove ??!?!


Nemam bolje rešenje za sada.

<pre> tag kao i <listing> ne trimuju space-ove i imaju fixed width font, ali od jednog razmaka prave dva komada zato sto i dalje ostaju <br> tagovi na kraju svake linije koda.. isto tako ne mogu da izbacim te <br> izmedju [ code] tagova zbog nacina parsiranja kakav je trenutno..

Užas jednom rečju