шаблон текста | |
---|---|
glaz58 Автор Сообщений: 812 Откуда: Воронеж Дата регистрации: 09.02.2008 |
Уважаемые знатоки! Нужно в текстовом поле сделать замену шаблона такого вида: '?-' заменить на 'С?-'. Где ? точно 1 цифра. Функция Strtran не позволяет использовать шаблон, насколько я понимаю? Каким образом можно выполнить такое действие?
|
Re: шаблон текста | |
---|---|
of63 Сообщений: 25244 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Например так:
- заменяем в исходной строке (А) все цифры на какой-то символ, которого не бывает, например "#" - теперь у нас 2 строки: А-исходная и Б-с подмененными цифрами - создаем пустую строку В - идем по строке Б, ищем вхождения троек "###": содержимое до этой тройки посылаем в строку В, саму тройку заменяем на содержимое из А (для этого у нас есть её координата в Б), причем добавляем к ней "С" и "-". Удобно откусывать обработанные начальные куски в А и Б, и в цикле каждый раз начинать с первого символа оставшейся строки А и Б... () нетроекратные "###" придется по дорого как-то разруливать при помощи "ИИ", используя совпадающие координаты в А и Б |
Re: шаблон текста | |
---|---|
AngelOKES Сообщений: 828 Дата регистрации: 08.02.2012 |
Парочка примеров не помешала бы конечно, возможно там всё намного проще, из того что написано я понял только, что надо прибавить символ "С" к той строке, где встречается какая-то определённая комбинация трёх цифр |
Re: шаблон текста | |
---|---|
akvvohinc Сообщений: 4216 Откуда: Москва Дата регистрации: 11.11.2008 |
Решение "в лоб", не самое быстрое, но, думаю, будет наиболее понятным:
Если перед '-' будет не 3, а больше цифр, то будет заменять последние 3 (в задании это не уточняется): '1234-' --> '1С234-' Исправлено 2 раз(а). Последнее : akvvohinc, 28.09.21 09:44 |
Re: шаблон текста | |
---|---|
Владимир Максимов Сообщений: 14097 Откуда: Москва Дата регистрации: 02.09.2000 |
Это называется "регулярные выражения". Стандартно в среде FoxPro для этого нет инструментов. Ну, кроме посимвольного разбора строки. Но можно использовать внешние библиотеки. Как правило, используют библиотеку
"VBScript.RegExp" Поищите на этом форуме. Есть примеры использования. В принципе, есть в поставке FoxPro в библиотеке Foundation Class класс _regexp, но, по моему, проще напрямую использовать VPScript, ну как-то так
PS: Правильность синтаксиса не гарантирую. "На коленке" написал. Не проверял |
Re: шаблон текста | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Удивительно, что уже столько ответов. Однако задача поставлена неясно. Что означает "заменить шаблон в текстовом поле"? Какой шаблон? Шаблон ввода? Если это шаблон ввода, то букву "С" можно "пририсовать" слева от шаблона '999' (если это цифры, то почему вопросительный знак вместо 9?) При такой "пририсовке" юзер "будет понимать", что буква "С" уже "введена заранее". После заполнения шаблона слева приписать букву С. И в шаблонах ввода символьных строк можно таки ставить цифры, что позволит вводить в этих позициях шаблона именно цифры.
Например, myvar=space(15) @ 0,0 GET myvar pict '999X9999X999999' READ Исправлено 2 раз(а). Последнее : Simple777, 28.09.21 11:19 |
Re: шаблон текста | |
---|---|
akvvohinc Сообщений: 4216 Откуда: Москва Дата регистрации: 11.11.2008 |
Цитата:Думаю, это текстовое поле в таблице, в котором надо заменить все последовательности "цифра-цифра-цифра-минус" на "С-цифра-цифра-цифра-минус" |
Re: шаблон текста | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Если это так, то почему не добавить слева от значения поля букву С и на этом "закрыть вопрос"?
|
Re: шаблон текста | |
---|---|
akvvohinc Сообщений: 4216 Откуда: Москва Дата регистрации: 11.11.2008 |
Потому что букву "С" надо добавить не перед значением поля, а в определённые места этой строки, и таких мест может быть от нуля и больше.
Места вставки "С" описаны в задании - перед каждой последовательностью символов "цифра-цифра-цифра-минус". Например, строка: АВС123-__23456-8 после обработки станет: АВСС123-__23С456-8 Исправлено 1 раз(а). Последнее : akvvohinc, 28.09.21 15:29 |
Re: шаблон текста | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Может быть, может быть. Но это лишь догадки. |
Re: шаблон текста | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Если автор упомянул про strtran, то это практически факт, а не догадки
Дополню Владимира примером с заменой.
Шаблон поиска: "\d" - любая десятичная цифра "{3}" - предыдущий элемент повторяется строго 3 раза "-" - в данном случае это просто символ минус "()" - всё что внутри скобок (найденные символы соответствующие шаблону внутри скобок) будет трактоваться как "группа". Шаблон замены очень прост - "$1" значит найденное значение первой группы - в шаблоне поиска может быть более одной пары скобок, тогда в результате может оказаться несколько групп. В данном случае у нас всего одна группа. Буква С - просто буква re.Global = .T. включает режим замены всех найденных шаблонов, а не только первого. ------------------ WBR, Igor |
Re: шаблон текста | |
---|---|
Равиль Сообщений: 6549 Откуда: Уфа Дата регистрации: 01.08.2003 |
Вот спасибо ! Недавно коллега показывал как на питоне удобно работать с регулярками, а мне было нечем ответить кроме strtran ..
------------------ Тяжело согнать курсором муху с монитора ... |
Re: шаблон текста | |
---|---|
glaz58 Автор Сообщений: 812 Откуда: Воронеж Дата регистрации: 09.02.2008 |
Именно это мне и нужно. Я думал, увижу что-нибудь более изящное, чем
Исправлено 1 раз(а). Последнее : glaz58, 04.10.21 13:28 |
© 2000-2024 Fox Club  |