powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / нахождение символов
11 сообщений из 11, страница 1 из 1
нахождение символов
    #33359893
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все мы знаем что АТС находя заданный символ(ы) возвращает номер первого найденного символа. Допустим что есть такая строка
а = "asd,zxc,qwe,ert"
Через АТС задав нахождение ',' мы будем знать место нахождение только первой ',', а как узнать место нахождение всех остальных?
...
Рейтинг: 0 / 0
нахождение символов
    #33359908
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А слабо help по команде ATC поглядеть? Там третий необязательный параметр есть = номеру вхождения.
...
Рейтинг: 0 / 0
нахождение символов
    #33359918
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НедоходящийВсе мы знаем что АТС находя заданный символ(ы) возвращает номер первого найденного символа. Допустим что есть такая строка
а = "asd,zxc,qwe,ert"
Через АТС задав нахождение ',' мы будем знать место нахождение только первой ',', а как узнать место нахождение всех остальных?
Используй функцию OCCURS()
Возвращает число вхождений некоторого символьного выражения в другое символьное выражение.
Синтаксис
OCCURS(cSearchExpression, cExpressionSearched)

Параметры:
cSearchExpression - Задает символьное выражение, которое функция OCCURS( ) ищет в выражении cExpressionSearched.
cExpressionSearched - Задает символьное выражение, которое OCCURS( ) просматривает в поисках cSearchExpression.
Результат: Числовой
Комментарии
Функция OCCURS( ) возвращает 0 (ноль), если выражение cSearchExpression не найдено в выражении cExpressionSearched.
А дальше надеюсь легко...
...
Рейтинг: 0 / 0
нахождение символов
    #33359946
Команда atc имеет еще один последний параметр, он числовой и указывает какое вхождение символа искать atc([q,q,e,t],s,2)
...
Рейтинг: 0 / 0
нахождение символов
    #33360043
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо Владимир СА. А то для сравнения использую АТС.
теперь еще. Вот код в котором я поочередно вырезаю строки
rep_col_name = "asd,sdg,nyt,xcvsdf"
rep_cn=1
do while .t.
rep_second = atc(',',rep_col_name,rep_cn)
if rep_cn = 1
rep_first = 1
endif
rep_cn=rep_cn+1
if rep_second = 0
exit
endif
set step on
rep_add_name = substr(rep_col_name,rep_first,rep_second-1)
select grid_names
append blank
replace colomn_names with rep_add_name
rep_first =rep_second+1
enddo

Проблема вся в том что когда после первого вырезание "asd" последующие значения идут "sdg,nyt" а не "sdg". Т.е. попарно получается. Почему так? В чем ошибка?
...
Рейтинг: 0 / 0
нахождение символов
    #33360353
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не проще всё это через GetWordNum() и GetWordCount() сделать?
...
Рейтинг: 0 / 0
нахождение символов
    #33360659
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
инициализация этой функций не найдется?
...
Рейтинг: 0 / 0
нахождение символов
    #33361221
Фотография Владимир СА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Недоходящийинициализация этой функций не найдется?Примерно так:
Если VFP80, то действительно, как указал AleksMed , удобнее использовать GetWordCount и GETWORDNUM
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CLEAR
rep_col_name = "asd,sdg,nyt,xcvsdf"
?rep_col_name
LOCAL i, m.n_worlds
m.n_worlds = GetWordCount(rep_col_name,',')
IF m.n_worlds >  0 
  FOR i =  1  TO m.n_worlds
    ? GETWORDNUM(rep_col_name,i,",")
  ENDFOR
ENDIF
Если VFP версии ниже, т.е. в котором нет этих функций
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
CLEAR
rep_col_name = "asd,sdg,nyt,xcvsdf"
?rep_col_name
LOCAL i, m.n_worlds, m.n_start, m.n_fin
m.n_worlds = OCCURS(',',rep_col_name)+ 1 
?m.n_worlds
IF m.n_worlds> 0  AND LEN(ALLTRIM(rep_col_name))> 0 
  m.n_start =  1 
  FOR i =  1  TO m.n_worlds
    m.n_fin = ATC(",",rep_col_name,i) -  1 
    IF m.n_fin >  0 
      ?SUBSTR(rep_col_name, m.n_start, m.n_fin-m.n_start+ 1 )
      m.n_start = m.n_fin +  2 
    ELSE
      ?SUBSTR(rep_col_name, m.n_start)
    ENDIF
  ENDFOR
ENDIF
...
Рейтинг: 0 / 0
нахождение символов
    #33361448
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир СА
Да. Это то мне и нужно для вфп6. Спасибо.
...
Рейтинг: 0 / 0
нахождение символов
    #33362397
karly™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В VFP версиях ниже, чем 7, эти функции доступны с помощью библиотеки foxtools.fll
Код: plaintext
1.
2.
3.
Set library to foxtools.fll
cText = "Привет! Как жизнь?"
?Words(сText) &&  3 
?Wordnum(cText,  1 ) && "Привет!"
...
Рейтинг: 0 / 0
нахождение символов
    #33363011
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для VFP6 можно использовать функцию ALINES(), предварительно заменив символы запятой на символы CHR(13)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
* Исходная строка
LOCAL lcString
lcString = "asd,zxc,qwe,ert"
* Формирование массива, состоящего из "слов" строки
LOCAL laWords( 1 ), lnWords, lnI
lnWords=ALINES(laWords,ChrTran(m.lcString,",",CHR( 13 )))
FOR m.lnI =  1  TO lnWords
	?laWords[m.lnI]
ENDFOR

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


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