Замена значений в поле

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Замена значений в поле

Сообщение Petruxin » 26 июн 2012, 09:39

Здравствуйте.
QGIS 1.8
Пока не нашел не на форуме не в Руководстве пользователя. В Вики проочитал(и предположил) что автоматически заменить значения в поле помогает
Функция tostring ()
Преобразует числовые данные в строковые.
Синтаксис
tostring (a)
Аргументы
a -> числовое поле (целочисленное или дробное)
Пример
tostring ("fild_name1")
Но чегото не допонял как.
Прилагаю картинку(надо для начала в Поле "T_TEXTURE" заменить "1" на значение "грубые")
Думаю если с одним получится то дальше разберусь
Вложения
Замена полей.png
Замена полей.png (55.74 КБ) 12392 просмотра
Последний раз редактировалось Petruxin 26 июн 2012, 21:56, всего редактировалось 1 раз.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Замена значений в поле

Сообщение Voltron » 26 июн 2012, 10:08

Поле T_TEXTURE, как понимаю числовое? В таком случае, вам надо создавать новое поле типа String и заполнить его используя выражение

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

CASE WHEN "ID" = 1 THEN 'грубые' ELSE '' END
Выражения являются новым функционалом и, естественно, в руководстве пользователя прошлой версии о них ничего нет.

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Замена значений в поле

Сообщение rhot » 26 июн 2012, 10:09

Petruxin писал(а):В Вики проочитал(и предположил) что автоматически заменить значения в поле помогает
дак эта функция преобразует тип данных, а вы хотите, насколько я понял, автоматически сделать замену по условию, так?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Замена значений в поле

Сообщение rhot » 26 июн 2012, 10:11

Voltron писал(а):Поле T_TEXTURE, как понимаю числовое?
по скрину оно текстовое
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Замена значений в поле

Сообщение Petruxin » 26 июн 2012, 11:45

Поле числовое(там цифра 1 стоит), а мне нужно чтобы был текст "грубые". В этом же поле есть допустим цифра "2" а мне ее на слово "среднее" заменить надо.
Наверное
автоматически сделать замену по условию, так?
мне бы подошло если я правильно понял что это такое, но видимо есть проблема с тем ,что поле бывает числовое или текстовое?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Замена значений в поле

Сообщение Voltron » 26 июн 2012, 12:14

Petruxin писал(а):Поле числовое(там цифра 1 стоит), а мне нужно чтобы был текст "грубые"
Нельзя в числовое поле вставить текст. НЕЛЬЗЯ. Это разные типы данных. Создавайте новое поле (как это делать я вам написал). Потом, после замены всех значений старое поле удаляете, а новое переименовываете.

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Замена значений в поле

Сообщение Petruxin » 26 июн 2012, 19:23

Поле создал. Теперь дайте ссылочку как значения на автомате менять...

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Замена значений в поле

Сообщение Voltron » 26 июн 2012, 19:58

Выше было же.
Давайте еще раз по шагам.
  1. открыли слой
  2. перешли в режим редактирования
  3. открыли таблицу атрибутов
  4. вызвали Калькулятор полей
  5. выбрали «Создать новое поле». Задали название. Тип поля — «Текст (string)», размер — выбираете такой, чтобы влез самый длинный ваш текст (помним про ограничение в 255 символов и UTF-8)
  6. в поле выражение пишем следующее

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

    CASE WHEN "T_TEXTURE" = 1 THEN 'грубые' ELSE '' END
  7. жмем «OK»
  8. проверяем результат и сохраняем изменения
Аналогично выполняется замена других значений, только выбирать надо уже не «Создать новое поле», а «Обновить существующее поле» и соответственно менять выражение. После того, как все значения заменены поле T_TEXTURE удаляете (либо встроенными средствами, либо через TableManager), а новое поле переименовываете в T_TEXTURE (тем же TableManager)

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Замена значений в поле

Сообщение Petruxin » 26 июн 2012, 20:56

Voltron Будте еще любезны объяснить почему в одном и том же поле после выполнения Вами написанной команды значения заменяются, а после последующей замены другого значения в этом же поле(обновить поле, Ваш код вставляю и заменяю значения...) новое значение появляется, а старое стирается?

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Замена значений в поле

Сообщение rhot » 26 июн 2012, 21:10

сами стираете
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Замена значений в поле

Сообщение Petruxin » 26 июн 2012, 21:12

Да не о чем мне не говорит. Ткните в фейс конкретно. То есть надо
ELSE ''
удалить из выражения?

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Замена значений в поле

Сообщение rhot » 26 июн 2012, 21:16

если у вас всего два значения: 1 и 2, то писать

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

CASE WHEN "T_TEXTURE" = 1 THEN 'грубые' ELSE 'среднее' END
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Petruxin
Гуру
Сообщения: 1695
Зарегистрирован: 14 июн 2011, 16:47
Репутация: 133
Ваше звание: Завсегдатай
Откуда: Череповец

Re: Замена значений в поле

Сообщение Petruxin » 26 июн 2012, 21:19

Из Вашего кода не понятно что "2" превратится в "среднее"
А значений всего 3

Попробовал. Как у нас говорится
около дела
:D , но Ваш код все что не "грубое" превратил в "среднее" и "NA" и "3" которое хотелось бы видеть как "легкое"

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: Замена значений в поле

Сообщение rhot » 26 июн 2012, 21:30

Из Вашего кода не понятно что "2" превратится в "среднее"
дословно с английского: "В СЛУЧАЕ КОГДА "T_TEXTURE" = 1 ТОГДА значение поля равно 'грубые' В ПРОТИВНОМ СЛУЧАЕ значение поля равно 'среднее' КОНЕЦ ВЫРАЖЕНИЯ"
чего непонятного?
А значений всего 3
ууу,.. тогда я не знаю, способен ли QGIS с этим справиться...
Последний раз редактировалось rhot 26 июн 2012, 21:32, всего редактировалось 1 раз.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Замена значений в поле

Сообщение Voltron » 26 июн 2012, 21:32

Petruxin писал(а):Voltron Будте еще любезны объяснить почему в одном и том же поле после выполнения Вами написанной команды значения заменяются, а после последующей замены другого значения в этом же поле(обновить поле, Ваш код вставляю и заменяю значения...) новое значение появляется, а старое стирается?
Потому что вы невнимательно прочитали то, что вам ответили и не разобрались как это все работает :-)
и соответственно менять выражение
Если выражение перевести на русский, то получится примерно следующее

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

ЕСЛИ "T_TEXTURE" = 1 ТО (в поле вписать) 'грубые' ИНАЧЕ (в поле вписать) ''
Что произойдет, если вы замените только первую часть, которая до ИНАЧЕ, а все остальное оставите как есть? Т.е вот так

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

ЕСЛИ "T_TEXTURE" = 2 ТО (в поле вписать) 'точно' ИНАЧЕ (в поле вписать) ''
Правильно. Все записи, для которых поле T_TEXTURE равно 2, будут обновлены и получат значение поля "точно". А все остальные записи будут обновлены с использованием пустой строки (''). Т.е. менять надо все части выражения.

Вы хотите, чтобы на втором и всех последующих шагах, т.е. когда меняется 2 на какой-то текст, 3 на какой-то текст и т.д., обновлялись только эти поля, а все остальные оставались неизменными. Что для этого нужно? А нужна сущая мелочь — подставлять значение этого же поля. Таким образом, выражение для последующих замен будет иметь вид

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

CASE WHEN "T_TEXTURE" = 1 THEN 'грубые' ELSE "NEW_FIELD" END
где NEW_FIELD название поля, которое вы обновляете.

Теперь понятно?

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость