powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / работа со строкой
26 сообщений из 26, показаны все 2 страниц
работа со строкой
    #36141405
flowy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наверное опять ступила, но все же.. посмотрите плиз

нужна функция, которая из строк типа 'c1003c' 'c1003' выбирает только число
моя функция возвращает пустую строку
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
function getkey
parameter s
local result, temp
temp=alltrim(substr(s, 2 ))
result=''
do while (isalpha(temp)=.F.) and (temp<>'') do
 result=result+alltrim(substr(temp, 1 , 1 ))
 temp=substr(temp, 2 )
enddo
return result
...
Рейтинг: 0 / 0
работа со строкой
    #36141453
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flowy,
замените (temp <> '') на (!EMPTY(temp))
...
Рейтинг: 0 / 0
работа со строкой
    #36141459
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flowy,
да, и второе do - уберите
...
Рейтинг: 0 / 0
работа со строкой
    #36141463
flowy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! только начала работать с VFP.Раньше работала с Delphi Никак не выучу синтаксис
...
Рейтинг: 0 / 0
работа со строкой
    #36141464
guest12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
? StrNum1('c1003c')
? StrNum1('c1003')

FUNCTION StrNum1
PARAMETERS str1
RETURN VAL(ALLTRIM(CHRTRAN(str1,'c','')))
ENDFUNC
...
Рейтинг: 0 / 0
работа со строкой
    #36141481
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest12345,
а если не известны символы?
...
Рейтинг: 0 / 0
работа со строкой
    #36141503
guest12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если не известны символы?

? StrNum1('c1003c')
? StrNum1('c1003')

FUNCTION StrNum1
PARAMETERS str1
RETURN VAL(ALLTRIM(CHRTRAN(UPPER(str1),'ABCDEFGHIJKLMNOPQRSTUVWXYZ','')))
ENDFUNC
...
Рейтинг: 0 / 0
работа со строкой
    #36141534
Rickitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest12345,
теперь почти согласен, только нужно добавить еще русский алфавит, или арабский или ...
...
Рейтинг: 0 / 0
работа со строкой
    #36141917
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
flowy
нужна функция, которая из строк типа 'c1003c' 'c1003' выбирает только число



Код: plaintext
1.
2.
3.
function getkeys
lparameters s
return VAL(SUBSTR(s,AT('x',CHRTRAN(s,'1234567890','xxxxxxxxxx'))))

?getkey('cyrtf19785703c')
...
Рейтинг: 0 / 0
работа со строкой
    #36141951
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tohan_ORAflowy
нужна функция, которая из строк типа 'c1003c' 'c1003' выбирает только число



Код: plaintext
1.
2.
3.
function getkeys
lparameters s
return VAL(SUBSTR(s,AT('x',CHRTRAN(s,'1234567890','xxxxxxxxxx'))))

?getkeys('cyrtf19785703c')

Лучше даже так:
Код: plaintext
1.
2.
3.
function getkeys
lparameters s,result
RETURN VAL(SUBSTR(s,AT('1',CHRTRAN(s,'1234567890',PADR('', 10 ,'1')))))

Код: plaintext
?getkeys('cyrtf19785703c')
...
Рейтинг: 0 / 0
работа со строкой
    #36142028
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flowy,

Код: plaintext
1.
?CHRTRAN('c1003g',CHRTRAN('c1003g','0123456789',''),'')
...
Рейтинг: 0 / 0
работа со строкой
    #36142060
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AleksMedflowy,

Код: plaintext
1.
?CHRTRAN('c1003g',CHRTRAN('c1003g','0123456789',''),'')

+1

Только вопрос, что нужно будет получить из следующей строки:
Код: plaintext
s='yhggg_#@45547_22'

Код: plaintext
?CHRTRAN(s,CHRTRAN(s,'0123456789',''),'')


4554722 or 45547
...
Рейтинг: 0 / 0
работа со строкой
    #36142089
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tohan_ORAAleksMedflowy,

Код: plaintext
1.
?CHRTRAN('c1003g',CHRTRAN('c1003g','0123456789',''),'')

+1

Только вопрос, что нужно будет получить из следующей строки:
Код: plaintext
s='yhggg_#@45547_22'

+
Код: plaintext
?CHRTRAN(s,CHRTRAN(s,'0123456789',''),'')


4554722 or 45547
Идея подброшена, далее автор сам разберется, что ему надо и доточит.
...
Рейтинг: 0 / 0
работа со строкой
    #36142140
guest12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tohan_ORA а если будет

? getkeys('cy5r551tfc')
функция вернет только первое число 5
...
Рейтинг: 0 / 0
работа со строкой
    #36142193
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest12345Tohan_ORA а если будет

? getkeys('cy5r551tfc')
функция вернет только первое число 5
А какое надо?
Если вырезать все буковки,то решение AleksMed,
если первое встретившееся число то подойдет например мое.
Подрихтуйте решения на свой лад и будет счастье под конкретную задачу.
...
Рейтинг: 0 / 0
работа со строкой
    #36144343
