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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2011, 15:11   #1
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию Организовать замену в файле.

Задание.
Организовать текстовый файл,который состоит из N строк.После,организовать замену в файле."Старый" и "новый" символ запрашиваются и вводятся с клавиатуры.

Мои наработки
Код:
Program files;
 Uses crt;
  const
    n=10;
  var
    i:integer;
    t,f:text;
    s:string;
    p:char;
  begin
   clrscr;
   assign(t,'file1.txt');
   rewrite(t);
   for i:=1 to n do
     begin
       readln(s);
       writeln(t,s);
     end;
   close(t);
   reset(t);
   assign(f,'file2,txt');
   rewrite(f);
   while not eof(t) do
     begin
       writeln('If you want to change symbols in file_2 press y/n')
       readln(p);
   case p of
   'y':begin
           readln(f,s);
           If S[i]='a' then S[i]:='b';
           writeln(f,s);
         end;
    'n': writeln('end of program');
         end;
         end;
close(t);
close(f);
end.
Выскакивает ошибка: "File not open for input" тоесть как я понял файл не открыт для записи.
И если возможно подсказать что я делаю не так.Возможно есть ошибки которые не заметил.
Прошу прощения убрал строку где программа зацикливалась,не заметил когда писал.
Люблю на ты.Я человек простой

Последний раз редактировалось Leshii; 14.09.2011 в 15:21.
Leshii вне форума Ответить с цитированием
Старый 14.09.2011, 15:24   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну как минимум не компилится из-за забытого ; и в case лишний енд вроде, вот исправленный:
Код:
    case p of
      'y':
        begin
          for i := 1 to n do
          begin
            readln(f, s);
            if S[i] = 'a' then S[i] := 'b';
            writeln(f, s);
          end;
        end;
      'n': writeln('end of program'); 
    end;
  end;
А ошибка где? У меня после ввода и выбора y вылетает с малопонятной ошибкой (в PascalABC).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2011, 16:03   #3
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Я кажется понял суть ошибки,это есть неверное трактования мною смысла задачиСейчас переделаю.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 14.09.2011, 17:06   #4
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Сообщений: 376
По умолчанию

Получилось что то эдакое после переделки.

Код:
Program files;
 Uses crt;
  const
    n=10;
  var
    i:integer;
    t,f:text;
    s:string;
    s1,s2:char;
begin
   clrscr;
   assign(t,'file1.txt');
   rewrite(t);
   for i:=1 to n do
     begin
       readln(s);
       writeln(t,s);
     end;
      close(t);
      reset(t);
       assign(f,'file2,txt');
       rewrite(f);
        writeln('Enter Old_Symbol: ');
         readln(s1);
          writeln('Enter New_Symbol: ');
           readln(s2);
             s1:=s2;
   while not eof(t) do
     begin
      readln(t,s);
      writeln(f,s1);
     end;
close(t);
close(f);
end.
Вроде логику уловил.Теперь собственно вопрос
Как сделать так чтобы менялся именно тот символ который я ввожу и который может находится не только в одной строке?
Скажем ввожу строку символов : &*()(*) %%% ,после заменяю любой старый символ (себто %) на новый (?) и поидее должен получить вместо процентов знаки вопроса.
Суть вопроса описал выше,собственно нужна подсказка как)А уж свой мозг я постараюсь напрячь.
Люблю на ты.Я человек простой
Leshii вне форума Ответить с цитированием
Старый 14.09.2011, 17:46   #5
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Код:
        readln(s1);
        writeln('Enter New_Symbol: ');
        readln(s2);
        s1:=s2;
А смысл в этом какой?оО

Дальше что-то не понял как и что тут заменяется, но по-моему надо как-то так: прочитал строку из старого, просмотрел строку и заменил нужные символы, записал в новый.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2011, 19:43   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) как абсолютно правильно заметил Alex11223
строчку
s1:=s2;
выкинуть напрочь!

2) основной цикл может быть, например, такой:
Код:
   while not eof(t) do
     begin
      readln(t,s);
      while Pos(s1, s)>0 do
             s[ Pos(s1, s) ] := s2;
      writeln(f,s);
     end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на замену больших букв маленькими [Паскаль] sk8blind Помощь студентам 2 02.12.2010 08:52
Как реализовать замену клеток s3m Microsoft Office Access 9 18.11.2010 13:59
Условие на замену pchakoff Microsoft Office Access 6 11.12.2009 23:01
макрос на поиск и замену. Что не так? Viento Microsoft Office Excel 6 11.02.2009 22:36