Długość string w rekordzie

0

Witam, dzisiaj pojawił się kolejny problem, który oczywiście wymaga rozwiązania, a mianowicie, pisze wypożyczalnie filmów i chciałbym aby każdy film miał swój opis, i tutaj właśnie pojawia się problem, a mianowicie długość stringu w rekordzie może mieć tylko 255, co mnie w żaden sposób nie zaspakaja, ponieważ jest to o wiele za mało. Czy istnieje jakaś przyzwoicie prosta metoda, aby temu zaradzić.

dodam, że szukałem po internecie i nawet tutaj na forum, ale wydaje mi się, że żaden temat nie odpowiada do końca na postawiony problem.

0

Możesz w strukturze dać pole typu PChar, i przydzielać pamięć dynamiczne, od razu ostrzegam prawie całość będziesz musiał poprzerabiać.
Lub też przewidzieć opis powiedzmy na 20 wierszy, każdy z których może mieć 255 znaków.

0

Zawsze możesz zapisywać dane o długości stringów przed ich zapisaniem, a później odczytywać i ustawiać długośc stringa. Przeanalizuj sobie kod dołaczony do tego posta. Ktoś kiedyś wytknąl mi, że jest tragiczny, ale ja tylko rozszerzyłem program i poprawiłem nieco kod Adama Boduha, ale dzięki przykładom oraz przyjrzeniu się jak ustawiam record DaneRec_Dlugosci powinieneś zrozumieć ideę.

0

dajesz zamiast string ansistring i już masz nielimitowane znaki. bez żadnych kombinacji.

0

To się zgadza, jednak typowy string w Delphi ma chyba też bardzo dużą pojemność, bo ciężko będzie wypełnić ponad 2 GB znaków, ale to nie zmienia faktu, że zapisująć taki string tak czy inaczej, przy odczycie trzeba znać jego długość aby odczytać to co potrzeba i w takiej ilości znaków jaką potrzeba. Czyli na przykład robimy tak, jak poniżej i wszystko będzie ok...

ZAPIS:

var
  L : integer;
  A : AnsiString;
  MS : TMemoryStream;
begin
  A := 'this is jus a test';
  MS := TMemoryStream.Create;
  L := Length(A);
  MS.Write(L, SizeOf(L));
  MS.Write(A[1], L);
  MS.SaveToFile('D:\test.bin');
  MS.Free;
end;

ODCZYT:

var
  L : integer;
  A : AnsiString;
  MS : TMemoryStream;
begin
  MS := TMemoryStream.Create;
  MS.LoadFromFile('D:\test.bin');
  MS.Read(L, SizeOf(L));
  SetLEngth(A, L);
  MS.Read(A[1], L);
  Edit1.Text := A;
  MS.Free;
end;

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