Преобразовать символ в список символов - PullRequest
0 голосов
/ 25 апреля 2018

Я читаю в CSV-файле:

csvFile:1!("SSS"; enlist ",") 0: hsym `$"\\\\location\\of\\csv";

Но списки символов читаются как отдельные символы.например, в CSV-файле у меня есть 'a'b'c, но

csvFile`some_keyed_value
`col1`col2!``a`b`c`

Что я хочу, это - и обратите внимание, как один тикер должен быть пустой список:

`col1`col2!(`a`b`c;())

Есть лиспособ сделать это приведение или читать в CSV по-другому или изменить CSV, чтобы он правильно читал?Любые изменения, которые я делаю в CSV (например, заменяя ' на ()), просто преобразуют его в один символ (например, я получаю '()).

Вот скриншот из нескольких строк изCSV

enter image description here

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

Вы также можете использовать функцию value для преобразования строки со встроенными обратными галочками в список символов.

// read in as strings as others have said
q)("**";1#",")0:`:test.csv
x      y
-------------
"`a`b" "`c`d"
"`e`f" "`g`f"
// value each string to convert to symbol lists
q)value@''("**";1#",")0:`:test.csv
x   y
-------
a b c d
e f g f
// check its now nested symbol type
q)meta value@''("**";1#",")0:`:test.csv
c| t f a
-| -----
x| S
y| S

Вы, конечно, можете использовать value в определенных столбцах, которые вам нужны, если это тоже соответствует вашим целям, например, update value each col1 from ...

0 голосов
/ 25 апреля 2018

Для вашего ввода работает следующее.Вы также можете использовать cut вместо vs, как в предыдущем примере.

q)update `$table, `$_[1;]each vs["`";]each writeAllow, `$_[1;]each 
vs["`";]each writeLog from ("***";enlist",")0:`:tmp.csv

table       writeAllow            writeLog
------------------------------------------------------
:/loader/P1 `pg`sec-fg-id         `symbol$()
:/loader/P2 `pg`shara`mcdonald    `pg`MD`svc
:/loader/P3 `symbol$()            `pg`MD`svc

Возможно, вам следует пересмотреть хранение данных sym с помощью обратных кавычек - было бы просто хранить их с другим разделителем для разделения подзаписей.и иметь специальную функцию для разбора этих полей.

0 голосов
/ 25 апреля 2018
q)t
table      writeAllow               writeLog
----------------------------------------------------------
:loader/p1 "`pg`sec-fg-id"       ""
:loader/p2 "`pg`shara`cmacdonald" "`pg`MD`svc"
:loader/p3 ""                       "`pg`MD`svc"    

q)foo:(`$1_"`" vs) each
q)update foo[writeAllow], foo[writeLog] from t
table      writeAllow             writeLog
------------------------------------------------------
:loader/p1 `pg`sec-fg-id       `symbol$()
:loader/p2 `pg`shara`mcdonald `pg`MD`svc
:loader/p3 `symbol$()             `pg`MD`svc
0 голосов
/ 25 апреля 2018

Взяв этот CSV в качестве примера:

cat ex.csv
x,y
`aa`bb,
`cc`dd,`ee`ff
,`gg`hh

Сначала необходимо загрузить эти вложенные символьные столбцы в виде строк:

q)show tab:("**";enlist",")0:`:ex.csv
x        y
-----------------
"`aa`bb" ""
"`cc`dd" "`ee`ff"
""       "`gg`hh"

Отсюда вам нужно отбросить галочки и преобразовать строки в символы. Один из возможных способов сделать это:

q)update {`$1_'where["`"=x]cut x}'[x] from tab
x          y
-------------------
`aa`bb     ""
`cc`dd     "`ee`ff"
`symbol$() "`gg`hh"
...