Wątek przeniesiony 2015-09-23 22:08 z Delphi i Pascal przez olesio.

Zamiana całych linii w pliku tekstowym

0

Cześć,

Zacząłem dziś bawić się delphi.

Chcę stworzyć prosty programik, który zamieni pierwszą linię o wartości A w pliku tekstowym na linię o wartości B, oraz wszystkie linie o wartości C na linie o wartości D.

Przykład:
Plik przed obróbką:

O
P
A
I
A
C
I
C
C

I

Plik po obróbce:

O
P
B
I
A
D
I
D
D
I

Korzystając z zasobów internetu udało mi się z tym, aby zamienił pierwszą linię o wartości A na wartość B, ale nie mogę sobie poradzić z tym, żeby zamienił wszystkie C na D.

Póki co kod wygląda tak:

var
  Form1: TForm1;
  SL: TStringList;
  InsTextPos: Integer;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile('d:\new.txt');
    InsTextPos := SL.IndexOf('A');
    if InsTextPos >= 0 then
    begin
      SL.Delete(InsTextPos);
      SL.Insert(InsTextPos, 'B');
      SL.SaveToFile('d:\new.txt');
    end;
  finally
    SL.Free;
  end;

end;
end.

Macie może jakieś rady?
Nie chodzi o zmianę jeśli linia zawiera wartość C, ale o zamianę jeśli linia zawiera TYLKO wartość C.

Z góry dziękuję za pomoc.

1

Według mnie to będzie coś takiego. Otrzymałem identyczny plik new.txt jaki podałeś w przykładzie.

var
  I : integer;
  Rep1 : boolean;
  SL : TStringList;
begin
  Rep1 := False;
  SL := TStringList.Create;
  try
    SL.LoadFromFile('D:\test.txt');
    for I := 0 to SL.Count - 1 do
    begin
      if (SL[I] = 'A') and (not Rep1) then
      begin
        SL[I] := 'B';
        Rep1 := True;
      end
      else
      begin
        if SL[I] = 'C' then
        begin
          SL[I] := 'D';
        end;
      end;
    end;
    SL.SaveToFile('D:\new.txt');
  finally
    SL.Free;
  end;
end;

Poczytaj też jak działa IndexOf, bo tam wielkość liter nie jest ważna. A wątek przenoszę do działu Newbie i w nim na przyszłość zadawaj pytania o tak elementarne oraz banalne podstawy. Do tego jest właśnie ten dział (przynajmniej na razie póki istnieje).

EDIT: @CeKa poniżej zapodawał przedziwne rozwiązanie. Nie wiem czy było by pomocne początkującemu, bo pokazuje jak maksymalnie zagmatwać rozwiązanie prostej sytuacji ;) Jednak może dobrze, że je usunąłeś. Chociaż wiadomo, że często rozwiązań do jednej sytuacji może być wiele.

0

Idź po każdej linii TStringList i sprawdzaj czy SL[indeks] = C, jak tak to zamień na D.

0

@olesio
Bardzo dziękuję. Działa idealnie.

Przepraszam za niepoprawny dział.
Pozdrawiam.

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