#kdb #q-lang
#kdb #q-lang
Вопрос:
Я совсем новичок в kdb q. Я столкнулся с этой проблемой извлечения числа из строки.
Есть предложения?
Пример:
"AZXER_1234_MARKET" should output 1234 //Assume that there is only one number in the
строка
Ответ №1:
Извлеките числа, затем приведите их к требуемому типу.
q){"I"$x inter .Q.n} "AZXER_1234_MARKET"
1234i
q){"I"$x inter .Q.n} "AZXER_123411_MARKET"
123411i
q){"I"$x inter .Q.n} "AZXER_1234_56_MARKET"
123456i
q){"I"$x inter .Q.n} "AR_34_56_MAT"
3456i
Комментарии:
1. Хороший ответ. Но я бы предложил альтернативу для этого, которая в основном то же самое: {«I» $ x inter «0123456789»} «AZXER_1234_MARKET» .Q.n — это не что иное, как «0123456789», но . Q реализация подвергается изменениям, как указано в файле q.k (d .Q / НЕ ИСПОЛЬЗУЙТЕ ПРОЦЕДУРЫ, ПРОШЕДШИЕ ЗДЕСЬ. МОЖЕТ БЫТЬ ИЗМЕНЕНО). Поэтому обычно не рекомендуется использовать его, если вы не используете какую-либо сложную функцию.
Ответ №2:
Если у вас несколько чисел, вот вариант приведенного выше, который позволяет использовать несколько чисел в одной строке
q)nums:{"I"$((where namp;differ n:x in .Q.n) cut x) inter: .Q.n}
q)nums "this is 123 and this is 56"
123 56i
Ответ №3:
Я могу предложить следующее, если мы предполагаем только одно число в строке:
q)"AZXER_1234_MARKET"inter .Q.n
"1234"
q)"A_5643_B"inter .Q.n
"5643"
Тогда, конечно, вы можете привести его к любому типу, который вы хотите.