Помощь - Поиск - Пользователи - Календарь
Полная версия: Текстовые файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Investor
С помощью какого алгоритма можно осуществить поиск окончиния слова в текстовом файле и заменить его на другое?
klem4
Что значит окончание слова ? Да еще и в файле... можно выделать несколько последних букв напирмер, окончание это слишком расплывчато
APAL
Строки и работа с ними: http://forum.pascal.net.ru/index.php?showtopic=2361


добавлено klem4

Apal yes2.gif

+ FAQ : Файлы
volvo
Investor, я же приводил в твоей прошлой теме готовую программу. Чем она тебя не устроила? Достаточно просто читать из одного файла, преобразовывать строку как я показал, и писать в другой файл, а потом удалить старый файл и переименовать новый...

В чем проблема?
Investor
Цитата(volvo @ 11.12.2005 14:49) *

Investor, я же приводил в твоей прошлой теме готовую программу. Чем она тебя не устроила? Достаточно просто читать из одного файла, преобразовывать строку как я показал, и писать в другой файл, а потом удалить старый файл и переименовать новый...

В чем проблема?

Дело в том, что твоя готовая программа не работает. Там, например, есть неизвестные паскалю функции и типы данных.

Цитата(APAL @ 11.12.2005 14:47) *

Строки и работа с ними: http://forum.pascal.net.ru/index.php?showtopic=2361
добавлено klem4

Apal yes2.gif

+ FAQ : Файлы

Спасибо, начинаю врубаться. Но пока не сильно
volvo
Я же оставил в твоей теме ссылку, и написал тебе в ПМ, ОТКУДА надо скачать функцию, чтобы все заработало !!! mad.gif Что за люди - НЕ РАБОТАЕТ, и ВСЕ !!! Если скопированное символ в символ не запускается...

Вот теперь работает ???

{
!!! Это - ДОСЛОВНО !!! Функция, которая лежит по ссылке,
находящейся у тебя в топике и в PM !!!
}

const
delimiter = [#32, ',', '.', '!', ':'];
type
wrd_info = record
start, len: byte;
end;

function get_words(s: string;
var words: array of wrd_info): integer;
var
count: integer;

i, curr_len: byte;

begin
count := -1; i := 1;
while i <= length(s) do begin

while (s[i] in delimiter) and (i <= length(s)) do inc(i);

curr_len := 0;
while not (s[i] in delimiter) and (i <= length(s)) do begin
inc(i); inc(curr_len);
end;

if curr_len > 0 then begin
inc(count);
with words[count] do begin
start := i - curr_len;
len := curr_len
end;
end;

end;
get_words := count + 1;
end;

{ !!! Это - из моего ответа в твой топик !!! }
const
max_word = 255;
var
words: array[1 .. max_word] of wrd_info;
s: string;
i, n: integer;

begin
readln(s);
n := get_words(s, words);
for i := 1 to n do
if copy(s, words[i].start + words[i].len - 3, 3) = 'ина'
then s[ words[i].start + words[i].len - 1 ] := ' ';
{ (чтобы не было проблем со сдвигом строки) }

writeln(s);
end.


А теперь - ВНИМАНИЕ !!! Вопрос:
Каких типов данных и функций не хватает для запуска программы? mad.gif
Investor
function get_words(s: string;
var words: array (чё тут нада поставить??? - 1..max_wrd не подходит) of wrd_info): integer
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.