Import poszczególnych wartości z jednego pliku tekstowego do dwóch komponentów Memo

0

Witam.
Jak zmienic ten kod by z jednego pliku tekstowego zimportować tekst w 2 różne 'memo' ?

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
Memo1.Lines.LoadFromFile(OpenDialog1.Filename);
end;

Np w pliku tekstowym mam taki tekst:

treść = "jakies zdanie bla bla bla,
nowe zdanie bla bla bla...
i kolejne zdanie"
numer = "12345"

to co w cudzysłowie jest, mialoby trafiać do różnych memo....

0

Znacznie prościej zmienić format tego pliku. W takiej postaci nie będzie to łatwe.

0

ok to w sumie nie istotne w jakiej formie plik bedzie....moge zmienic sposób zapisu,
ważne by dodawał wszystkie linie począwszy od np **TRESC **do memo1, aż napotka słowo **NUMER **i doda dalsze linie do memo2

0

wymyslilem takie coś, ale to przenosi do memo2 tylko linie w ktorych wystepuje 'TEKST' a wszystkie dalsze.. już nie

  var
  i:Integer;

begin
  if FileExists('memo.txt') Then
  Memo1.Lines.LoadFromFile('memo.txt');
  for i:=1 to (memo1.Lines.Count-1) do
  if Pos('TEKST',memo1.Lines.Strings[i])=1 then
   memo2.Lines.Add('   '+memo1.Lines.Strings[i]);

end;
1

Zapis:

SL:=TStringList.Create;
SL.Values['treść']:=StringReplace(StringReplace(memo1.Lines.Text,#10,'',[rfReplaceAll]),#13,'{CR}',[rfReplaceAll]);
SL.Values['numer']:=StringReplace(StringReplace(memo2.Lines.Text,#10,'',[rfReplaceAll]),#13,'{CR}',[rfReplaceAll]);
SL.SaveToFile('memo.txt');
SL.Free;

Odczyt:

SL:=TStringList.Create;
SL.LoadFromFile('memo.txt');
memo1.Lines.Text:=StringReplace(SL.Values['treść'],'{CR}',#13,[rfReplaceAll]);
memo2.Lines.Text:=StringReplace(SL.Values['numer'],'{CR}',#13,[rfReplaceAll]);
SL.Free;
1

Najprostsze na co wpadłem, to taki kod jak poniżej. Ale jeżeli kombinujesz ze zmiennym tekstem i słowa kluczowe mają się zmieniać, to polecam skorzystać z wyrażeń regularnych. Darmowy moduł do nich wraz z dokumentacją i przykładami, znajduje się na: http://regexpstudio.com/TRegExpr/TRegExpr.html

const
  Test_File = 'D:\test.txt';
var
  I : integer;
  SL : TStringList;
  AddToMemo1, AddToMemo2 : boolean;
begin
  AddToMemo1 := False;
  AddToMemo2 := False;
  if FileExists(Test_File) then
  begin
    Memo1.Clear;
    Memo2.Clear;
    SL := TStringList.Create;
    SL.LoadFromFile(Test_File);
    for I := 0 to SL.Count - 1 do
    begin
      if not AddToMemo1 then
      begin
        AddToMemo1 := Pos('treść', SL[I]) = 1;
      end;
      if (AddToMemo1) and (not AddToMemo2) then
      begin
        Memo1.Lines.Add(SL[I]);
      end;
      if not AddToMemo2 then
      begin
        AddToMemo2 := Pos('numer', SL[I]) = 1;
      end;
      if AddToMemo2 then
      begin
        Memo2.Lines.Add(SL[I]);
      end;
    end;
    SL.Free;
  end;
end;
0

dziekuje olesio, juz co za raz blizej mety...
ale to jeszcze nie to...

treść jest importowana do memo1
numer jest importowany zarówno do memo1 jak i memo2

memo.png

dodanie obrazu do treści posta - fp

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