Консультация № 161105
22.02.2009, 09:29
0.00 руб.
23.02.2009, 09:35
0 8 0
здравствуйте! Создать текстовый файл в любом текстовом редакторе. Выполнить его обработку по указанному в варианте заданию.
вот мой вариант: Написать программу, которая заменяет одно слово текста на другое. Оба слова вводятся с клавиатуры.
Ниже приведен листинг! учитель сказал разобраться с ассигнами. что неправильно?

P.S. на "begin SetWindowCaption('Работа с файлами Автор: Антон Комаров,ИСТ-1-08');" не обращайте внимания-делал в паскаль ABC.

Приложение:
Program CHANGE_WORD;
uses crt,graphABC;
var f,g:text;
s,s1,s2:string;

Procedure CHANGE(c1,c2:string);
var c:string;
begin
assign(g,'WOW.doc');
reset(f);
rewrite(g);
while not eof(f) do begin
while not eoln(f) do
begin
read(f,c);
if c=c1 then c:=c2;
write(g,c);
end;
readln(f); writeln(g);
end;
close(f); close(g);
erase(f); rename(g,s);
end;

begin SetWindowCaption('Работа с файлами Автор: Антон Комаров,ИСТ-1-08');
writeln('name- '); readln(s); assign(f,s);
write('первое слово: '); readln(s1);
write('второе слово: '); readln(s2);
CHANGE(s1,s2);
readkey;
end.

Обсуждение

давно
Мастер-Эксперт
425
4118
23.02.2009, 10:00
общий
Assign - назначает переменной файлового типа какое-то имя файла. Все файловые операции в программе идут именно посредством этих переменных.
А теперь смотрите, что Вы пишете:
assign(g,'WOW.doc');
reset(f);

Вы назначили переменной "g" имя файла "wow.doc" и открываете файл переменной "f". А где имя файла назначенное этой переменной? Оно чёрте где и искать его надо с фонарями. Присваивайте имя файла файловой переменной именно там, где Вы с этим файлом работаете, чтобы Ваша программа была понятной и не надо было бы рыскать по всему тексту пытаясь найти что бы означало то или иное выражение.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
23.02.2009, 10:23
общий
Сэр Анри, так ведь у нас f связана с S которую мы вводим с клавиатуры
давно
Мастер-Эксперт
425
4118
23.02.2009, 10:43
общий
Попробуйте ещё раз прочитать то, что я Вам написал. Если уж тогда не поймёте, то я и не знаю...
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
23.02.2009, 21:03
общий
уже лучше! он старый файл удаляет,а в новом пишет тот же текст что и в старом! как заменить одно слово на другое?

Program CHANGE_WORD;
uses crt,graphABC;
var f,g:text;
s,s1,s2:string;

Procedure CHANGE(c1,c2:string);
var c:string;
begin
assign(f,'C:\Documents and Settings\Пользователь\Рабочий стол\WOW.txt');
assign(g,'C:\Documents and Settings\Пользователь\Рабочий стол\LOGO.txt');
reset(f);
rewrite(g);
while not eof(f) do begin
while not eoln(f) do
begin
read(f,c);
if c=c1 then c:=c2;
write(g,c);
end;
readln(f); writeln(g);
end;
close(f); close(g);
erase(f);
end;

begin
write('Первое слово: '); readln(s1);
write('Второе слово: '); readln(s2);
CHANGE(s1,s2);
readkey;
end.
давно
Мастер-Эксперт
425
4118
24.02.2009, 09:35
общий
Вот смотрите. Вы читаете построчно исходный файл, пока не достигнут конец файла и в прочитанной строке ищете, с помощью функции Pos() первое слово. Если оно найдено, то с помощью процедуры Delete удаляете из строки символы, начиная с найденой позиции (которую Вам даёт функция Pos() ) количество символов как длина первого слова. После этого вставляете втрое слово в строку с помощью процедуры Insert(). Все строки без исключения, и изменённые и неизменённые, записываете во второй файл. Сможете реализовать этот алгоритм?
У Вас там почти уже всё что надо, только добавьте то, что я Вам сказал и удалите те строки кода, которые не вписываются в алгоритм.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
24.02.2009, 19:46
общий
Смотрите я немножко подругому поступил я в процедуру влепил выделение слова из строки! но почему то во второй файл тот же самый текст добавляется! без преобразований!!

Program CHANGE_WORD;
uses crt,graphABC;
var f,g:text;
s1,s2:string;

Procedure CHANGE(c1,c2:string);
var c,st:string; n,l,r:integer;
begin
assign(f,'C:\Documents and Settings\Пользователь\Рабочий стол\WOW.txt');
assign(g,'C:\Documents and Settings\Пользователь\Рабочий стол\LOGO.txt');
reset(f);
rewrite(g);
while not eof(f) do begin
while not eoln(f) do
begin
read(f,c);
n:=length(c); { длина строки }
l := 1;
r := 1;
WHILE r<=n DO BEGIN
WHILE (c[l]=' ') and (l<=n) DO l:=l+1; { поиск начала слова }
r := l;
WHILE (c[r+1]<>' ') and (r+1<=n) DO r:=r+1; { поиск конца слова }
st := copy(c,l,r-l+1); { выделяем слово из строки }
l := r+1;
IF st = c1 THEN st:=c2; { Заменяем }
END;
write(g,c);
end;
readln(f); writeln(g);
end;
close(f); close(g);
erase(f);
end;

begin SetWindowCaption('Работа с файлами Автор: Антон Комаров,ИСТ-1-08');
write('первое слово: '); readln(s1);
write('второе слово: '); readln(s2);
CHANGE(s1,s2);
readkey;
end.
давно
Мастер-Эксперт
425
4118
25.02.2009, 08:46
общий
Комаров Антон Сергеевич
Вот это совершенно лишнее:
Код:
while not eoln(f) do

Конструкция
readLn(f,c);
Будет прекрасно читать целую строку файла, от начала и до конца.
К сожалению дальше я ничего не понял. Однако вот эта конструкция:
Код:
write(g,c);

однозначно говорит о том, что Вы во второй файл записываете именно ту строку, которая была в первом.
Вот вариант с применением функции Pos():
Код:
While not Eof(f) Do
Begin
ReadLn(f, c);
n:=-1;
While n<>0 Do
Begin
n:=Pos(s1, c);
If n>0 Then
Begin
Delete(c, n, Length(s1));
Insert(s2, c, n);
End;
WriteLn(g, c);
End;
End;
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
25.02.2009, 16:24
общий
спасибо!!
Форма ответа