Ĺadny brzuch
Czy ktoś mogłby mi podpowiedziec jak napisac procedure odczytujaca ciag 7 znakow a-Z 0-9 oraz 3 znakow 00h-FFh
czyli np mogą być zmienne
tekst : string[7];
B1, B2, B3 : byte;
a plik ma postac np:
abcdefg#00#23#BEa2f6g74#FF#AB#AE
pogrubione to znaki ktore powinny byc wczytane do zmiennej byte
próbowalem wszystko odczytywac jednym stringiem[10] a plik byl textfile tylko ze gdy procedura trafilaa na znaki #13 czyli enter to sie wysypywala i dalej juz nic nie dzialalo jak trzeba
Użytkownik DrizeR edytował ten post 13 marzec 2006, 21:29
procedure TForm1.Button1Click(Sender: TObject); type rek=record tekst:string[7]; b:array[0..2]of byte; end; var f:file; r:rek; begin AssignFile(f,'c:\plik.txt'); FileMode:=fmOpenRead; Reset(f,1); while not eof(f) do begin {$I-} BlockRead(f,r,10); {$I+} if IOResult<>0 then exit; end; CloseFile(f); end;
niezbyt ten kod mi dzialal troche jednak poczytalem o BlockRead i niby dziala tylko strasznie wolno i nie do konca tak wiec postanowilem wczytywac caly plik do pamieci co moze byc chyba szybsze niz odczytywanie po kawalku z pliku tylko jak wczytac caly plik do tablicy
B : Array[0..10000] of byte tylko jak dobrac odpowiedni rozmiar tablicy no i jak to wczytac przy pomocy BlockRead rozmiar pliku jest nie zmienny bo zawsze ma ok 9.70KB
Użytkownik DrizeR edytował ten post 15 marzec 2006, 14:20
Zrob dynamiczna tablice ...
b: array of byte;
A pozniej tylko setlength
niezbyt ten kod mi dzialal troche jednak poczytalem o BlockRead i niby dziala tylko strasznie wolno i nie do konca tak wiec postanowilem wczytywac caly plik do pamieci co moze byc chyba szybsze niz odczytywanie po kawalku z pliku tylko jak wczytac caly plik do tablicy
B : Array[0..10000] of byte tylko jak dobrac odpowiedni rozmiar tablicy no i jak to wczytac przy pomocy BlockRead rozmiar pliku jest nie zmienny bo zawsze ma ok 9.70KB Jak nie działa jak działa :> To jest na jeden rekord, na więcej masz tak:procedure TForm1.Button1Click(Sender: TObject); type rek=record tekst:string[7]; b:array[0..2]of byte; end; var f:file; r:array of rek; i, x:integer; begin AssignFile(f,'c:\plik.txt'); FileMode:=fmOpenRead; Reset(f,1); i:=0; while not eof(f) do begin setlength(r,length(r)+1); {$I-} BlockRead(f,r[i],10,x); {$I+} inc(i); if x<>10 then begin setlength(r,length(r)-1); exit; end; if IOResult<>0 then exit; end; CloseFile(f); end;W tablicy R masz wszystko ;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
czyli np mogą być zmienne
tekst : string[7];
B1, B2, B3 : byte;
a plik ma postac np:
abcdefg#00#23#BEa2f6g74#FF#AB#AE
pogrubione to znaki ktore powinny byc wczytane do zmiennej byte
próbowalem wszystko odczytywac jednym stringiem[10] a plik byl textfile tylko ze gdy procedura trafilaa na znaki #13 czyli enter to sie wysypywala i dalej juz nic nie dzialalo jak trzeba
Użytkownik DrizeR edytował ten post 13 marzec 2006, 21:29
procedure TForm1.Button1Click(Sender: TObject); type rek=record tekst:string[7]; b:array[0..2]of byte; end; var f:file; r:rek; begin AssignFile(f,'c:\plik.txt'); FileMode:=fmOpenRead; Reset(f,1); while not eof(f) do begin {$I-} BlockRead(f,r,10); {$I+} if IOResult<>0 then exit; end; CloseFile(f); end;
niezbyt ten kod mi dzialal troche jednak poczytalem o BlockRead i niby dziala tylko strasznie wolno i nie do konca tak wiec postanowilem wczytywac caly plik do pamieci co moze byc chyba szybsze niz odczytywanie po kawalku z pliku tylko jak wczytac caly plik do tablicy
B : Array[0..10000] of byte tylko jak dobrac odpowiedni rozmiar tablicy no i jak to wczytac przy pomocy BlockRead rozmiar pliku jest nie zmienny bo zawsze ma ok 9.70KB
Użytkownik DrizeR edytował ten post 15 marzec 2006, 14:20
Zrob dynamiczna tablice ...
b: array of byte;
A pozniej tylko setlength
niezbyt ten kod mi dzialal troche jednak poczytalem o BlockRead i niby dziala tylko strasznie wolno i nie do konca tak wiec postanowilem wczytywac caly plik do pamieci co moze byc chyba szybsze niz odczytywanie po kawalku z pliku tylko jak wczytac caly plik do tablicy
B : Array[0..10000] of byte tylko jak dobrac odpowiedni rozmiar tablicy no i jak to wczytac przy pomocy BlockRead rozmiar pliku jest nie zmienny bo zawsze ma ok 9.70KB Jak nie działa jak działa :> To jest na jeden rekord, na więcej masz tak:procedure TForm1.Button1Click(Sender: TObject); type rek=record tekst:string[7]; b:array[0..2]of byte; end; var f:file; r:array of rek; i, x:integer; begin AssignFile(f,'c:\plik.txt'); FileMode:=fmOpenRead; Reset(f,1); i:=0; while not eof(f) do begin setlength(r,length(r)+1); {$I-} BlockRead(f,r[i],10,x); {$I+} inc(i); if x<>10 then begin setlength(r,length(r)-1); exit; end; if IOResult<>0 then exit; end; CloseFile(f); end;W tablicy R masz wszystko ;)