powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Замена подряд идущих символов на один
4 сообщений из 4, страница 1 из 1
Замена подряд идущих символов на один
    #35023041
VladBD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть строка вида
Код: plaintext
s=' фыва      фыв  ва а      фыва   '
Как заменить во всей строке все подряд идущие пробелы на один.
Знаю только метод цикла с использованием STRT().
Есть какие еще может функции для этого, чтобы за раз REPL ALL на всю таблицу сделать?
...
Рейтинг: 0 / 0
Замена подряд идущих символов на один
    #35023070
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
s=' фыва      фыв  ва а      фыва   '
set library to sys( 2004 )+'foxtools'
?reduce(s)
...
Рейтинг: 0 / 0
Замена подряд идущих символов на один
    #35023080
VladBD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
...
Рейтинг: 0 / 0
Замена подряд идущих символов на один
    #35023418
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Следует только иметь в виду, что в дистрибутив надо не забыть включить библиотеку FoxTools.fll, которая используется в данном решении. Но можно использовать замену и без цикла.

Решение в 3 шага БЕЗ цикла

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
lcString = "qwerty;;asd;;;;;;;cv;;;ere;;;;;;rtrt;;;;;;;;;erer"  
* Два раза подряд необходимо дать одну и ту же команду  
lcString = StrTran(m.lcString,";;",";_;")  
lcString = StrTran(m.lcString,";;",";_;")  
* Убираем мусор  
lcString = StrTran(m.lcString,"_;","")  
* Результат  
?m.lcString

Единственный недостаток, надо быть уверенным, что добавляемый символ (в данном случае "_") не может встретится в комбинации с символом сепаратором "_;". Т.е. не может удалится лишний разделитель.

Как вариант. Одна вставка и два удаления

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
lcString = "qwerty;;asd;;;;;;;cv;;;ere;;;;;;rtrt;;;;;;;;;erer"    
* Вставляю дополнительный разделитель    
lcString = StrTran(m.lcString,";;",";"+CHR( 0 )+";")    
* Убираем мусор  
* Здесь важна последовательность команд.   
* СНАЧАЛА удаляются возможные двойные разделители  
lcString = StrTran(m.lcString,CHR( 0 )+";;","")    
* ПОТОМ возможные одинарные разделители  
lcString = StrTran(m.lcString,CHR( 0 )+";","")    
* Результат    
?m.lcString

Думаю, CHR(0) в символьную строку с текстом попасть не может.

Если речь идет о замене содержимого полей, то надо быть уверенным, что вставка дополнительного символа не приведет к переполнению длины поля. В этом случае часть информации просто потеряется. Будут отброшены символы, не поместившиеся в поле.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Замена подряд идущих символов на один
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]