Поиск и замена строки в файле
От: ionicman  
Дата: 05.09.07 04:13
Оценка:
Может кто сталкивался с проблемой?

Надо заменить все вхождения строки в файле на другую.
Без всяких STL и др.

Максимальный размер буфера под данные может быть 64 кб, размер поисковой и заменяемой строк — любые, размер файла любой.

Я накидал в принципе уже — но уж больно как то не красиво получается, хотя работает :D Мож есть у кого варианты?

Заранее спасибо.
Re: Поиск и замена строки в файле
От: Кодт Россия  
Дата: 05.09.07 09:55
Оценка:
Здравствуйте, ionicman, Вы писали:

I>Надо заменить все вхождения строки в файле на другую.

I>Без всяких STL и др.

Перл не предлагать?

I>Максимальный размер буфера под данные может быть 64 кб, размер поисковой и заменяемой строк — любые, размер файла любой.


Искомая строка заведомо влезает в буфер?
Если да, то подумай об алгоритме Бойера-Мура.
Если нет — то Кнута-Морриса-Пратта. (К которому, как мне кажется, сведётся любой наивный алгоритм — только с ужасами и провалом производительности).

I>Я накидал в принципе уже — но уж больно как то не красиво получается, хотя работает :D Мож есть у кого варианты?


Покажи свой код...
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[2]: Поиск и замена строки в файле
От: ionicman  
Дата: 05.09.07 10:32
Оценка:
К>Перл не предлагать?
ага :D

I>>Максимальный размер буфера под данные может быть 64 кб, размер поисковой и заменяемой строк — любые, размер файла любой.


К>Искомая строка заведомо влезает в буфер?

нет, к сожелению
К>Если нет — то Кнута-Морриса-Пратта. (К которому, как мне кажется, сведётся любой наивный алгоритм — только с ужасами и провалом производительности).
Если я правильно помню — этот алгоритм основан на создании таблицы — словаря слов?
проблема в том, что файл может быть двоичным, в котором есть строки, но разбить его на словарь не получится.
Единственное, что точно — это то что поисковая строка и строка — заместитель — обычные строки

I>>Я накидал в принципе уже — но уж больно как то не красиво получается, хотя работает :D Мож есть у кого варианты?


Здоровый он, да и медленный просто хана — я по этому и написал сюда. Работает по очень простому алгоритму — вдоль файла двигается окно и проверяется все до первого частичного совпадения с образцом. Если образец лишь частично совпал — эта часть переносится в начало окна и догружается следующая. Если следующая часть совпала — то приходится выходной файл отматывать на длину уже записаного куска ( он нам не нужен — мы должны его заменить ) и обрезать его.
Re[3]: Поиск и замена строки в файле
От: Кодт Россия  
Дата: 05.09.07 12:32
Оценка:
Здравствуйте, ionicman, Вы писали:

К>>Искомая строка заведомо влезает в буфер?

I>нет, к сожелению

Но хотя бы в памяти её саму можно держать?
Или приходится тоже из другого файла по кусочкам подкачивать?

К>>Если нет — то Кнута-Морриса-Пратта. (К которому, как мне кажется, сведётся любой наивный алгоритм — только с ужасами и провалом производительности).

I>Если я правильно помню — этот алгоритм основан на создании таблицы — словаря слов?

Нет, он основан на таблице букв.

Может, тебе поспособствует вот эта ссылка: http://algolist.manual.ru/search/esearch/
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: Поиск и замена строки в файле
От: ionicman  
Дата: 06.09.07 04:55
Оценка:
ЗК>Но хотя бы в памяти её саму можно держать?
К>Или приходится тоже из другого файла по кусочкам подкачивать?
нет, она целиком в памяти, как и строка замещения

К>Нет, он основан на таблице букв.

понял.

К>Может, тебе поспособствует вот эта ссылка: http://algolist.manual.ru/search/esearch/

оо. спс польшое за информацию. похоже то что надо.
Re[3]: Поиск и замена строки в файле
От: Alexander  
Дата: 06.09.07 05:49
Оценка: +1
Здравствуйте, ionicman, Вы писали:

I>Здоровый он, да и медленный просто хана — я по этому и написал сюда. Работает по очень простому алгоритму — вдоль файла двигается окно и проверяется все до первого частичного совпадения с образцом. Если образец лишь частично совпал — эта часть переносится в начало окна и догружается следующая. Если следующая часть совпала — то приходится выходной файл отматывать на длину уже записаного куска ( он нам не нужен — мы должны его заменить ) и обрезать его.

А почему бы, пока есть частичное совпадение, ничего не писать в файл? Если при добавлении очередного символа оказалось, что фрагмент не совпадает с искомым словом, скидываем посимвольно начало буфера вплоть до символа, начиная с которого искомое слово и имеющаяся часть буфера совпадают. Звучит чуть замысловато, но идея простая.

Best regards,
Alexander.
Re[4]: Поиск и замена строки в файле
От: ionicman  
Дата: 06.09.07 06:39
Оценка:
Здравствуйте, Alexander, Вы писали:

A>Здравствуйте, ionicman, Вы писали:


I>>Здоровый он, да и медленный просто хана — я по этому и написал сюда. Работает по очень простому алгоритму — вдоль файла двигается окно и проверяется все до первого частичного совпадения с образцом. Если образец лишь частично совпал — эта часть переносится в начало окна и догружается следующая. Если следующая часть совпала — то приходится выходной файл отматывать на длину уже записаного куска ( он нам не нужен — мы должны его заменить ) и обрезать его.

A>А почему бы, пока есть частичное совпадение, ничего не писать в файл? Если при добавлении очередного символа оказалось, что фрагмент не совпадает с искомым словом, скидываем посимвольно начало буфера вплоть до символа, начиная с которого искомое слово и имеющаяся часть буфера совпадают. Звучит чуть замысловато, но идея простая.

Может получится так, что строка для сравнения больше возможного размера буффера — мне просто некуда будет сохранять данные
Re[5]: Поиск и замена строки в файле
От: Erop Россия  
Дата: 06.09.07 07:47
Оценка:
Здравствуйте, ionicman, Вы писали:

I>Может получится так, что строка для сравнения больше возможного размера буффера — мне просто некуда будет сохранять данные

А зачем их сохранять, если они в точности равны уже рассмотренному началу образца?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: Поиск и замена строки в файле
От: ionicman  
Дата: 06.09.07 08:19
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, ionicman, Вы писали:


I>>Может получится так, что строка для сравнения больше возможного размера буффера — мне просто некуда будет сохранять данные

E> А зачем их сохранять, если они в точности равны уже рассмотренному началу образца?
О! А это мысл! Вот блин а.... смещение же можно только.... Класс, спасибо!
Re[7]: Поиск и замена строки в файле
От: Erop Россия  
Дата: 06.09.07 08:34
Оценка:
Здравствуйте, ionicman, Вы писали:

I>О! А это мысл! Вот блин а.... смещение же можно только.... Класс, спасибо!

Пожалуйста. Мне не жалко намекнуть...
А лучше Alexander'у двоечку поставь
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.