Usuwanie tylko trzech linijek zamiast całości lub takich samych

0
procedure TWypozyczalnia.ApplyDelButClick(Sender: TObject);
begin
   DeleteClient.Show;
  DelName.Hide;
  DelSur.Hide;
  DelPesel.Hide;
  DelSurBut.Hide;
  DelPeselBut.Hide;
  ApplydelBut.Hide;
  DeclineDelBut.Hide;
  DelNameBut.Hide;
 begin
   L:=DelNameBut.Text;
Linie:=TStringList.Create;
assignFile(plik, 'klienci.txt');
Reset(plik);
while not Eof(plik) do
 begin
   Readln(plik, Linia);
   if (Linia<>L) then Linie.Add(Linia);
 end;
CloseFile(plik);
assignFile(plik, 'klienci.txt');
Rewrite(plik);
for I:=0 to Linie.Count-1 do
 Writeln(plik,Linie[I]);
CloseFile(plik);
Linie.Free;
end;
  begin
   L:=DelSurBut.Text;
Linie:=TStringList.Create;
assignFile(plik, 'klienci.txt');
Reset(plik);
while not Eof(plik) do
 begin
   Readln(plik, Linia);
   if (Linia<>L) then Linie.Add(Linia);
 end;
CloseFile(plik);
assignFile(plik, 'klienci.txt');
Rewrite(plik);
for I:=0 to Linie.Count-1 do
 Writeln(plik,Linie[I]);
CloseFile(plik);
Linie.Free;
end;
   begin
   L:=DelPeselBut.Text;
Linie:=TStringList.Create;
assignFile(plik, 'klienci.txt');
Reset(plik);
while not Eof(plik) do
 begin
   Readln(plik, Linia);
   if (Linia<>L) then Linie.Add(Linia);
 end;
CloseFile(plik);
assignFile(plik, 'klienci.txt');
Rewrite(plik);
for I:=0 to Linie.Count-1 do
 Writeln(plik,Linie[I]);
CloseFile(plik);
Linie.Free;
end;
end; 

Powyżej daję kod. Kod usuwa z notatnika imię, nazwisko oraz pesel osoby, ale problem jest gdy przesyłane jest nazwisko Kowalski i jest dwóch Kowalskich - obaj są kasowani. Można to jakoś ominąć ? Moglibyście pomóc? Jestem początkujący i wiem, że jest to pewnie laiczne.

0

Powyżej daję kod.

Najpierw go sformatuj, bo wygląda jak wspomnienie po wielkanocnej biegunce;

Kod usuwa z notatnika imię, nazwisko oraz pesel osoby [...]

Nie z notatnika, a z pliku tekstowego, bo to ogromna różnica;

[...] ale problem jest gdy przesyłane jest nazwisko Kowalski i jest dwóch Kowalskich - obaj są kasowani.

Pokaż przykładowy plik - łatwiej będzie udzielić odpowiedzi.

0
patwoj98 napisał(a):

problem jest gdy przesyłane jest nazwisko Kowalski i jest dwóch Kowalskich - obaj są kasowani.
A który ma być kasowany? pierwszy, drugi, żaden? Jak sobie odpowiesz na to pytanie to będziesz wiedział co zrobić, żeby działało tak jak chcesz

0

Klasa Tstringlist ma metody 'loadfromfile' i 'savetofile' .
Przy ich pomocy w jednej linijce kodu zrobisz to co w 6 liniach Twojego kodu.
Zamiast

    CloseFile(plik);
    assignFile(plik, 'klienci.txt');
    Rewrite(plik);
    for I := 0 to Linie.Count - 1 do
      Writeln(plik, Linie[I]);
    CloseFile(plik);

masz:

 linie.savetofile('klienci.txt')

podobnie z jest z czytaniem z pliku , i nie potrzebujesz do odczytu pomocniczego bufora, a samo usuwanie zbędnych wierszy robisz na zmiennej 'linie'

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