Wyszukiwanie ciągu znaków w memo

0

Chciałem zrobić pętlę która będzie dodawać linię X z memo1 do memo2 jeśli ta linia X nie znajduje się jeszcze w memo2

Napisałem taki kod:

Var
X, J : Integer;
Y, Z : String;
Begin

    for J := 0 to Memo2.Lines.Count - 1 do
    Y := Memo2.Lines[J];

    for X := 0 to Memo1.Lines.Count - 1 do
    begin
    Z := Memo1.Lines[X];
    if Copy(Z, 1, Length(Y)) <> Y then
    Memo2.Lines.Add(Z);

    end;
    end;

Lecz jeśli jest więcej niż jedna taka sama linia w memo2 jak w memo1, to pętla działa tylko na tę ostatnią

Proszę zatem o pomoc

0

Twój kod rozpoczyna sie tak:
od n=0 do n=count-1

  • skopiuj n-tą linię do zmiennej Y
    (czyli finalnie w Y masz oczywiście tylko linię ostatnią...)
    O to ci chodziło?
0
Var
X, J : Integer;
Y, Z : String;
Begin
 
    for J := 0 to Memo2.Lines.Count - 1 do
    begin
      Y := Memo2.Lines[J];
 
      for X := 0 to Memo1.Lines.Count - 1 do
      begin
        Z := Memo1.Lines[X];
        if Copy(Z, 1, Length(Y)) <> Y then
          Memo2.Lines.Add(Z);
      end;
    end;
end;
0

pelsta, podałeś praktycznie to samo co ja tylko dodałeś begin po pierwszej pętli a tak już próbowałem i to nie działa jak należy.
Shalom, No tak, czyli powinno przeszukiwać linię od pierwszej do ostatniej a nie tylko ostatnią.

Mógłby to ktoś poprawić? :(

0

Poprawić nie poprawię, bo nie lubię analizować czyichś kodów. Zastanawia mnie jednak, po co jest tam procedura Copy?

Ja rozwiązałbym to w taki sposób:

var i, j: Integer;
    Jest: Boolean;
begin
  for i:= 0 to Memo1.Lines.Count - 1 do begin
    Jest:= true;
    for j:= 0 to Memo2.Lines.Count - 1 do begin
      if Memo1.Lines[i] = Memo2.Lines[j] then begin
        Jest:= true;
        Break;
      end;
      Jest:= false;
    end;
    if not Jest then Memo2.Lines.Add(Memo1.Lines[i]);
  end;
end;
0
Gosc napisał(a)

pelsta, podałeś praktycznie to samo co ja...

Faktycznie nie zastanawiałem się i tak wyszło.
Zrób tak:

var
  i,j:Integer;
  s:string;
begin
  for i:=0 to Memo1.Lines.Count-1 do
  begin
    s:=Memo1.Lines[i];
    j:=Memo2.Lines.IndexOf(s);
    if j=-1 then Memo2.Lines.Add(s);
  end;
end;

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