Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2019, 22:14   #1
Maria_Me
Новичок
Джуниор
 
Регистрация: 29.03.2019
Сообщений: 1
По умолчанию Подследняя подсказка для программы

Здравствуйте. Мне нужна последняя подсказка для программы - удаление из текста каждое N-ое вхождение в него заданного слова.
При этом:
Данные записываются в файл прямого доступа (если входные данные символы, то сначала нужно перевести их в коды, а потом записать в файл);
обработать данные (использовать прямой доступ к компонентам файла) и записать результат в текстовый файл.
После обработки файла создать его копию путем записи его содержимого в другой файл с использованием механизма «бестиповых файлов».

Моя программа преобразует ввод пользователя в ascii-код тип string
Файл тоже преобразуется в элементы ascii-кодов в file of integer

То есть, например у меня есть файл:
one one
one one one
three
То он преобразуется в строку из ascii-кодов
11111010132116119111321161041141011 01101

Пользователь введет слово "one", которое хочет удалить и оно тоже преобразуется в ascii-коды (111110101)

Проблема заключается в том, что я не могу придумать, как используя pos и delete удалить совпадение.
Код:
Uses crt;

var
  f, f2: text;
  f3:file of integer;
  i, j, n, time, k,z: integer;
  s, delword,codeDel,s1,s2,asc: string;
  del, code:integer;

begin
clrscr;
  readln(delword);
  for i:=1 to length(delword) do
   begin
   str(ord(delword[i]),s1);
   codeDel:=codeDel+s1;
   end;


  Assign(f, 'input.txt');
  reset(f);

  while not eof(f) do
  begin
    readln(f, s);
    writeln(s);
  end;
  Close(f);
  reset(f);
  assign(f3, 'ascii');
  rewrite(f3);

  while not eof(f) do
   begin
   readln(f,s);
   writeln(s);
   for i:=1 to length(s) do
    begin
     k:=ord(s[i]);
     write(f3,k);
    end;
    write(#13);
   end;
   close(f3);
   reset(f3);

   Assign(f2, 'output.txt');
   rewrite(f2);

{Здесь ниже проблема}
  while not eof(f3) do
  begin
    inc(z);
    read(f3, k); { не могу придумать, на что заменить к, чтобы по всей строке проверка была} 
{Ведь к здесь будет посимвольно считываться, а не построчно}
{Потом я бы преобразовал строку в string, и pos с delete начинал бы удалять совпадения}
    write(k);      
    str(k,asc);
    for i := 1 to length(asc) do
    begin
      if pos(codeDel, asc) <> 0 then begin
        delete(asc, pos(codeDel, asc), length(codeDel));
      end;
      write(f2,k)
    end;
  end;
  writeln(asc);
  val(asc,k1,code);
  Close(f);
  close(f2);
  close(f3);
end.
P.S. Таким образом еще не конец, если получится, то удалятся все совпадения. Но я тогда просто вставлю цикл while для удаления определенного количества свопадений.

Помогите, пожалуйста. Спасибо.
Maria_Me вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсказка Bariy47 Свободное общение 6 14.05.2012 14:56
Нужна подсказка в завершении программы! vtkmybr Общие вопросы C/C++ 5 27.08.2010 23:45
Подсказка artemavd Общие вопросы Delphi 1 17.07.2008 19:34
C# подсказка MAcK Общие вопросы .NET 4 10.07.2008 12:38