Wczytanie sformatowanego pliku w delphi

0

Witam
Jako nowy użytkownik proszę o wyrozumiałość kolegów.
Dostałem do napisania projekt (koniecznie musi być wykonany w Delphi) i natrafiłem na pewien problem, otóż nie mogę dojść w jaki sposób wczytać do pamięci sformatowany plik zawierający wartości w postaci podanej poniżej (by później narysować wykres na ich podstawie [ewentualnie dalej modyfikować]).
Chodzi mi jedynie o sposób ich wczytania. Z dalszymi zadaniami sobie poradzę.
Z góry dziękuje za wszelką chęć pomocy i pozdrawiam.

".............................................
116.48100; 9.15000; 0.12648;1
116.68300; 9.16667; 0.12686;1
116.89000; 9.18333; 0.12721;1
117.08400; 9.20000; 0.12759;1
117.28200; 9.21667; 0.12795;1
117.48000; 9.23333; 0.12832;1
117.69400; 9.25000; 0.12870;1
117.88500; 9.26667; 0.12907;1
118.07900; 9.28333; 0.12944;1
118.27300; 9.30000; 0.12979;1
118.48600; 9.31667; 0.13017;1
118.69700; 9.33333; 0.13055;1
118.88700; 9.35000; 0.13093;1
119.09100; 9.36667; 0.13129;1
119.28800; 9.38333; 0.13164;1
119.50400; 9.40000; 0.13201;1
119.68200; 9.41667; 0.13234;1
119.89100; 9.43333; 0.13275;1
120.08600; 9.45000; 0.13309;1
120.28100; 9.46667; 0.13346;1
120.49500; 9.48333; 0.13383;1
120.69000; 9.50000; 0.13421;1
120.87600; 9.51667; 0.13458;1
121.09300; 9.53333; 0.13494;1
121.28600; 9.55000; 0.13531;1
121.48200; 9.56667; 0.13567;1
121.67800; 9.58333; 0.13604;1
.......................................itd"

0

Użyj TStringList i jego metody LoadFromFile(). A jeśli chodzi Ci o dzielenie tego na kolumny, to mozesz albo wg pozycji poszczegolnych znakow (widze, ze wpisy maja taka sama dlugosc w kazdej linii) albo poszukaj na Googlu metody na dzielenie string'a po danym znaku (delimiterze).

0

Po wczytaniu do TStringList w pętli każdą linię możesz potraktować:

ExtractStrings([';'],[],pchar(linia), lista);

rozbija to linię według średników i zapisuje w innym TStringList - tutaj to będzie lista

0

Nie wiem co to za wartości założyłem że to liczby oddzielone średnikiem i niepotrzebnymi spacjami. Zakładam, że każdą linię można potraktować jako jeden rekord a więc można zastosować tablicę rekordów. Coś takiego:

type
  TDane = record
    a, b, c: Real;
    d: Integer;
  end;

  TTablDane = array of TDane;

[***ciach***]

function FillRecord(s: string): TDane;
var
 danes: array [0..3] of string;
 i, p: Integer;
begin
 s:= StringReplace(s, ' ', '', [rfReplaceAll]);
 s:= StringReplace(s, '.', ',', [rfReplaceAll]);
 s:= s + ';';

 i:= 0;
 p:= Pos(';', s);
 while (p > 1) do
 begin
   danes[i] := Copy(s, 0, p - 1);
   Delete(s, 1, p);
   Inc(i);
   p:= Pos(';', s);
 end;

 result.a:= StrToFloat(danes[0]);
 result.b:= StrToFloat(danes[1]);
 result.c:= StrToFloat(danes[2]);
 result.d:= StrToInt(danes[3]);
end;


var
  f: TextFile;
  line: string;
  TablDane: TTablDane;
  i: Integer;
begin
  i:=0;
  AssignFile(f, 'C:\test\test.txt');
  Reset(f);
  while not EOF(f) do
  begin
    Inc(i);
    SetLength(TablDane, i);
    Readln(f, line);
    TablDane[i - 1]:= FillRecord(line);
  end;
  CloseFile(f);
end;
0

Super, jak tylko się ogarnę ze wszystkimi zadaniami to zabieram się do kodowania.
Wielkie dzięki :D
pozdrawiam

hmmm, spróbuję jednego i drugiego, zawsze to czegoś więcej nauczy.

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