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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2010, 21:33   #1
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию Pascal. Задача с файлами.

Добрый вечер всем. Пожалуйста помогите доделать задачку:
Нужно перезаписать файл с изменением данных. Нада найти в старом файле строку и поменять ее на другую
Вот что я сделал

Код:
program my_22;
Var F1, F2: File;
    CountRead, CountWritten : Word;
    Buf : Array [1..20048] Of Char;
Begin
    Assign(F1, 'C:\1.txt');
    Reset(F1, 1); 
    Assign(F2, 'C:\2.txt');
    ReWrite(F2, 1); 
    Repeat
        BlockRead(F1, Buf, SizeOf(Buf), CountRead);
        BlockWrite(F2, Buf, CountRead, CountWritten);
    Until (NumRead = 0) Or (CountWritten <> CountRead);
    Close(F1);
    Close(F2);
End.
Копирует нормально без потерь, нужно доделать что б находило отету строку которую нужно как только она начнется то поменять ее на другую такой же длины.

ПОлучается нужно добавить в этот код
Код:
Var stroka1, stroka2:string;
И ввод, и тогда код получится такой:
Код:
program my_22;
Var F1, F2: File;
    CountRead, CountWritten : Word;
    Buf : Array [1..20048] Of Char;
    stroka1, stroka2:string;
Begin
Write('Введите строку'); Readln(stroka1);
stroka2='abcdef'
    Assign(F1, 'C:\1.txt');
    Reset(F1, 1); 
    Assign(F2, 'C:\2.txt');
    ReWrite(F2, 1); 
    Repeat
        BlockRead(F1, Buf, SizeOf(Buf), CountRead);
        BlockWrite(F2, Buf, CountRead, CountWritten);
    Until (NumRead = 0) Or (CountWritten <> CountRead);
    Close(F1);
    Close(F2);
End.
А как сделать поиск я не могу придумать, помогите мне пожалуйста
Novi4ok_11 вне форума Ответить с цитированием
Старый 11.12.2010, 21:37   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Файл текстовый можно обойтись readln. На какую, что менять? Критерий поиска?
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 11.12.2010, 21:48   #3
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

Я вот тут написал
Код:
Write('Введите строку'); Readln(stroka1);
stroka2='abcdef'
Первая - что менять, вторая - на что

А как обойтись с помощью readln?

Последний раз редактировалось Stilet; 12.12.2010 в 13:17.
Novi4ok_11 вне форума Ответить с цитированием
Старый 11.12.2010, 21:57   #4
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
 Assign(F1, 'C:\1.txt');
 Reset(F1); 
 while not(eof(f)) do
  begin
   readln(f1,str);
   if pos(stroka,str)=0 then writeln(f2,str)
     else begin
            //заменяете вашу подстроку на другую
            writeln(f2,str);
           end;

  end;
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 11.12.2010, 22:06   #5
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

а можете обьяснить пожалуйста Ваш код

Код:
program my_22;
Var F1, F2: text;
    CountRead, CountWritten : Word;
    Buf : Array [1..20048] Of Char;
    str1, str2:string;
str:string;
Begin
str1:='abcd';
str2:='dcef';
    Assign(F1, 'C:\1.txt');
    Reset(F1);
    Assign(F2, 'C:\2.txt');
    ReWrite(F2);
 while not(eof(f1)) do
  begin
   readln(f1,str);
   if pos(str1,str)=0 then writeln(f2,str)
     else begin

            writeln(f2,str);
           end;

  end;
End.
Вот код который я сделал с Вашим исправлением но не работает(((

Копмилируется но файл не переписует

Помогите пожалуйста

Последний раз редактировалось Stilet; 12.12.2010 в 13:21.
Novi4ok_11 вне форума Ответить с цитированием
Старый 11.12.2010, 23:20   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Код:
 if pos(str1,str)=0 then writeln(f2,str)
     else begin

            writeln(f2,str2);
           end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 11.12.2010, 23:30   #7
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

Сделал но серавно не чего в файле не меняется, причем pos это если строка будит не больше 255 символов а файл у меня на 10000 символов, строка тоже специфическая она не повторяется ее нужно поменять просто на другие символы к примеру было "абс" стало "ссс"((((
Novi4ok_11 вне форума Ответить с цитированием
Старый 11.12.2010, 23:32   #8
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Вместо комментариев вы должны были написать код, где бы у вас строка менялась на другую. Mad_Cat сегодня уже такую задачу выкладывал. Лучше сами подумайте как это сделать

Цитата:
Сообщение от Novi4ok_11 Посмотреть сообщение
Сделал но серавно не чего в файле не меняется, причем pos это если строка будит не больше 255 символов а файл у меня на 10000 символов, строка тоже специфическая она не повторяется ее нужно поменять просто на другие символы к примеру было "абс" стало "ссс"((((
Просто процедура поиска подстроки усложнится
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 11.12.2010, 23:41   #9
Novi4ok_11
Форумчанин
 
Регистрация: 11.12.2010
Сообщений: 110
По умолчанию

Мне нужно найти в файле на 10000 символов найти нужную строку и поменять ее на другую и записать это в другой файл: тоесть файл будет как первый только он будит отличатся на 1 строку

Код:
program my_22;
Var F1, F2: text;
    CountRead, CountWritten : Word;
    Buf : Array [1..20048] Of Char;
    str1, str2:string;
str:string;
Begin
str1:='abcd';
str2:='dcef';
    Assign(F1, 'C:\1.txt');
    Reset(F1);
    Assign(F2, 'C:\2.txt');
    ReWrite(F2);
 while not(eof(f1)) do
  begin
   readln(f1,str);
   if pos(str1,str)=0 then writeln(f2,str)
     else begin

            writeln(f2,str2);
           end;

  end;
End.
Я отак сделал но не чего не работает файл 2.тхт пустой
Novi4ok_11 вне форума Ответить с цитированием
Старый 11.12.2010, 23:43   #10
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

1. Посмотрите команду pos -что там на первом месте идет и что на втором
2.
Код:
if pos(str1,str)=0 then writeln(f2,str)
     else begin

            writeln(f2,str);
Сравните что у вас
3. Если у вас в строке больше 255 символов, то считывать через readln не пойдет
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с файлами maloy-rom Помощь студентам 1 09.06.2009 21:17
Задача с файлами innaa639 Паскаль, Turbo Pascal, PascalABC.NET 7 08.12.2008 12:33
Задача с файлами innaa639 Помощь студентам 2 07.12.2008 21:49
Задача с файлами. bygoga Паскаль, Turbo Pascal, PascalABC.NET 9 05.12.2008 21:45
Задача с файлами Наташа Общие вопросы C/C++ 4 05.01.2007 20:23