2017-04-30 12 views
2

私は以下のテーブル「日付」を持っています。記号の付いたsym列と文字列のリストのd列があり、それを通常のCSVファイルに保存します。それを行う良い方法を見つけることができませんでした。助言がありますか?kdb +:テーブルをcsvファイルに保存

q)dates 
sym d 
---------------------------------------------------------------------------- 
6AH0 "1970.03.16" "1980.03.17" "1990.03.19" "2010.03.15" 
6AH6 "1976.03.15" "1986.03.17" "1996.03.18" "2016.03.14" 
6AH7 "1977.03.14" "1987.03.16" "1997.03.17" "2017.03.13" 
6AH8 "1978.03.13" "1988.03.14" "1998.03.16" "2018.03.19" 
6AH9 "1979.03.19" "1989.03.13" "1999.03.15" "2019.03.18" 

私は定期的には以下のエラーを保存やろうたまたま:

q)save `:dates.csv 
k){$[t&77>t:@y;$y;x;-14!'y;y]} 
'type 
q)) 

答えて

3

KDB +内の内部テーブル - > CSV変換機能は、列にネストされたリストを処理することができません。テーブルのd列は、文字のリストです。ただし、変換関数は単純にネストされた列(深度1)を処理できます。

したがって、あなたは文字のリストにd列を変換し、内部関数使用してCSVに保存することができます:CSVの仕様に従って、

/ generate a table of dummy data 
q)show dates:flip `sym`d!(`6AH0`6AH6`6AH7;string (3;0N)#12?.z.d) 
    sym d 
    -------------------------------------------------------- 
    6AH0 "2008.02.04" "2015.01.02" "2003.07.05" "2005.02.25" 
    6AH6 "2012.10.25" "2008.08.28" "2017.01.25" "2007.12.27" 
    6AH7 "2004.02.01" "2005.06.06" "2013.02.11" "2010.12.20" 

/convert 'd' column to simple list - the (" " sv') is the conversion func here 
q)@[`dates;`d;" " sv'] 
    `dates 

/review what was done 
q)show dates 
    sym d 
    -------------------------------------------------- 
    6AH0 "2008.02.04 2015.01.02 2003.07.05 2005.02.25" 
    6AH6 "2012.10.25 2008.08.28 2017.01.25 2007.12.27" 
    6AH7 "2004.02.01 2005.06.06 2013.02.11 2010.12.20" 

/save to csv 
q)save `:dates.csv 
    `:dates.csv 

/review saved csv 
q)\cat dates.csv 
    "sym,d" 
    "6AH0,2008.02.04 2015.01.02 2003.07.05 2005.02.25" 
    "6AH6,2012.10.25 2008.08.28 2017.01.25 2007.12.27" 
    "6AH7,2004.02.01 2005.06.06 2013.02.11 2010.12.20" 
+0

ありがとうございました... –

+0

btw: "@"と "sv"の一般的な動作を理解したいと思いますか?私はそれらに関するすべての利用可能なドキュメントを読みましたが、実際にどのように動作するのかを本当に理解できませんでした。 –

+0

['@'](http://code.kx.com/wiki/Reference/AtSymbol)は、上の改正フォーム(機能修正)で使用されています。引数は '@ [; ; ] ' - で' 'の値を' 'に修正します。 ['sv'](http://code.kx.com/wiki/Reference/sv)は、他の言語の' join'関数に似ているスカラーからベクトルです( 'split'関数の逆で、' ' vs'](kdbのhttp://code.kx.com/wiki/Reference/vs) – MdSalih

2

を、あなたがリストを平らにしたいでしょうし、それぞれをカンマで区切り、リストを二重引用符で囲みます。

'保存'は、保存するグローバル変数と同じ名前にする必要があるという点で制限されています。

私はあなたの質問に任されていたなら、私はそれをそうするでしょう。

`:myFileNamedWhatever.csv 0: csv 0: select sym,csv sv'd from dates 

説明;

​​

私はこのアプローチを一般的なものとし、さまざまなタイプの保存が可能です。関数などの中で使用することができます。

後で、私はそれをパイプ(または何か)のファイルとして保存したいと決めました。

`:myNewFile.psv 0: "|" 0: select sym,"|"sv'd from table 
関連する問題