Страница: 1 | 2 |
Вопрос: Алгоритм быстрой обработки текста?
Добавлено: 27.02.08 01:11
Автор вопроса: Oleg
Ответы
Всего ответов: 23
Номер ответа: 16
Автор ответа:
Oleg
Вопросов: 1
Ответов: 7
Профиль | | #16
Добавлено: 04.03.08 14:30
По шагам:
1. Заливаю файл в переменную
2. Нахожу все номера и создаю массив из них, сортирую
Эти шаи я делаю и происходит это все довольно быстро!
Дальше:
1. Есть два варианта
1.1. Построчная обработка текста по замене из массива через InStr, Replace и т.д. Замененное сливаем в StringBuilder переменную
1.2. Разбить текст по частям и менять через регекспы и сливаем в строчную переменную
Я правильно понял?
Ты советуешь 1.1?
Номер ответа: 17
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #17
Добавлено: 04.03.08 14:57
Нет
Replace не нужен.
Мы опять выполняем посимвольный проход текста и переливаем его в StringBuilder, заменяя старые идентификаторы новыми - Replace для этого не нужен, InStr скорее всего тоже.
Номер ответа: 18
Автор ответа:
Oleg
Вопросов: 1
Ответов: 7
Профиль | | #18
Добавлено: 04.03.08 20:18
Чегто я не понял, можно конкретнее, или примерчик?
Номер ответа: 19
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #19
Добавлено: 04.03.08 21:18
Ну примерчик это вряд ли.
Посимвольно перебираешь свой текст и переносишь его в StringBuilder, по ходу заменяя номера идентификаторов.
Номер ответа: 20
Автор ответа:
Oleg
Вопросов: 1
Ответов: 7
Профиль | | #20
Добавлено: 05.03.08 00:26
Заменять как? С помощью какой функции?
Номер ответа: 21
Автор ответа:
Oleg
Вопросов: 1
Ответов: 7
Профиль | | #21
Добавлено: 05.03.08 11:23
Я так понял:
1. Открываем файл на чтение и считываем по символьно
2. Все что считываем тутже сливаем в переменную StringBuilder
3. Встретив по дороге символ который нужно заменить, меняем
4. Сливаем переменную в файл
Правильно понял?
Но здесь у меня проблема, у меня то что нужно заменить от 1 до 12 символов может быть, и пересекаться в тексте они могут с другими строками контекстно.
Или я что не та понял?
Номер ответа: 22
Автор ответа:
MirrorOfTheReal
Вопросов: 0
Ответов: 1
Профиль | | #22
Добавлено: 13.12.09 17:15
Насколько я понял - нам надо перенумеровать узлы.
Что мешает сделать так?
1. Читаем все узлы подряд и делаем таблицу соответствия (можно хеш)
Пример:
1 - 1
...
7 - 7
8 - 14
....
2. Далее проходим этот файл еще раз и через эту таблицу соответствия находим номер узла который должен быть.
Если узел изменился - записываем. (Как вариант можно писать в отдельный файл)
В итоге получается два прохода. Все контексты и пересечения здесь учтены.
Что-то не так?
Номер ответа: 23
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #23
Добавлено: 13.12.09 18:00
Ээ как насчет такого метода (правда он для VB6, но думаю не сложно переделать):
Do While eof(1)=false
Line Input #a,s
If Left(s,3)="Nod" Then s="Nod=" & НОМЕР
If Left(s,10)="TraffPoints" Then s="TraffPoints=" & НОМЕР
Print#2, s
Loop
Ну, или как-то так. Метод называется "в лоб". Правда не уверен насчет скорости... Но вроде быстрее должно быть. Хотя не факт.
Или я что-то не правильно понял?