[Delphi 7]Odczyt liczb z jednego wiersza na kilka


(george32801) #1

Witam.

Nie umiem sobie poradzić z jednym problemem podczas pisania małego programiku.. Sytuacja wygląda tak:

Mam plik w:

C:/mój/plik.test

Jego zawartość wygląda tak:

552 1245 155 111 899 eof

Teraz moim celem jest wczytanie tego pliku do mojego programu, ale w taki sposób aby każda liczba była w oddzielnej linijce memo1. ("eof" też może być..)

Pomoże ktoś? :wink: Pozdrawiam!


(Johny) #2

Odczytujesz po kolei while (plik not EOF) do Begin

i dajesz Memo1->Lines->Add(liczba); \chyba o to ci chodzi

albo w trybie tekstowym

writeln(liczba);

end;

Zobacz sobie na przykładach w necie jak działa komponent Memo


(george32801) #3

Hm nie do końca zrozumiałem..

W pliku mam jak mówiłem DOKŁADNIE taką treść:

552 1245 155 111 899 eof

Ta treść się zmienia (cyfry się zmieniają). Po prostu chce aby mój program wczytał to do memo ale w taki sposób jak poniżej:

552

1245

155

111

899

eof

Jak to zrobić? edit1 ------ O, albo prościej mówiąc, aby zareagował na odstęp i kolejną liczbę do kolejnego napotkanego odstępu przeniósł na nową linię w memo :wink: edit2 ------ Ok doszedłem do tego przy piwku i pomocy z innego forum.. :slight_smile: Kod wygląda tak:

function Explode(Str : string; Separator : string) : TStringList;

var

  X : Integer;

begin

  Result := TStringList.Create;

  X := Pos(Separator, Str);

  while X > 0 do

  begin

    Result.Add(Copy(Str, 1, X - 1));

    if X <= Length(Str) then

    begin

      Str := Copy(Str, X + Length(Separator), Length(Str));

    end;

    X := Pos(Separator, Str);

  end;

  if (Length(Str) > 0) then

  begin

    Result.Add(Str);

  end;

end;


procedure TForm1.Button6Click(Sender: TObject);

var

  inte, : integer;

  sciezka : string;

  statsall : TStringList;

begin

  sciezka:=('C:/mój/plik.test');

  Memo1.Lines.LoadFromFile(Sciezka);

  statsall := Explode(Memo1.Lines.Text, ' ');

    for inte := 0 to statsall.Count-1 do

      begin

        Memo1.Lines.Clear;

        Memo1.Lines.AddStrings(statsall);

      end;

end;

(za procedure "explode" thx dla olesio z innego forum) =D>

Daje kod, bo może przydać się potomnym.

Temat do zamknięcia! :wink:


([alex]) #4

Powiem ci tak, ten kod jest okropny !

Nie zwalniasz pamięci przydzielonej pod statsall.

Można to wszystko zrobić znacznie prościej:

with Memo1.Lines do

begin

  Memo1.Lines.LoadFromFile('C:/mój/plik.test');

  Memo1.Lines.Text:=StringReplace(Trim(Memo1.Lines.Text),' ',#13,[rfReplaceAll]);

end;

(george32801) #5

która część kodu?


([alex]) #6

Cały.