Вычисление поля - как сделать???

0 голосов
спросил 17 Июнь, 04 от Vius (7,580 баллов) в категории Программные продукты Esri

Такая проблема: есть три поля. В первом четное число (скажем, четыре) и во втором четное число (например, 12). В третье поле нужно записать значения таким образом - "4 6 8 10 12" (т.е. первое число должно быть из первого поля, последнее из второго, между ними - все четные, которые попадают в этот промежуток). Вопрос такой - как указать этот самый предел, чтобы калькулятор понял, что надо остановиться на 12??? (Кстати, для другого объекта числа могут быть другие, т. е. количество чисел между ними может быть другое). Надеюсь, понятно написал. 

10 Ответы

0 голосов
ответил 18 Июнь, 04 от Stvan (7,620 баллов)
Dim result As String
For i= [1] To [2]
If i\2=i/2 then
result = result + Str(i)
end if
Next
__esri_field_calculator_splitter__
result
0 голосов
ответил 21 Июнь, 04 от Vius (7,580 баллов)

Спасибо.

Если можно, чуть подробнее, вместо цифр 1 и 2 надо написать имена полей, так? Чему равно поле 3? Что писать в калькуляторе?

0 голосов
ответил 21 Июнь, 04 от Stvan (7,620 баллов)
Весь этот текст как есть сохранить в файл с расширением cal. Вместо 1 и 2 названия полей первого и второго. Ну и открыть его при пересчете поля 3.
0 голосов
ответил 21 Июнь, 04 от Vius (7,580 баллов)

Класс, все работает, спасибо.

А если немного усложнить задачу (я, честно говоря, думал, что у меня получится, глядя на этот пример, но увы...): есть пять полей (для определенноси - имена 1,2,3,4,5). В первых двух - четные числа, во вторых двух - нечетные. Надо заполнить пятое таким образом - первое число - из первого четного поля, затем четные в промежутке до числа из второго четного, затем число из второго четного, затем нечетное из третьего поля, нечетные в промежутке, затем нечетное число из четвертого поля. Все эти числа должны быть разделены знаком ";", после ";" должен быть пробел. 

Например:

поле 1  - число 2, поле 2 - число 6, поле 3 - 13, поле 4 - 19. поле 5 должно выглядеть так: 2; 4; 6; 13; 15; 17; 19;

огромное спасибо.

 

0 голосов
ответил 22 Июнь, 04 от Ilya (10,800 баллов)

Dim result As String
Dim res_prom As String
For i= [1] To [2]
If i\2=i/2 then
res_prom = Str(i) & "; "
result = result + res_prom
end if
Next
For i= [3] To [4]
If i\2<>i/2 then
res_prom = Str(i) & "; "
result = result + res_prom
end if
Next

Надо включить галочку "Дополнительно". В окне Pre-Logic VBA Script Code набрать скрипт, а  в нижнем окошке написать

result

 

0 голосов
ответил 22 Июнь, 04 от Vius (7,580 баллов)

Спасибо большое, все работает почти.

Странно, если значения первых четырех полей соответственно 0, 0, 59, 61, то на выходе получается 0; 59; 61. А если значения 48, 54, 0, 0, то на выходе получается 48; 50; 52; 54. Почему-то ноль не отображается в конце.

И еще: почему-то в выходном поле строка начинается с пробела, и только потом идут значения. 

 

0 голосов
ответил 22 Июнь, 04 от Vius (7,580 баллов)

Отбой, нули вообще не нужны, а пробелы в начале я убрал. Спасибо

0 голосов
ответил 23 Июнь, 04 от Ilya (10,800 баллов)

А как пробелы убрал?

0 голосов
ответил 23 Июнь, 04 от Vius (7,580 баллов)

пробелы - trim field

а вто с нулями проблема, они в конце строки, не удалось мне их автоматически грохнуть...

0 голосов
ответил 24 Июнь, 04 от Ilya (10,800 баллов)

Ну, тут тоже можно зациклить на равенство предпоследнего знака нулю.

Dim result As String
rev:
i = Len(result)
x = InStrRev(result, 0)
If i - x = 1 Then
result = Left(result, (i - 2))
GoTo rev
End If

 

Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...