Pliki amorficzne

0

Mam pytanko czy do pliku amorficznego można wpisywać łańcuchy string bez podania ich długości? Dla przyjkładu
Rekord = packed record
imie : string;
nazwisko : string;
end;

var Plik : File;
rec : Rekord

rec.imie:='janek';
rec.nazwisko:='kowalski.....';
AssignFile(Plik,'C:\plik.dat');
Rewrite(Plik,1);
BlockWrite(Plik,Rec,SizeOf(Rec));
CloseFile(Plik);

0

Nie mozna zrobic czegos takiego, gdyz w plikach amorficznych jest na początku rekordu zapisywana jego długość. Zawsze musisz miec jakies ograniczenie. Zrób se najwyzej pare stringów [0..255] i je łącz potem :D

0

Po raz mniej więcej 2451:

długie łańcuchy (podobnie jak obiekty) są dynamiczne i reprezentowane przez wskaźnik. Powyższa metoda zapisze do pliku 4bajtowy wskażnik do łańcucha, który przy odczycie będzie bezsensowny.
rozwiązania:
string[cośtam] - łańcuch o stałej długości do 255
array[1..ileś] of char - łańcuch o duzej stałej długości
przy łańcuchach o zmiennej długości typowy plik rekordowy jest bez sensu. Lepiej pisać długość, potem łańcuch (BlockWrite(F,s[1],Length(s)), potem długoiść łańcucha 2, łańcuch 2 itd. Oczywiście Seek jest wtedy niemożliwy, trzeba czytać sekwencyjnie.

Inne rozwiązanie to nie wplatać długości, tylko zrobić na początku tablicę offsetów

1 użytkowników online, w tym zalogowanych: 0, gości: 1