Guest~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tohan_ORAЛучше даже так:
Код: plaintext
1.
2.
3.
function getkeys
lparameters s,result
RETURN VAL(SUBSTR(s,AT('1',CHRTRAN(s,'1234567890',PADR('', 10 ,'1')))))


?getkeys("e1e1e")
...
Рейтинг: 0 / 0
работа со строкой
    #36144407
Tohan_ORA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Guest~
Tohan_ORAЛучше даже так:
Код: plaintext
1.
2.
3.
function getkeys
lparameters s,result
RETURN VAL(SUBSTR(s,AT('1',CHRTRAN(s,'1234567890',PADR('', 10 ,'1')))))


?getkeys("e1e1e")

Ущучили :-)

Тады мы вот так:
Код: plaintext
?VAL(SUBSTR(CHRTRAN(s,'e',' '),AT('1',CHRTRAN(s,'1234567890',PADR('', 10 ,'1')))))
...
Рейтинг: 0 / 0
работа со строкой
    #36144542
Guest~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уж лучше тогда сразу
Код: plaintext
1.
?INT(VAL(SUBSTR(CHRTRAN(s,CHRTRAN(s,'0123456789',''),REPLICATE('a',MAX(LEN(CHRTRAN(s,'0123456789','')), 1 ))),AT('1',CHRTRAN(s,'1234567890',PADR('', 10 ,'1'))))))
а то я еще чего-нибудь придумаю (например '1E1').
...
Рейтинг: 0 / 0
работа со строкой
    #36144996
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest~,
Чем был плох вариант AleksMed'а? А если охота взять только первое число, то через цикл имхо быстрее будет (типа do while not цифра - do while цифра), чем через кучу чартранов, в которых потом ещё и разбираться кому-нибудь придётся.
...
Рейтинг: 0 / 0
работа со строкой
    #36145183
Guest~
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirто через цикл имхо быстрее будет
Код: plaintext
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.
m.s=REPLICATE("a", 100000 )+"1"

m.sc=SECONDS()
?getkeys(s)
?SECONDS()-m.sc

m.sc=SECONDS()
?getkeys2(s)
?SECONDS()-m.sc


function getkeys
lparameters s
RETURN INT(VAL(SUBSTR(CHRTRAN(s,CHRTRAN(s,'0123456789',''),REPLICATE('a',MAX(LEN(CHRTRAN(s,'0123456789','')), 1 ))),AT('1',CHRTRAN(s,'1234567890',PADR('', 10 ,'1'))))))

FUNCTION getkeys2
LPARAMETERS s
LOCAL m.st, m.cnt
m.cnt= 1 
m.st=""
DO WHILE !ISDIGIT(SUBSTR(s, m.cnt,  1 ))
	m.cnt=m.cnt+ 1 
ENDDO
DO WHILE ISDIGIT(SUBSTR(s, m.cnt,  1 ))
	m.st=m.st+SUBSTR(s, m.cnt,  1 )
	m.cnt=m.cnt+ 1 
ENDDO
RETURN INT(VAL(m.st))
А можете еще с миллионом попробовать, ежели, конечно, терпения хватит.
...
Рейтинг: 0 / 0
работа со строкой
    #36145336
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest~,
мдааа 3,891 против 0,016 это круто...
Кстати, я сейчас подумал, что это издержки функции substr, решил попробовать цикл над массивом чаров - всё равно 0,125 против 0,016 у чартран-варианта.
...
Рейтинг: 0 / 0
работа со строкой
    #36145357
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
flowy
нужна функция, которая из строк типа 'c1003c' 'c1003' выбирает только число


Я у себя использую функцию по поиску только по цифровым данным :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
***************************************
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

Например, OnlyNum("cccss22f44g5") вернет 22445.
...
Рейтинг: 0 / 0
работа со строкой
    #36145413
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reware,
вбейте ей в качестве параметра REPLICATE("a",100000)+"1" и сравните по скорости с вышенаписанными вариантами. О чём Guest~ парой постов выше и написал.
...
Рейтинг: 0 / 0
работа со строкой
    #36146711
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirreware,
вбейте ей в качестве параметра REPLICATE("a",100000)+"1" и сравните по скорости с вышенаписанными вариантами. О чём Guest~ парой постов выше и написал.
Да согласен, но речь о скорости изначально вроде не шла. Я вам принцип изложил, хоть он и элементврный.
...
Рейтинг: 0 / 0
работа со строкой
    #36148372
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
reware,

вообще-то этот принцип изложил я шестью постами выше (а код - Guest~ пятью постами выше)...
...
Рейтинг: 0 / 0
работа со строкой
    #36148557
reware
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tanglirreware,

вообще-то этот принцип изложил я шестью постами выше (а код - Guest~ пятью постами выше)...
Да бога ради. Мы чего, будем здесь соревноваться, как в пионерском лагере "Артек" ? Кто там раньше и больше. Нужно человеку выделить цифровые символы, подсказали, кто как мог. Кто-то с учетом большого массива данных, кто-то проще (это я про себя). В конечном итоге, как говорилось в одной истории, мы сделали общее дело :)
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / работа со строкой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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