Удаление персонажа из столбца символов - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть таблица со столбцами, содержащими числа, один столбец содержит две буквы перед каждым числом в столбце.

Как удалить эти две буквы в этом столбце.

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Предполагая, что ваша таблица выглядит примерно так:

q)t:([]a:1 2 3; b:`aa1`aa2`aa3; c:1 2 3)
q)t
a b c
-------
1 aa1 1
2 aa2 2
3 aa3 3

Вы можете использовать

q)@[t;`b;"F"$2_'string@]
a b c
-----
1 1 1
2 2 2
3 3 3

. Это приведет к тому, что оригинальные символы будут преобразованы в строку, а первые 2 символа будут выброшены в столбце b.затем бросить на поплавок.Вы можете привести их к целому числу, для этого вы можете сделать что-то вроде этого:

q)@[t;`b;"I"$2_'string@]
a b c
-----
1 1 1
2 2 2
3 3 3

С уважением, Шариат

0 голосов
/ 07 декабря 2018

Или в qsql:

q)t:([]a:1 2 3; b:`aa1`aa2`aa3; c:1 2 3)
q)update b:"J"$2_'string b from t

Если b не символ, а список символов, вы можете удалить вызов на

0 голосов
/ 07 декабря 2018

Поскольку символ является только ссылкой на строку, вам необходимо сначала оценить его, прежде чем работать с базовой строкой.

Использование оператора drop с каждым правым оператором удалит первые 2 элемента из спискаи затем вы можете привести его обратно к символьному формату.

Со списком

q)l:`aa1`bb2
q)string l
"aa1"
"bb2"
q)2_/:string l
,"1"
,"2"
q)`$2_/:string l
`1`2

Вы можете встроить это в оператор обновления, заменив l на имя вашего столбца.

Если количество различных символов мало, вы можетеиспользуйте .Q.fu.Это берет функцию, применяет ее к каждому отдельному символу один раз и копирует результат в остальную часть списка, что будет быстрее, когда операция дорогая, а строковые операции часто бывают

q)\t .Q.fu[{`$2_/:string x};l]
19
q)\t `$2_/:string l
625
...