|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
поиск и замена текста в очень большом тексте31.08.2010, 18:16. Показов 9294. Ответов 21
Метки нет (Все метки)
я искал куски текста и заменял их на другие пока не получил System.OutOfMemoryException, вызванное String.Replace(). и стало понятно, что нужно искать другие концепции. вот идея работы с файлом кажется реальной и ее даже можно самому реализовать...но перед этим решил спросить, не знает ли кто как такие проблемы решаются?
0
|
|
| 31.08.2010, 18:16 | |
|
Ответы с готовыми решениями:
21
Поиск и замена текста в большом количестве файлов Поиск слова в большом тексте Поиск подстроки в очень большом файле, чтение маленькими кусками, потоковая обработка |
|
Автор FAQ
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
|
|
| 31.08.2010, 18:36 | |
|
Надо подгружать текст из файла частями, каждый раз запоминая на какой позиции остановился.
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 31.08.2010, 19:06 [ТС] | |
|
а по какому-то принципу выбирать длину подгружаемой части, чтобы не попасть в середину искомой подстроки? и как быть, если мой алгоритм подразумевал рекурсию?
0
|
|
|
Автор FAQ
1803 / 615 / 37
Регистрация: 22.12.2009
Сообщений: 1,544
|
|
| 31.08.2010, 19:24 | |
|
А какого рода текст? можно кусочек текста в пример? и пример того, что на что заменяете.
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 31.08.2010, 19:51 [ТС] | |
|
у меня есть функция f(x,y) и g(x,y), и есть некоторое выражение, например f&g. я должен в этом выражении результат операции & двух операндов заменить на нечто следующее: f+g-Sqrt(f^2+g^2), и в конечном итоге получить выражение, в котором содержатся только x и y. при этом, вместо функций f и g могут функции, содержащие саму операцию &. и задачи могут быть достаточно объемными, мое исключение вызывается, когда рабочая строка достигает размеров порядка ста тысяч символов
0
|
|
|
5 / 5 / 0
Регистрация: 01.02.2010
Сообщений: 98
|
|
| 01.09.2010, 15:23 | |
|
А сколько "весит" исходный текстовый файл и какое он имеет разширение? Вообще подобное может быть решено с использованием словарей. Замена подразумевает поиск, как правило с использованием словарей можно сократить время поиска и замены кусков текста, т.к. поиск в словаре идет не методом перебора, а методом дихотомии.
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 01.09.2010, 17:04 [ТС] | |
|
размер файла будет увеличиваться в процессе поиска и замены, и мне абсолютно безразлично каким образом в нем будут хранится данные.
словарь - набор ключей и значений. не могли бы мне объяснить, каким образом это может мне помочь?
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 01.09.2010, 19:37 | |
|
junkier, Определяется размер считываемого текста размером буфера куда он помещается.
буфер это обыкновенный пасив массив))) из потока на чтение пишеться в буфер текст обрабатывается и потоком записи возвращается в файл. после читается следущая партия текста, лучше реализовывать в цикле while -удобнее. Как альтернатива чтобы голову не ломать можно записывать измененый текст в другой файл( следуя вашим словам что после изменения будет меняться размер файла, изза трудности поймать то место на котором остановилось считывание). Добавлено через 4 минуты Rockedit, какая разница какой текст?!)) потоком выкачиваешь , обрабатываешь, а потом записываешь.
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 01.09.2010, 19:39 [ТС] | |
|
lifestyle, так все-таки...если в моем буфере окажется только половина искомой "фразы"? я ее не найду и, соответственно, не заменю. а с остальным все вполне понятно
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 01.09.2010, 19:53 | |
|
ну прочитаешь след кусок файла))))цикл while будет работать пока не дойдет до конца файла
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 01.09.2010, 20:08 [ТС] | |
|
lifestyle, что-то Вы меня не понимаете. простой пример:
текст: "abcdef", фраза: "cd", длина буфера - 3 символа. я не смогу найти фразу "cd" ни в "abc", ни в "def". мне нужно выбирать размер буфера таким образом, чтобы быть уверенным, что я не "разорву" искомую фразу.
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 01.09.2010, 20:27 | |
|
а что вам мешает играться с оффсетом?!)))
допустим из фразы abcdef прочиталось в buffer abc вы ищите cd значит индекс "каретки" уменьшите на два символа влево и начинайте читать в буффер дальше даже модно на один символ сдвинуть по формуле сдвига n-1 где n=длина искомой строки
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 01.09.2010, 20:50 [ТС] | |
|
то есть символ 'c' даст мне понять, что надо сдвинуть "каретку"? для меня сейчас этот алгоритм слишком туманен.. можно еще подробнее? в смысле, более обобщенно.
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 01.09.2010, 21:07 | |
|
нет тебе вернее алгоритму никаких выводов делать ненадо.
есть строгое указание после закачки в буффер картке остановилась на строке abcdef на букве c. Так как ты ищешь строку(последовательность символов) из 2 символов то ты просто каретку остановившующуюся на букве с , сдвигаешь на символ влево. и продолжаешь чтение новой партии текста в буффер. Если бы ты искал строку из 3 символов то двигал бы каретку влево на 2 символа. типа если n-это длина искомой строки , то каретку необходимо сдвигать на n-1 символов в лево, так как на три и более символа ее (в случае со строкой длинной в 3 символа) двигать в лево не имеет смысла потому, что тогда бы эта последовательность нашлась.
1
|
|
|
5 / 5 / 0
Регистрация: 01.02.2010
Сообщений: 98
|
||||||
| 01.09.2010, 23:43 | ||||||
как я понял у вас есть выражение, которое нужно заменить ( в текстовом файле у вас все такие есть пробелы и слово - это набор симоволов + спец.символы разделители). Если вы просто ищете искомую строку в массиве символов и затем ее заменяете, то используйте регулярные выражения.
0
|
||||||
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 01.09.2010, 23:48 | |
|
Sergey2009,
хотите удивиться?)тогда читайте внимательнее топик)) ваш вариант опять же вылетит в overflow нельзя открывать файлы и целиком считывать изза вышеприведеной причины оверфлова памяти.сказано строк 100 000 примерно))да и банальный код с буффером намного проще и короче)) ПыСы а что дальше после вылета из цикла при нахождении искомой строки?что с остальным текстом?))) как увидел парсинг в шоковое состояние зашел.Вы реально думаете 100 000 строк по символу парсить?! Не в обиду почитайте о стрингах и стригбилдере и вообще об основах шарпа. совет, а не критика.
0
|
|
|
5 / 5 / 0
Регистрация: 01.02.2010
Сообщений: 98
|
|
| 01.09.2010, 23:56 | |
|
2 lifestyle
у меня искомый файл для теста, содержит 7 миллионов знаков. Я же пример привел. Естетсвенно нужно учесть и то, что вхождений будет больше одного. Добавлено через 5 минут Я вам тоже советую почитать о использовании стрингов и стрингбилдеров.А еще я советую вам почитать журнал MSDN об использовании словарей и посмотреть примеры кода. И подумайте, как происходит поиск в массиве и словаре. Да, и кстати, этот код считывает и перебирает файл в 10 мб, менее чем за секунду.
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 02.09.2010, 00:21 | |
|
хм, на досуге попробую обязательно
0
|
|
|
4 / 4 / 2
Регистрация: 17.04.2010
Сообщений: 55
|
|
| 02.09.2010, 08:23 [ТС] | |
|
lifestyle, спасибо большое, мне даже стало интересно это реализовать, но тут дело в том, что мне все равно придется потом этот текстовый файл адекватно разбивать на строки адекватных размеров (дальше надо будет вычислять алгебраическое выражение, и на входе нужна именно строка), и поэтому мне надо придумать, по какому принципу я буду это делать.
а ваш алгоритм на вид действительно так хорош, что осталось сесть и написать код.
0
|
|
|
Mobile Developer
238 / 234 / 18
Регистрация: 10.05.2009
Сообщений: 917
|
|
| 02.09.2010, 08:33 | |
|
я предположил что вы просите не код(т.к. как тут код просят по другому на этом форуме=) )
можно организовать чтение по строково.чтобы оставливалось чтение при встрече в строке разделителей типа точки запятой и т.п. подобное , которые вы сами определяете
0
|
|
| 02.09.2010, 08:33 | |
|
Помогаю со студенческими работами здесь
20
Замена в тексте куска текста Поиск замена в тексте
Поиск и замена в тексте на ссылку Javascript поиск и замена в тексте Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|