| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Корпоративное переименование |
| Автор: TwisT_X 18.9.2007, 21:51 | ||
| Задание: входными данными является фаил с заданным числом сменных имен и заданным числом строк текста для исправлений.. Ниже приведен пример текста (кстати скопировал с ДРКБ
Первые две строки - это то, что надо и на что надо заменить в тексте.. Помогите объяснить: каков должен быть алгоритм нахождения слов, которые надо заменить и заменяемые слова (алгоритм поиска первых двух строк)?! Зарание блогадорю за участие в данной теме |
| Автор: Burka 18.9.2007, 22:16 |
| ну а есть условие по которому надо искать слова? или как? |
| Автор: TwisT_X 18.9.2007, 22:21 | ||
По идеи стандартными фнкциями Pos, Copy, Delete.. или еще работать со строками как с массивом.. Но мне кажется что легче функциями.. |
| Автор: Burka 18.9.2007, 22:27 |
| искать понятно что посом, я спрашиваю по какому условию слова отбирать надо? Добавлено через 5 минут и 37 секунд А, торможу) тебе надо простой реплейс сделать) ну посом проходишь по всем строчкам, если находишь нужные слова, то удаляешь с полученой позиции количество символов, которое введено в первую строку и вставляешь вторую строку на тоже место. если я правильно понял что тебе нужно) |
| Автор: TwisT_X 18.9.2007, 22:33 | ||
Ну в первых двух строках указаны слова: Перед to то что надо заменть, а после to то на что надо заменить.. |
| Автор: lukas 19.9.2007, 07:33 |
| так... берем любую функцию для нахождения N-слова в строке, и делаем так... 1. находим количество слов.. 2. делаем цикл от 1 до N слов... выделяем каждое слов... 3. заменяем его... как хотим... Посмотри на функции ParamStr и ParamCount, переделай их под себя... и все.... |
| Автор: TwisT_X 19.9.2007, 15:47 | ||
Для меня это еще пока что слишком новое Мне самое главное это понять как выделить слова которые надо заменить и слова заменяемые(первые две строки) я не могу додуматься какой там должен быть примерно алгоритм |
| Автор: lukas 19.9.2007, 19:25 |
| ну когда находим слово.... специальной функцией.... находим и начало B этого слово... и само слово (значит знаем его длину), затем удаляем все от B по длину слова, и вставляем (Insert) в позицию B нужное слово... переходим к следующему слову... |
| Автор: TwisT_X 19.9.2007, 21:06 | ||
1. что такое "В" ?! 2. мне надо понять алгоритм: как прога поймет какие слова искать и на что заминять (в данном случае первые две строки).. 3. а дальше уже легко будет |
| Автор: lukas 19.9.2007, 21:35 | ||
| TwisT_X, блин... B - это типа позиция начала слова в строке... как как поймет... функция ParamCount - количество слов в строке... и получается цикл.. for I:=0 to ParamCount("строка") do begin //ParamStr("строка",I); end; Во общем посмари на мои функции....
В общем использовать примерно так... ShowMessage(GetFastParam('слово1, слово2, "слово3" , слово4',3,',')); // слово номер 3, разделительный символ запятая... Подстрой под себя функции... ну или юзай пос и инсерт, делет... и т.п. |
| Автор: TwisT_X 20.9.2007, 23:07 |
| lukas, ты мну натолкнул на идею.. Вот тока вопрос такой: есть ли оператор который с мемо считывает строку и перегоняет ее в переменную?! |
| Автор: Alix 21.9.2007, 16:35 | ||||
Можно я тут вас попугаю? Если действовать согласно правилам
|
| Автор: TwisT_X 21.9.2007, 19:55 |
| хм.. А как указать максимальную строку в мемо?! (ну кол-во строк в мемо) и если s := memo1.lines[i]; мы записываем i+1 строку в переменную s, то как записать i строку?! Типо s := memo1.lines; ?! Alix, канешо можешь попугать)) Надо избегать замены уже замененных ранее подстрок)) Я вот еще думаю как оформить алгоритм: или загрузить текст в мемо и работать исключительно мемо или просто сразу работать с файлом.. Может кто то подскажет как лучше или легче?! |
| Автор: Alix 21.9.2007, 20:21 |
| Строки в memo.lines нумеруются от 0 до memo.lines.count-1. Поэтому когда мы обращаемся к строке [i] мы обращаемся к i+1 строке. Лучше работать сразу с файлом, из одного пишем, в другой, временный, пишем, потом удаляем исходный и переименовываем временный. Судя по Вашим вопросам, мучаться вы будете долго. Рекомендую почитать про алгоритмы поиска и замены строк. |
| Автор: TwisT_X 21.9.2007, 20:35 |
| Alix, вы почти угадали У меня еще нету с этим опыта.. Меня заинтересовали функции: ParamCount и ParamStr.. Но пока я про них еще ниче не знаю и не нашел покачто Не могли бы както об этом нимного рассказать?! |
| Автор: lukas 21.9.2007, 21:39 | ||
| TwisT_X, короче... используй лучше мои... они аналогичные... работают с такой же скоростью... ParamStr(n) возвращает N-ый параметр командной строки, а ParamCount - количество этих параметров, параметры отделяются пробелами.... А текст естественно легче обрабатывать в Memo, или лучше поизучай TStrings и TStringList... т.к. свойство Lines (в мемо) имеет тип TStrings... Поэтому не обязательно загружать в мемо, если не нужно отображать графически...
|
| Автор: Alix 22.9.2007, 10:06 | ||
Не думаю что это так, особенно, если файл большой. Я бы читал построчно с помощью readln, его еще никто не отменял. |
| Автор: lukas 22.9.2007, 20:26 |
| В Нашем случае... текстовый файл обычно редко бывает больше 1 мб... поэтому легче загрузить в TStrings и работать с ним... игра свечей не стоит... памяти много не сожрет... зато работать будет удобно, да и к тому же даю гарантию там файл не более 100 кб... зачем мудохотся с readln-ами... |