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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2011, 12:19   #1
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
Печаль заменить в файле + на -

Нужно заменить в файле + на - и наоборот!
Код:
uses crt;
var s:string;i:integer;f:file of string;
begin
clrscr;
assign(f,'C:\12.txt');
rewrite(f);
while not eof(f) do
   begin
   for i:=1 to length(s) do
      begin
      if s[i]='-' then
      s[i]:='+';
      if s[i]='+' then
      s[i]:='-';
      end;
   end;
close (f);
readln;
end.
Что я не так делаю? В результате не меняет + на - и наоборот, а просто очищает файл и все. Помогите пожалуйста.
gylayko вне форума Ответить с цитированием
Старый 03.12.2011, 12:44   #2
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Тебе надо:
1) Прочитать файл и записать прочитанное в переменную "s";
2) Поменять "+" на "-" (и наоборот) в переменной "s";
3) Сохранить измененную строку "s" в файле "f".
Первого и третьего пункта у тебя нет.
Skalp вне форума Ответить с цитированием
Старый 03.12.2011, 12:49   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

хм.. как все запущено..
Не надо делать file of string. Ты стираешь файл при открытии через rewrite.
Либо делай файл типа text - но тогда потребуется 2 файла (из одного читаешь, в другой пишешь, потом первый удаляешь, второй переименовываешь)
Либо делай file of char, открывай его через reset и при встрече +/- откатывайся назад на один символ и пиши, что надо.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 03.12.2011, 13:03   #4
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

Цитата:
Сообщение от Skalp Посмотреть сообщение
Тебе надо:
1) Прочитать файл и записать прочитанное в переменную "s";
Я записываю файл в переменную f через assign!
Цитата:
Сообщение от Skalp Посмотреть сообщение
3) Сохранить измененную строку "s" в файле "f".
Как это сделать?
gylayko вне форума Ответить с цитированием
Старый 03.12.2011, 13:29   #5
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

Цитата:
Сообщение от gylayko Посмотреть сообщение
Я записываю файл в переменную f через assign!
Тут ты только ассоциируешь (не записываешь) переменную "f" с указанным файлом.

Чтобы прочитать текст из файла, открой файл для чтения с помощью "reset", потом считай из файла текст с помощью "read", присвой прочитанное переменной "s", сделай изменения в строке, сохрани измененное с помощью "write".

И кстати, для работы с текстом лучше для файловой переменной указывать тип не file of string, а textfile или просто text (не помню уже).

Последний раз редактировалось Skalp; 03.12.2011 в 13:34.
Skalp вне форума Ответить с цитированием
Старый 03.12.2011, 13:30   #6
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

короче я изменил, теперь вот так:
Код:
uses crt;
var s:string;i:integer;f,f2:text;
begin
clrscr;
assign(f,'C:\12.txt');
reset(f);
while not eof(f) do
   begin
   readln(f,s);
   for i:=1 to length(s) do
      begin
      if s[i]='-' then
      s[i]:='+' else
      if s[i]='+' then
      s[i]:='-';
      assign(f2,'C:\123.txt');
      rewrite(f2);
      write(f2,s);
      close(f2);
      end;
   end;
close (f);
readln;
end.
Но теперь меняет непонятно что, выводит просто "+-" и все, а не меняет в тексте все + и -! Что я не так сделал?
gylayko вне форума Ответить с цитированием
Старый 03.12.2011, 13:31   #7
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

Ага, поменял readln на read. Но теперь меняет только первую строку из файла, а нужно чтобы все, как это сделать?
gylayko вне форума Ответить с цитированием
Старый 03.12.2011, 13:41   #8
Skalp
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 52
По умолчанию

если у тебя в файле несколько строк, то я думаю, что надо добавить цикл while not eoln после цикла while not eof

И не надо повторно ассоциировать файл, причем с другой переменной.
Skalp вне форума Ответить с цитированием
Старый 03.12.2011, 14:44   #9
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Вот так примерно:
Код:
var
  f: file of char;
  c: char;
....
  assign(f,'text.txt');
  reaset(f);
  while not EoF(f) do begin
    read(f,c);
    if c in ['+','-'] then begin
      Seek(f,FilePos(f)-1);
      if c='+' then write(f,'-') else write(f,'+')
    end
  end;
  close(f);
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 03.12.2011, 16:43   #10
gylayko
Форумчанин
 
Регистрация: 14.09.2011
Сообщений: 203
По умолчанию

на write(f,'-') ругается, что отсутствует идентификатор переменной! что делать?
gylayko вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как заменить символ в текстовом файле? mrBond007 Microsoft Office Excel 13 18.08.2011 18:13
Как в файле заменить один символ на другой? RockGirl Помощь студентам 0 16.05.2011 09:40
Работа с файлами (найти и заменить в файле)) Смородинка Общие вопросы C/C++ 0 04.12.2010 18:08
Помогите заменить байты в файле Dax Общие вопросы Delphi 3 21.06.2007 10:24