How does one deal with a \ delimited txt file when using \ as the delim breaks in a typical csv load?
Also, how does one deal with a no delimited txt file? In other words reading bytes?
Anyone know?
How does one deal with a \ delimited txt file when using \ as the delim breaks in a typical csv load?
Also, how does one deal with a no delimited txt file? In other words reading bytes?
Anyone know?
Hi ticktick,
Using an example file:
This\is\a\backslash\delimited\file And\this\is\the\second\line
We can load it in using read0 as follows:
q)ssr[;“\”;" "] each read0 `:backslash.txt “This is a backslash delimited file” “And this is the second line”
To read bytes, use read1.
Further information on handling text data can be found on code.kx at:
Hope this helps!
David
Hey David, thanks! Unfortunately that didn’t split the backslashes for me.
I guess to be more specific, the file is columns of data smushed together with a backslash to delimit them. I’m trying to get this all into a table.
Is there no way to use a “\” in a normal csv call to accomplish this?
something like:
tab: (“sfff”; enlist “\”) 0: `path
Thanks!
I have made the following text file:
user@host:~$ vim text.txt first\last\age simon\says\40 michael\jordan\20 peter\pan\65
and when I read it in a q session it reads as:
q)read0 `:text.txt “first\last\age” “simon\says\40” “michael\jordan\20” “peter\pan\65”
(read0 used to read chars) so in order to read it into a table, I will need to pass “\” as the delimiter, i.e.
q)show t:(“SSI”;enlist “\”)0:`:text.txt first last age ------------------ simon says 40 michael jordan 20 peter pan 65
(0: used to read/write chars). See more about reading & writing files here at [the kx docs.](“https://code.kx.com/q/basics/files/” "“File”)
Thanks SStewart! What do I do if the file reads in singular backslash?
“000\000\000\000”
Longstory short I have a dump file that I converted to txt file. When I read it into kdb its all 1 line and you can tell the columns are split by single backslash.
Thusfar all my attempts at opening/tabling this pig have failed. I apologize for the profanity.
When I create a text file with delimeter "" and vim into it the backslash is replaced with caret notation null-type (^@), i.e.
q)`:astxt.txt 0:enlist “000\000\000\000” q)\ user@host$vim astxt.txt 000^@^@^@
so I think the “\000” is q interpreting the null type. Can you maybe provide more of the string?
Hi ticktick, could you provide the whole line? Thanks, Stephen.
Here is a text file bar.csv that fits your field descriptors.
name\c1\c2\c3
tom\1.1\1.2\1.3
duck\2.1\2.2\2.3
harry\3.1\3.2\3.3
The backslash is a special character used to escape special characters. To write one, escape it.
q)count"\"
1
Field descriptors are upper case , as in the left argument to Tok. Now your (slightly modified) Load CSV works:
q)(“SFFF”;enlist"\")0:`bar.csv
name c1 c2 c3
-----------------
tom 1.1 1.2 1.3
duck 2.1 2.2 2.3
harry 3.1 3.2 3.3