powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из строки вытянуть числа?
7 сообщений из 7, страница 1 из 1
Как из строки вытянуть числа?
    #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
Как из строки вытянуть числа?
    #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
Как из строки вытянуть числа?
    #36008325
MX-9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nooob,

set Number=$tr(ALL,123456780.9_ALL,123456780.9)
...
Рейтинг: 0 / 0
Как из строки вытянуть числа?
    #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
Как из строки вытянуть числа?
    #36008511
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка (иначе пресловутые TAB-ы обрабатываются неверно):
Код: plaintext
1.
set x=$zstrip(x,"<APW") ; удаляем лидирующие буквы, знаки препинания и все виды пробелов
...
Рейтинг: 0 / 0
Как из строки вытянуть числа?
    #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
Как из строки вытянуть числа?
    #36009605
nooob
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем огромное спасибо!
За основу взял алгоритм krvsa и модернизировал его кодом Alexey Maslov'a
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как из строки вытянуть числа?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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