Страница 1 из 2
Замена значений в поле
Добавлено: 26 июн 2012, 09:39
Petruxin
Здравствуйте.
QGIS 1.8
Пока не нашел не на форуме не в Руководстве пользователя. В Вики проочитал(и предположил) что автоматически заменить значения в поле помогает
Функция tostring ()
Преобразует числовые данные в строковые.
Синтаксис
tostring (a)
Аргументы
a -> числовое поле (целочисленное или дробное)
Пример
tostring ("fild_name1")
Но чегото не допонял как.
Прилагаю картинку(надо для начала в Поле "T_TEXTURE" заменить "1" на значение "грубые")
Думаю если с одним получится то дальше разберусь
Re: Замена значений в поле
Добавлено: 26 июн 2012, 10:08
Voltron
Поле T_TEXTURE, как понимаю числовое? В таком случае, вам надо создавать новое поле типа String и заполнить его используя выражение
Код: Выделить всё
CASE WHEN "ID" = 1 THEN 'грубые' ELSE '' END
Выражения являются новым функционалом и, естественно, в руководстве пользователя прошлой версии о них ничего нет.
Re: Замена значений в поле
Добавлено: 26 июн 2012, 10:09
rhot
Petruxin писал(а):В Вики проочитал(и предположил) что автоматически заменить значения в поле помогает
дак эта функция преобразует тип данных, а вы хотите, насколько я понял, автоматически сделать замену по условию, так?
Re: Замена значений в поле
Добавлено: 26 июн 2012, 10:11
rhot
Voltron писал(а):Поле T_TEXTURE, как понимаю числовое?
по скрину оно текстовое
Re: Замена значений в поле
Добавлено: 26 июн 2012, 11:45
Petruxin
Поле числовое(там цифра 1 стоит), а мне нужно чтобы был текст "грубые". В этом же поле есть допустим цифра "2" а мне ее на слово "среднее" заменить надо.
Наверное
автоматически сделать замену по условию, так?
мне бы подошло если я правильно понял что это такое, но видимо есть проблема с тем ,что поле бывает числовое или текстовое?
Re: Замена значений в поле
Добавлено: 26 июн 2012, 12:14
Voltron
Petruxin писал(а):Поле числовое(там цифра 1 стоит), а мне нужно чтобы был текст "грубые"
Нельзя в числовое поле вставить текст. НЕЛЬЗЯ. Это разные типы данных. Создавайте новое поле (как это делать я вам написал). Потом, после замены всех значений старое поле удаляете, а новое переименовываете.
Re: Замена значений в поле
Добавлено: 26 июн 2012, 19:23
Petruxin
Поле создал. Теперь дайте ссылочку как значения на автомате менять...
Re: Замена значений в поле
Добавлено: 26 июн 2012, 19:58
Voltron
Выше
было же.
Давайте еще раз по шагам.
- открыли слой
- перешли в режим редактирования
- открыли таблицу атрибутов
- вызвали Калькулятор полей
- выбрали «Создать новое поле». Задали название. Тип поля — «Текст (string)», размер — выбираете такой, чтобы влез самый длинный ваш текст (помним про ограничение в 255 символов и UTF-8)
- в поле выражение пишем следующее
Код: Выделить всё
CASE WHEN "T_TEXTURE" = 1 THEN 'грубые' ELSE '' END
- жмем «OK»
- проверяем результат и сохраняем изменения
Аналогично выполняется замена других значений, только выбирать надо уже
не «Создать новое поле», а «Обновить существующее поле» и соответственно менять выражение. После того, как все значения заменены поле T_TEXTURE удаляете (либо встроенными средствами, либо через TableManager), а новое поле переименовываете в T_TEXTURE (тем же TableManager)
Re: Замена значений в поле
Добавлено: 26 июн 2012, 20:56
Petruxin
Voltron Будте еще любезны объяснить почему в одном и том же поле после выполнения Вами написанной команды значения заменяются, а после последующей замены другого значения в этом же поле(обновить поле, Ваш код вставляю и заменяю значения...) новое значение появляется, а старое стирается?
Re: Замена значений в поле
Добавлено: 26 июн 2012, 21:10
rhot
Re: Замена значений в поле
Добавлено: 26 июн 2012, 21:12
Petruxin
Да не о чем мне не говорит. Ткните в фейс конкретно. То есть надо
ELSE ''
удалить из выражения?
Re: Замена значений в поле
Добавлено: 26 июн 2012, 21:16
rhot
если у вас всего два значения: 1 и 2, то писать
Код: Выделить всё
CASE WHEN "T_TEXTURE" = 1 THEN 'грубые' ELSE 'среднее' END
Re: Замена значений в поле
Добавлено: 26 июн 2012, 21:19
Petruxin
Из Вашего кода не понятно что "2" превратится в "среднее"
А значений всего 3
Попробовал. Как у нас говорится
около дела

, но Ваш код все что не "грубое" превратил в "среднее" и "NA" и "3" которое хотелось бы видеть как "легкое"
Re: Замена значений в поле
Добавлено: 26 июн 2012, 21:30
rhot
Из Вашего кода не понятно что "2" превратится в "среднее"
дословно с английского: "В СЛУЧАЕ КОГДА "T_TEXTURE" = 1 ТОГДА значение поля равно 'грубые' В ПРОТИВНОМ СЛУЧАЕ значение поля равно 'среднее' КОНЕЦ ВЫРАЖЕНИЯ"
чего непонятного?
А значений всего 3
ууу,.. тогда я не знаю, способен ли QGIS с этим справиться...
Re: Замена значений в поле
Добавлено: 26 июн 2012, 21:32
Voltron
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 название поля, которое вы обновляете.
Теперь понятно?