Witam,
Pracuję obecnie nad progamem - edytorem list kanałów (settingów) do mojego tunera cyfrowego. Chcę mieć możliwość otwierania/edycji i zapisu. Niestety w trakcie okazało się, że sprawa jest znacznie bardziej złożona niż sobie wyobrażałem :(
Miałem nieco problemów z przygotowaniem procedury odczytującej określony fragment pliku, ale już nieco wybrnąłem - oto co powstało (podpierałem się jednym z przykładów z 4programmers):
procedure TNSSetEditMain.Button1Click(Sender: TObject);
var
F, Dst : file;
Buff : array[0..7] of char;
BytesRead : Integer;
begin
AssignFile(F, 'C:\Documents and Settings\Dj. Kadet\Pulpit\NS SetEdit\lista.sdx');
Reset(F, 1);
Seek(F, 68);
AssignFile(Dst, 'C:\Documents and Settings\Dj. Kadet\Pulpit\NS SetEdit\Test.txt');
Rewrite(Dst, 1);
if BytesRead > 0 then
begin
BlockRead(F, Buff, 7, BytesRead);
BlockWrite(Dst, Buff, BytesRead)
end;
CloseFile(F);
CloseFile(Dst);
Application.MessageBox('Odczyt zakończony powodzeniem','Super chruper :P', 0)
end;
Procedurka jak widać odczytuje plik od 68 bajtu - <ort>szczytuje </ort> <font color="orange">[czy ty wiesz co to znaczy szczytować!?? pq] </span>7 bajtów. Niestety aktualnie to nie jest jeszcze to co mi potrzebne:
- Jak po odczycie wynik wyświetlić w Edit, a nie zapisywać do pliku ???
- Chciałbym, aby procedura inteligentnie sama wiedziała ile ma odczytać - nie wpisywać na sztywno "7", ale żeby odczyt kończył się, gdy procedura trafi na zdefiniowany wcześniej znak (np.: HEX 00 lub FF).
Żeby bardziej obrazowo pokazać o co mi chodzi - przykład:
Ala ma kotaDelphi errorBorlandAQQ
Problem polega na zrobieniu w tym wypadku odczytu np.: od znaku 13 (to załatwi seek) do pierwszego trafionego ^ (powinno zwrócić "Delphi error").
Czyli efekt - rozpoznanie długości odczytywanego elementu i odpowiednie dynamiczne zarządzanie rozmiarem bufora danych - tak aby odczytało do znaku i koniec, a wynik pracy zwróciło nie zapisując do pliku, a wyświetlając w Edicie.
- To już bardziej ogólnie - program po ukończeniu może być dość pamięciożerny, dlatego proszę o rzucenie okiem na tą procedurkę, którą wkleiłem - jeśli da się jeszcze w jakiś sposób zaoszczędzić pamięci - proszę o info
Próbowałem uzyskać pomoc na forum ks-ekspert, ale jakoś brak odzewu; chyba niemożliwe, żeby się nie dało tego wykonać :-|