Страница 1 из 1

Калькулятор полей - Разделитель

Добавлено: 24 мар 2013, 14:21
oleg
Вопрос по калькулятору полей в ArcGIS\QGIS\gvSIG.

Есть текстовое поле вида "текст текст1\текст2\текст текст3\текст4" - текст с пробелами через слеш. Нужно скопировать части текста разделенные слешем в новые пустые поля вида "Field1-4".

Подскажите, пожалуйста, как правильно составить запрос(ы) в этом случае?

Re: Калькулятор полей - Разделитель

Добавлено: 24 мар 2013, 15:28
HasT
В QGIS есть функция substr(string,startpos,length) (string → is string. The full string.; startpos → is number. The start position to extract from.; length → is number. The length of the string to extract.). Данная функция подойдет, если длина "текста" перед/после знаками "/" для каждого объекта в слое одинакова. Если не одинакова, то сохранить таблицу атрибутов в текстовый файл, открыть текстовый файл в Excel c разделителем "/", сохранить получившиюся таблицу в dbf и сделать Join данной таблицы к слою.

Re: Калькулятор полей - Разделитель

Добавлено: 24 мар 2013, 15:34
oleg
HasT писал(а):Если не одинакова, то сохранить таблицу атрибутов в текстовый файл, открыть текстовый файл в Excel c разделителем "/", сохранить получившиюся таблицу в dbf и сделать Join данной таблицы к слою.
HasT, спасибо! Так обычно и делаю (через LibreOffice сsv), но тк задача частая в поиске решение для калькулятора полей.

Re: Калькулятор полей - Разделитель

Добавлено: 24 мар 2013, 15:34
Petruxin
оффтоп
HasT. У меня сложилось мнение, что тема Калькулятор полей Вам хорошо знакома. Может порредактируйте Черновик статьи. Очень полезная статья может выйти, только доработать бы?

Re: Калькулятор полей - Разделитель

Добавлено: 24 мар 2013, 19:23
HasT
Petruxin писал(а):оффтоп
HasT. У меня сложилось мнение, что тема Калькулятор полей Вам хорошо знакома. Может порредактируйте Черновик статьи. Очень полезная статья может выйти, только доработать бы?
ок. Возьмусь за работу

Re: Калькулятор полей - Разделитель

Добавлено: 25 мар 2013, 01:17
doujin
Для ArcGIS 10.x решение следующее: вызываем калькулятор для каждого из полей. Интерпретатор - python.
Field1:

Код: Выделить всё

!Исходное текстовое поле!.split(u"\\")[0]
Field2:

Код: Выделить всё

!Исходное текстовое поле!.split(u"\\")[1]
Field3:

Код: Выделить всё

!Исходное текстовое поле!.split(u"\\")[2]
Field4:

Код: Выделить всё

!Исходное текстовое поле!.split(u"\\")[3]
Можно сократить ручной труд, если составить отдельный скрипт примерно такого содержания:

Код: Выделить всё

#-*- coding: utf-8 -*-
import arcpy
arcpy.env.workspace = u"" #Путь к базе, где находится класс объектов
in_table = u"" #Имя класса, в котором считаем поля
fields_list = [u"Field1", u"Field2", u"field3", u"Field4"] #Список имен вычисляемых полей
for i, field in enumerate(fields_list):
  expression = u"!Исходное текстовое поле!.split(u'\\')[{0}]".format(i)
  arcpy.CalculateField_management(in_table, field, expression, u"PYTHON_9.3")
P.S. Его не нужно вставлять в калькулятор, а можно запускать даже не открывая ArcGIS.

Re: Калькулятор полей - Разделитель

Добавлено: 27 мар 2013, 10:01
oleg
Работает. doujin, спасибо!