извлечение числа из строки в kdb

#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"
  

Тогда, конечно, вы можете привести его к любому типу, который вы хотите.