Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Существует ли функция ил что-то близкое(конец строки нумерик) / 5 сообщений из 5, страница 1 из 1
07.05.2012, 11:29
    #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
07.05.2012, 12:53
    #37785107
XAndy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Существует ли функция ил что-то близкое(конец строки нумерик)
Этот код оставит с строке лишь указанные символы

Код: plsql
1.
? chrtran(cStr, chrtran(cStr, "1234567890", ""), "")
...
Рейтинг: 0 / 0
07.05.2012, 13:05
    #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
07.05.2012, 13:53
    #37785169
rock-n-roll
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Существует ли функция ил что-то близкое(конец строки нумерик)
Всем Спс особенно за намек chrtran от chrtran. буду пробовать
...
Рейтинг: 0 / 0
07.05.2012, 17:44
    #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
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Существует ли функция ил что-то близкое(конец строки нумерик) / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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