1

Тема: Видалення/зміна запису у файлі

як видалити/змінити запис у текстовому файлі за "назвою", тобто я вводжу "назва" і мені видаляє "назва, назва1, назва2, назва3", або змінює тільки "назва"?
записи у файлі записуються наступним чином:

назва
назва1
назва2
назва3

2

Re: Видалення/зміна запису у файлі

Самі щось пробували написати?

3

Re: Видалення/зміна запису у файлі

я без поняття, просто то текстовий файл, а не типізований, тому я хз

4 Востаннє редагувалося koala (25.11.2013 06:43:51)

Re: Видалення/зміна запису у файлі

Текстовий файл можна розглядати як типізований, з символів.
А вам треба створити новий файл, записати в нього все, що треба, видалити початковий і перейменувати новий на нього.

5

Re: Видалення/зміна запису у файлі

я думав зробити так що, шукаю по "назва"
якщо є то "назва" і все наступне переприсвоїти в 0
а при виведенні на екран, поставити умову, щоб 0 не виводило

6

Re: Видалення/зміна запису у файлі

Якщо це вас влаштує - то good for you.

7

Re: Видалення/зміна запису у файлі

koala написав:

Якщо це вас влаштує - то good for you.

так щось не дуже влаштовує, можете надати код виконання Вашої версії?

8

Re: Видалення/зміна запису у файлі

Прихований текст
//License: GNU GPL v2
var
    f1,f2: text;
    s: string;
   const
    ourstring = 'реплейс'; //наш рядок
   begin
    assign(f1,'c:\a.txt'); //Файл до
    assign(f2,'c:\b.txt'); //Файл після
    reset(f1); 
    rewrite(f2);
    while not eof(f1) do
     begin
      readln(f1,s);
      if pos(ourstring,s)<>0 then continue;
      writeln(f2,s);
     end;
    close(f1);
    close(f2);
   end.
Подякували: Replace, koala, Torbins, andrewsereda4

9 Востаннє редагувалося andrewsereda (26.11.2013 01:22:53)

Re: Видалення/зміна запису у файлі

Chemist-i написав:
Прихований текст
//License: GNU GPL v2
var
    f1,f2: text;
    s: string;
   const
    ourstring = 'реплейс'; //наш рядок
   begin
    assign(f1,'c:\a.txt'); //Файл до
    assign(f2,'c:\b.txt'); //Файл після
    reset(f1); 
    rewrite(f2);
    while not eof(f1) do
     begin
      readln(f1,s);
      if pos(ourstring,s)<>0 then continue;
      writeln(f2,s);
     end;
    close(f1);
    close(f2);
   end.

це для 1 рядка, а як щоб за 1-им рядком, разом з ним наступні 4 видалились?

10 Востаннє редагувалося koala (26.11.2013 06:50:35)

Re: Видалення/зміна запису у файлі

До коду Chemist-i треба додати в самісінький кінець, перед останнім end,

  erase(f1);
  rename(f2,'c:\a.txt')

Ну і замість continue краще замінити умову на протилежну і перенести writeln в if. Все ж структурна програма краща за неструктурну такої самої складності :)

andrewsereda написав:

це для 1 рядка, а як щоб за 1-им рядком, разом з ним наступні 4 видалились?

а ви пробували її запустити?

11 Востаннє редагувалося andrewsereda (26.11.2013 19:14:33)

Re: Видалення/зміна запису у файлі

юху, зробив так (правда ще потрібно дописати для випадків коли немає запису, а так то все працює):

procedure delete;
var
name,date:string;
nak, price, kst,j,b:integer;
f1,f:text;
begin
assign (f,'new.txt') ;
assign (f1,'trash.txt');
reset (f);
rewrite (f1);
repeat
clrscr;
write ('введiть номер запису: ');
readln (b);
if b<>0 then
begin
reset (f);
rewrite(f1);
while not eof(f) do
begin
readln(f,nak);
readln(f,name);
readln(f,kst);
readln(f,date);
readln(f,price);
if nak<>b then
begin
writeln(f1,nak);writeln(f1,name);writeln(f1,kst);writeln(f1,date);
writeln(f1,price);
end;
textcolor(8);
writeln ('товаp видалено');
end;
textcolor(8);
writeln('видалити iнший товаp? 1 - так, 0 - нi?');
readln(j);
until j=0;
close (f);
close (f1);
erase(f);
rename(f1,'new.txt');
end;

12

Re: Видалення/зміна запису у файлі

Ну тоді вже пишіть ось так:

procedure delete; var name,date:string; nak, price, kst,j,b:integer; f1,f:text; begin assign 
(f,'new.txt') ; assign (f1,'trash.txt'); reset (f); rewrite (f1); repeat clrscr; write 
('введiть номер запису: '); readln (b); if b<>0 then begin reset (f); rewrite(f1); while not 
eof(f) do begin readln(f,nak); readln(f,name); readln(f,kst); readln(f,date); readln(f,
price); if nak<>b then begin writeln(f1,nak); writeln(f1,name); writeln(f1,kst); writeln(f1,
date);  writeln(f1,price); end; textcolor(8); writeln ('товаp видалено'); end; textcolor(8); 
writeln('видалити iнший товаp? 1 - так, 0 - нi?'); readln(j); until j=0; close (f); close (f1
); erase(f); rename(f1,'new.txt'); end; 

Все одно код нечитаємий, а місця займає менше.

Подякували: Chemist-i1