ЛЮБВИ - PullRequest
       31

ЛЮБВИ

2 голосов
/ 25 ноября 2010

если я определяю для K = "ABC": 1: 3 теперь, каково значение "ABC", как цикл для выполнения "ABC" или вместо этого ABC, если я беру какую-либо "строку", как увеличивается строка "ABC".

BHAs

Ответы [ 4 ]

5 голосов
/ 26 ноября 2010

MUMPS преобразует строки в числовые значения, читая строку слева направо.Он будет использовать любые числа и первый период, который встречается в результирующем номере, и остановится на первом нечисловом символе.

Примеры преобразования строки в число:

String -> Число
"1234" -> 1234
"1234A" -> 1234
"1234A4321" -> 1234
"" -> 0
"A" -> 0
"ABC "-> 0

3 голосов
/ 19 января 2011

Если у вас есть доступ к системе MUMPS, это легко выяснить. Просто запустите следующую процедуру, которая может находиться, например, в файле for3.m:

for3

; routine to test FOR command

   FOR K="ABC":1:3 WRITE "K=",K,! QUIT

На моем Linux-компьютере установлен GT.M. Вы можете получить это на http://sourceforge.net/projects/fis-gtm/

Вот вывод:

$ gtm -run for3
K=0
K=1
K=2
K=3

НТН Nathan

2 голосов
/ 03 февраля 2011

Если вы хотите перебрать строку «ABC», вы можете сделать это:

S STR="ABC"
F I=1:1:$L(STR) W $E(STR,I,I),!

функция $ L ($ Length) вернет длину STR. В этом случае 3, поэтому цикл for будет повторяться только 3 раза.

Функция $ E ($ Extract) извлечет подстроку STR. Первый параметр $ E - это строка для извлечения. Второй параметр - это начальная позиция, а третий параметр - это конечная позиция подстроки. В этом случае я указываю одну и ту же начальную и конечную позиции, чтобы каждый символ извлекался по одному за раз.

Вы также можете указать разделитель полей в качестве второго параметра функции $ L. Поэтому, если STR = "Name | Age | Sex", вы можете написать каждое поле следующим образом:

S STR="NAME|AGE|SEX"
F I=1:1:$L(STR,"|") W $P(STR,"|",1),!

Здесь $ L будет возвращать 3, а цикл for будет повторяться 3 раза.

Функция $ P ($ Piece) извлекает каждое поле из STR, используя символ канала (|) в качестве разделителя полей, и я определяю, какое поле возвращать.

Надеюсь, это поможет ...

igotmumps

1 голос
/ 19 января 2011

Очень извиняюсь за фальшивое форматирование. Моя вина!

Список программ должен был быть:

for3

; routine to test FOR command

   FOR K="ABC":1:3 WRITE "K=",K,! QUIT

И вывод должен был быть:

$ gtm -run for3 
K=0 
K=1 
K=2
K=3
...