Подскажите, как сделать программу для удаления из текста каждое N-ое вхождение в него заданного слова.
При этом:
Данные записываются в файл прямого доступа (если входные данные символы, то сначала нужно перевести их в коды, а потом записать в файл);
обработать данные (использовать прямой доступ к компонентам файла) и записать результат в текстовый файл.
После обработки файла создать его копию путем записи его содержимого в другой файл с использованием механизма «бестиповых файлов».
НЕ ОБРАЩАЙТЕ ВНИМАНИЕ ПРО PHP, просто так код более читабельный
PHP код:
Uses crt;
type
matr = array[1..5]of integer;
tFile = file of integer;
//Вывожу на экран, что есть в файле
procedure show(var f:text);
var s:string;
begin
Assign(f, 'input.txt');
reset(f);
while not eof(f) do
begin
readln(f, s);
writeln(s);
end;
Close(f);
end;
//Перевожу символы в ascii-коды
(здесь пользователь вводит слово, которое надо удалить)
procedure input(var a:matr; var delword:string);
var i:integer;
begin
readln(delword);
for i:=1 to length(delword) do
begin
a[i]:=ord(delword[i]);
end;
end;
//Перевожу все символы в ascii-коды
(здесь слова, которые были в файле)
procedure transfer(var f:text; var f3:tFile);
var s:string; i,k:integer;
begin
reset(f);
assign(f3, 'ascii');
rewrite(f3);
while not eof(f) do
begin
readln(f,s);
for i:=1 to length(s) do
begin
k:=ord(s[i]);
write(f3,k);
end;
write(f3,10);
end;
close(f3);
end;
//Неудачная попытка удалить
procedure process (var f3:tFile; var f2:text;a:matr;delword:string);
var k,i,p, time, count:integer; flag:boolean;
begin
flag:=false;
readln(time);
count :=0;
reset(f3);
Assign(f2, 'output.txt');
rewrite(f2);
while not eof(f3) do
begin
read(f3, k);
for i:= 1 to length(delword) do
begin
if a[i] = k then
begin
inc(count);
if count mod time = 0 then
k:=32;
end
else
if k = 10 then writeln(f2, '');
if k <> 10 then
write(f2,chr(k));
write(chr(k));
end;
end;
close(f2);
close(f3);
end;
var
f, f2: text;
f3:tFile;
delword: string;
a:matr; time:integer;
begin
clrscr;
show(f);
input(a, delword);
transfer(f, f3);
process(f3, f2, a, delword);
end.
У меня каждый символ в слове, котором пользователь ввел сравнивается с каждым символом слова, которые есть в файле. Поэтому вывод неправильный. Получается один и тот же символ выводится несколько раз.
Подскажите, как можно это реализовать(алгоритм) сравнение для удаления.
Спасибо.