Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из строки вытянуть числа? / 7 сообщений из 7, страница 1 из 1
26.05.2009, 10:37
    #36007197
nooob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
Может можно как нить стандартными функциями каше вытянуть из строки числа?
пример строк
Код: 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.
29.
30.
31.
32.
33.
34.
35.
^Report( 203 , 61332 , 63 , 18 )=        total                                      48287      100 %    100 %
^Report( 203 , 61332 , 63 , 19 )=        or calls                                   48227             100 
^Report( 203 , 61332 , 63 , 20 )=        int call injections                            1               0 
^Report( 203 , 61332 , 63 , 21 )=        orog call injections                          12               0 
^Report( 203 , 61332 , 63 , 22 )=        orsys call injections                          8               0 
^Report( 203 , 61332 , 63 , 23 )=        orog call retries                             39               0 
^Report( 203 , 61332 , 63 , 24 )=       -SUCCESSFUL CALLS-
^Report( 203 , 61332 , 63 , 25 )=        or answ                                    20111       42 
^Report( 203 , 61332 , 63 , 26 )=        or called busy                              8119       16 
^Report( 203 , 61332 , 63 , 27 )=        or no answ                                  5209       11 
^Report( 203 , 61332 , 63 , 28 )=        or successful system calls                    10        0 
^Report( 203 , 61332 , 63 , 29 )=       -LOST CALLS-
^Report( 203 , 61332 , 63 , 30 )=        or calls reject for nm dest cntl               0        0 
^Report( 203 , 61332 , 63 , 31 )=        or incorrect seizures                          0        0 
^Report( 203 , 61332 , 63 , 32 )=        or no dial clf                             10878       23 
^Report( 203 , 61332 , 63 , 33 )=        or no dial frl                               489        1 
^Report( 203 , 61332 , 63 , 34 )=        or pbr busy                                    0        0 
^Report( 203 , 61332 , 63 , 35 )=        or calls reject overload                      10        0 
^Report( 203 , 61332 , 63 , 36 )=        orog reject nart                               0        0 
^Report( 203 , 61332 , 63 , 37 )=        int reject nalt                               69        0 
^Report( 203 , 61332 , 63 , 38 )=        or other fail                                  0        0 
^Report( 203 , 61332 , 63 , 39 )=        orog calls rej for nm rtg cntl                 0        0 
^Report( 203 , 61332 , 63 , 40 )=        orog frl dist                                105        0 
^Report( 203 , 61332 , 63 , 41 )=        orog cong dist                                67        0 
^Report( 203 , 61332 , 63 , 42 )=        orog invc dist                                77        0 
^Report( 203 , 61332 , 63 , 43 )=        orog sndr busy                                 0        0 
^Report( 203 , 61332 , 63 , 44 )=        or partial dialing clf                      2384        5 
^Report( 203 , 61332 , 63 , 45 )=        or partial dialing frl                       281        1 
^Report( 203 , 61332 , 63 , 46 )=        or calls reject by inw                         0        0 
^Report( 203 , 61332 , 63 , 47 )=        or calls reject due to inw tm                  0        0 
^Report( 203 , 61332 , 63 , 48 )=        or not accepted                              233        0 
^Report( 203 , 61332 , 63 , 49 )=        or not assigned                              265        1 
^Report( 203 , 61332 , 63 , 50 )=        or dsn blocked                                 0        0 
^Report( 203 , 61332 , 63 , 51 )=        or redirected                                 10        0 
^Report( 203 , 61332 , 63 , 52 )=       -ADDITIONAL INFO-
^Report( 203 , 61332 , 63 , 53 )=        sl available occupancy                   4172300 
Мне нужно повытягивать числа для дальнейшей обработки
...
Рейтинг: 0 / 0
26.05.2009, 10:50
    #36007265
krvsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
В вашем примере видна четкая структура у строк - это хорошо.

- Нужно вырезать часть строки
- Убрать пробелы

Код: plaintext
1.
2.
3.
 s str=^Report( 203 , 61332 , 63 , 18 ) 
 s val=$e(str,n1,n2)
 s val=$tr(val," ")
 w !,val
----------
Cache for Windows (x86-32) 2007.1.3 (Build 607) Wed Oct 17 2007 02:12:09 EDT
...
Рейтинг: 0 / 0
26.05.2009, 15:48
    #36008325
MX-9
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
nooob,

set Number=$tr(ALL,123456780.9_ALL,123456780.9)
...
Рейтинг: 0 / 0
26.05.2009, 16:25
    #36008487
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
MX-9, Ваш способ годится, если в строке одно (и только одно) число. В противном случае вы извлекаете не число, а конкатенацию всех цифр имеющихся в строке чисел.
Способ от krvsa рулит, если в строках пустоты образованы пробелами, но если встречаются TAB-ы, то увы.
Если все числа целые, можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 set x="or no dial clf                            10878     23"
 k num
 while (x'="") {
 	set x=$zstrip(x,"<AP") ; удаляем лидирующие буквы и знаки препинания
 	s num($i(num))=+x ; извлекаем очередное число
 	s x=$zstrip(x,"<N") ; удаляем лидирующие цифры
 } 	
 zw num
 q
...
Рейтинг: 0 / 0
26.05.2009, 16:30
    #36008511
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
Поправка (иначе пресловутые TAB-ы обрабатываются неверно):
Код: plaintext
1.
set x=$zstrip(x,"<APW") ; удаляем лидирующие буквы, знаки препинания и все виды пробелов
...
Рейтинг: 0 / 0
26.05.2009, 17:48
    #36008761
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
Версия 0.3 - работает с числами произвольного вида:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 set x="or no dial clf        "_$c( 9 )_"                    .10878e10    -234    1.222E-3"
 k num
 while (x'="") {
 	set x=$zstrip(x,"<APW",,".-+")
 	s num($i(num))=+x
 	s x=$zstrip(x,"<N",".Ee-+")
 } 	
 zw num
 q 
...
Рейтинг: 0 / 0
27.05.2009, 09:40
    #36009605
nooob
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как из строки вытянуть числа?
Всем огромное спасибо!
За основу взял алгоритм krvsa и модернизировал его кодом Alexey Maslov'a
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из строки вытянуть числа? / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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