IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Удалить слово, Из текстового файла
Wait
сообщение 27.02.2005 17:43
Сообщение #1


Гость






дан текстовый файл... Пользователь вводит слово. Если оно есть в файле, то прога удаляет его. Напишите, плиз, основную процедуру удаления. А то, что только не делал, и слова отделял, и сравнивал - не пашет...

Код
program ex1;
uses crt;
procedure deleting(infile,outfile, word:string);
var f_,v:text; st,wt:string; chars:set of char;i:byte;
begin
chars:=['a'..'z'];
assign(f_,infile);
reset(f_);
assign(v,outfile);
rewrite(v);
while not eof(f_) do begin
readln(f_,st);
i:=1;
repeat
while not (st[i] in chars) and (i<=length(st)) do inc(i);
wt:='';
while (st[i] in chars) and (i<=length(st)) do
begin
wt:=wt+st[i];
inc(i);
end;
if length(wt)<>0 then writeln(v,wt);
until (i>length(st))
end;
close(f_);
close(v);
reset(v);
while not eof(v) do
begin
readln(v,st);
if st=word then delete(st,1,length(word));
end;
close(v);
reset(v);
end;
var word1,st1,filename:string; f:text;
begin
write('word: ');
readln(word1);
writeln('from <f>ile?');
if (readkey='f') then
begin
write('filename: ');
readln(filename)
end else
begin
assign(f,'d:\bin\b.dat');
rewrite(f);
writeln('input text');
repeat
readln(st1);
if st1<>'' then writeln(f,st1);
until st1='';
close(f);
filename:='d:\bin\b.dat';
end;
deleting(filename,'d:\bin\res.dat',word1);
assign(f,'d:\bin\res.dat');
reset(f);
while not eof(f) do
begin
readln(f,st1);
writeln(st1);
end;

end.


Код ставим в теги...
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 1.03.2005 21:57
Сообщение #2


Гость






Ну тогда вот так (приведенная здесь функция isLetter проверяет, является ли символ латинской буквой; для работы с кириллицей нужно немного изменить функцию, поищите по форуму, она выкладывалась...):
Код
function isLetter(ch: char): boolean;
 begin
   isLetter := upcase(ch) in ['A' .. 'Z']
 end;

(* Теперь функция del_word удаляет только те последовательности,
справа и слева от которых стоят символы, не являющиеся буквами *)
function del_word(myword, str: string): string;
 var p: byte;
 begin
   p := pos(myword, str);
   if p <> 0 then
     if ( (p > 1) and (not isLetter(str[pred(p)])) ) and
        (
          (p + length(myword) < length(str)) and
          (not isLetter( str[ succ(p + length(myword)) ] ))
        )
        then delete(str, p, length(myword));
   del_word := str;
end;
 К началу страницы 
+ Ответить 
Wait
сообщение 2.03.2005 13:35
Сообщение #3


Гость






Очень извиняюсь, но теперь она не удаляет просто слова, не входящего ни в какие слова, а то, что я просил, она выполняет. Здесь что-то не так, наверно, проверьте, пожалуйста еще раз, если не трудно.Вообще, моя задача звучит так: написать программу, которая содержит процедуру, которая удаляет слово в файле. Возможно, что-то в проге не так, но я все проверил.

Код
undefinedprogram ex1;
uses crt;
procedure del(infile,outfile,w:string);
var f_in,f_out,f_:text;word,s,wt:string;chars:set of char; i:byte;
function letter(ch:char):boolean;
begin
letter:=ch in ['a'..'z']
end;
function del_word(str,myword:string):string;
var p:byte;
begin
p:=pos(myword,str);
if p<>0 then
if ((p>1)and(not letter(str[pred(p)])))
and((p+length(myword)<length(str))and(not letter(str[succ(p+length(myword))])))
then
delete(str,p,length(myword));
del_word:=str;
end;
begin
chars:=['a'..'z'];
assign(f_in,'b.dat');
reset(f_in);
assign(f_out,'res.dat');
rewrite(f_out);
assign(f_,'res1.dat');
rewrite(f_);
while not eof(f_in) do begin
readln(f_in,s);
i:=1;
repeat
while not(s[i] in chars) and (i<=length(s)) do inc(i);
wt:='';
while (s[i] in chars) and (i<=length(s)) do
begin
wt:=wt+s[i];
inc(i);
end;
if length(wt)<>0 then writeln(f_out,wt);
until(i>length(s))
end;
close(f_in);
close(f_out);
reset(f_out);
while not eof(f_out) do begin
readln(f_out,s);
writeln(f_,del_word(s,w));
end;
close(f_);
close(f_out);
end;
var f:text; word1,s1:string;
begin
writeln('vvedite slovo');
readln(word1);
assign(f,'b.dat');
rewrite(f);
writeln('input text');
repeat
readln(s1);
if s1<>'' then writeln(f,s1);
until s1='';
close(f);
writeln('---------------');
del('res.dat','res1.dat',word1);
assign(f,'res1.dat');
reset(f);
while not eof(f) do
begin
readln(f,s1);
writeln(s1);
end;
readkey
end.






 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 22:34
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"