[Delphi] Jak ustalić długość znaku...

0

Mam pewien problem. Mianowicie mam plik typu Byte i zapisane w nim losowe liczby. Program ma wczytać liczby do tablicy i je posortować oraz zapisać je w innym pliku. Napisałem coś, co losuje liczby i zapisuje je w pliku oddzielone średnikiem. Sortowanie też działa natomiast mam problem z odczytem z pliku. W pliku posortowanym znajdują się liczby, których nie ma w odczytywanym pliku. Nie wiem jak ustalić długość znaku i jaki ustalić warunek w przypadku napotkania średnika.
Wielkie dzięki.
Pozdrowienia.
implementation

{$R *.DFM}

{ TForm2 }

procedure TForm2.sort(var t: tablica);
var
i, j : Integer;
Temp : Integer;
begin
for I := 1 to High(T) do
begin
for J := 1 to High(T) do
begin
if (T[j] > T[j-1]) then
begin
Temp := T[j];
T[j] := T[j-1];
T[j-1] := Temp;
end;
end;
end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
t, ta: Tablica;
Tf : File of byte;
F, P : TextFile;
i, j, x, y : Integer;
a, b : Byte;
Size : Longint;
begin
AssignFile(P, 'c:\plik2.txt'); Rewrite(P);
AssignFile(F, 'c:\plik1.txt'); Rewrite(F);
AssignFile(Tf, 'c:\plik.txt'); Reset(Tf);
Size:=FileSize(Tf);
seek(Tf, size div 2);
x:=FilePos(Tf);
SetLength(t, TrackBar1.Position);
label1.Caption:=(IntToStr(size));
label2.Caption:=(IntToStr(x));
try
for i:=0 to TrackBar1.Position do
begin
read(Tf, a);

t[i]:=a;
end;
begin
sort(t);
for i:=1 to High(t) do
begin
write(F, IntToStr(t[i]));
write(F,' ');
end;
end;
begin
seek(Tf, size);
y:=(TrackBar1.Position);
seek(Tf, (size div 2)+(1));
SetLength(ta, TrackBar1.Position);
for j:=1 to y do
begin
read(Tf, b);

ta[j]:=b;
end;
begin
sort(ta);
for i:=1 to High(ta) do
begin
write(P, IntToStr(ta[i]));
write(p,' ');
end;
end;
end;
finally
CloseFile(Tf);
CloseFile(F);
CloseFile(P);
end;
end;
procedure TForm2.Button2Click(Sender: TObject);
var
Tf : TextFile;
I, J, X, Y : integer;
begin
AssignFile(Tf, 'c:\Plik.txt'); Rewrite(Tf);
label3.Caption:=('Wylosowano '+IntToStr(TrackBar1.Position)+' liczb.');
try
for i:=1 to TrackBar1.Position do begin
X:=random(100);
write(Tf, IntToStr(X));
write(Tf,';');
end;
begin
writeln(Tf);
Append(Tf);
end;
for j:=1 to TrackBar1.Position do begin
Y:=random(100);
write(Tf, IntToStr(Y));
write(Tf,';');
end;
finally
CloseFile(Tf);
end;
end;
end.
Podobno nieźle to zamieszane :-) z tym średnikiem to pomysł z ostatniej chwili widzę, że nie najlepszy. Pozdrawiam.

0

Nie wiem czy dobrze rozumiem, ale w pliku masz zapisane bajty w kodzie (znaczy nie ASCII) oddzielone średnikiem. W takim wypadku średnik jest bez sensu, bo też ma jakis kod i zaburza Ci całą koncepcję, w związaku z tym nie oddzielaj wartości średnikami, bo każda kolejna zapisana/odczytana wartość będzie kolejnym bajtem.

0

a bys podal: kod jak to zapisujsz bo nie wiem czego uzywasz itp..

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