Показать сообщение отдельно
Старый 31.03.2019, 19:38   #1 (permalink)
Maria_Meri
Новичок
 
Регистрация: 31.03.2019
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Небольшая подсказка

Подскажите, как сделать программу для удаления из текста каждое 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
(fs);
    
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:stringi,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,ptimecount:integerflag:boolean;
begin
flag
:=false;
readln(time);
count :=0;
 
reset(f3);
   
Assign(f2'output.txt');
   
rewrite(f2);
  while 
not eof(f3) do
  
begin
    read
(f3k);
    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 
10 then writeln(f2'');
      if 
<> 10 then
      write
(f2,chr(k));
      
write(chr(k));

      
end;
    
end;
  
close(f2);
  
close(f3);
 
end;
 
 
var
  
ff2text;
  
f3:tFile;
  
delwordstring;
  
a:matrtime:integer;
begin
clrscr
;
show(f);
input(adelword);
transfer(ff3);
process(f3f2adelword);
end
У меня каждый символ в слове, котором пользователь ввел сравнивается с каждым символом слова, которые есть в файле. Поэтому вывод неправильный. Получается один и тот же символ выводится несколько раз.

Подскажите, как можно это реализовать(алгоритм) сравнение для удаления.
Спасибо.
Maria_Meri вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070