powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Существует ли функция ил что-то близкое(конец строки нумерик)
5 сообщений из 5, страница 1 из 1
Существует ли функция ил что-то близкое(конец строки нумерик)
    #37785040
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток. известно что строки заканчиваются на номера например, что-то типа "некиеданные234", "другиеданные4560" и тд., нужно получать эти номера. Существует ли в фоксе "готовая" функция(это вряд) ну или чет близкое.
Пришлось нагородить такое
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
?EndStrocInNum('stroc')
?EndStrocInNum('stroc123')
?EndStrocInNum('stroc12')
?EndStrocInNum('stroc12 3')
******************************************************************
FUNCTION EndStrocInNum(stroc)
stroc=ALLTRIM(stroc)
LOCAL SL,InvS,WS,n
InvS=InvertS(Stroc)
WS=InvS
n=0
FOR i=1 TO LEN(InvS)
  IF  ISDIGIT(WS)
      WS=SUBSTR(WS,2)
      n=n+1
  ELSE
      EXIT     
  ENDIF
NEXT
RETURN InvertS(SUBSTR(InvS,1,n))     
******************************************************************
Function InvertS(Stroc)
***инверт строки например 012->210
If Empty(Stroc) OR;
   vartype(Stroc)#'C'
   RETURN ''
ENDIF
Local dS,S1,S2
dS=LEN(Stroc)
*
IF dS=1
   RETURN Stroc
ENDIF
*
FOR i=1 TO INT(DS/2)
   S1=SUBSTR(Stroc,i,1)
   S2=SUBSTR(Stroc,DS-i+1,1)
   stroc=STUFF(STUFF(Stroc,i, 1,S2),DS-i+1,1,S1)
NEXT
RETURN Stroc


Попой чувствую что можно и нужно как-то проще(шустрее). Заранее благодарен
...
Рейтинг: 0 / 0
Существует ли функция ил что-то близкое(конец строки нумерик)
    #37785107
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот код оставит с строке лишь указанные символы

Код: plsql
1.
? chrtran(cStr, chrtran(cStr, "1234567890", ""), "")
...
Рейтинг: 0 / 0
Существует ли функция ил что-то близкое(конец строки нумерик)
    #37785121
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rock-n-rollДоброго времени суток. известно что строки заканчиваются на номера например, что-то типа "некиеданные234", "другиеданные4560" и тд., нужно получать эти номера. Существует ли в фоксе "готовая" функция(это вряд) ну или чет близкое.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
***************************************
FUNCTION OnlyNum
***************************************
* Выбрасывает из строки все нецифровые
* символы (оставляет только 0-9).
***************************************
PARAMETERS cVictim
LOCAL dyenow, ldye, passer, ragna, outof
dyenow=ALLTRIM(cVictim)
IF EMPTY(dyenow)
	RETURN ''
ENDIF
outof=''
ldye=LEN(dyenow)
FOR passer=1 TO ldye
	ragna=SUBSTR(dyenow,passer,1)
	IF ISDIGIT(ragna)
		outof=outof+ragna
	ENDIF
NEXT
RETURN outof
...
Рейтинг: 0 / 0
Существует ли функция ил что-то близкое(конец строки нумерик)
    #37785169
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем Спс особенно за намек chrtran от chrtran. буду пробовать
...
Рейтинг: 0 / 0
Существует ли функция ил что-то близкое(конец строки нумерик)
    #37785393
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в принципе, конечно, можно использовать ChrTran(), чтобы все, кроме цифр заменить на пробелы, а потом GetWordCount()+GetWordNum() прочитать последнее "слово". Только, как мне кажется, все-таки проще просто посимвольно прочитать окончание строки. Правда, я бы советовал читать не слева-направо, а наоборот, справа-налево. От конца к началу

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
?EndStrocInNum('stroc')
?EndStrocInNum('stroc123')
?EndStrocInNum('stroc12')
?EndStrocInNum('stroc12 3')

FUNCTION EndStrocInNum(stroc)
stroc = RTRIM(stroc)	&& Отбрасываю только концевые пробелы
LOCAL lnI, lcDigitString, lcNextSymbol
lcDigitString = ''
FOR lnI=LEN(stroc) TO 1 STEP -1
	lcNextSymbol = Substr(stroc,m.lnI,1)
	IF  ISDIGIT(lcNextSymbol)
		lcDigitString = lcNextSymbol + lcDigitString
	ELSE
		EXIT     
	ENDIF
NEXT
RETURN lcDigitString
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Существует ли функция ил что-то близкое(конец строки нумерик)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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