#:g1: cl-csvの紹介

Posted 2014-08-21 14:30:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の233日目です。

cl-csvとはなにか

 cl-csvは、Edward Marco Baringer氏とRuss Tyndall氏作によるCSVのライブラリです。

パッケージ情報

パッケージ名cl-csv
Quicklisp
CLiKiCLiki: CL-CSV
Quickdocscl-csv | Quickdocs
CL Test Grid: ビルド状況cl-csv | CL Test Grid

インストール方法

(ql:quickload :cl-csv)

試してみる

 どんな関数があるかは、Quickdocsで確認できます。

(with-output-to-string (out)
  (cl-csv:write-csv (*:group (*:iota 100) 10)
                    :stream out))
;=>  "0,1,2,3,4,5,6,7,8,9^M
;    10,11,12,13,14,15,16,17,18,19^M
;    20,21,22,23,24,25,26,27,28,29^M
;    30,31,32,33,34,35,36,37,38,39^M
;    40,41,42,43,44,45,46,47,48,49^M
;    50,51,52,53,54,55,56,57,58,59^M
;    60,61,62,63,64,65,66,67,68,69^M
;    70,71,72,73,74,75,76,77,78,79^M
;    80,81,82,83,84,85,86,87,88,89^M
;    90,91,92,93,94,95,96,97,98,99^M
;    "

(with-input-from-string (in "0,1,2,3,4,5,6,7,8,9^M 10,11,12,13,14,15,16,17,18,19^M 20,21,22,23,24,25,26,27,28,29^M 30,31,32,33,34,35,36,37,38,39^M 40,41,42,43,44,45,46,47,48,49^M 50,51,52,53,54,55,56,57,58,59^M 60,61,62,63,64,65,66,67,68,69^M 70,71,72,73,74,75,76,77,78,79^M 80,81,82,83,84,85,86,87,88,89^M 90,91,92,93,94,95,96,97,98,99^M ") (cl-csv:read-csv in)) ;=> (("0" "1" "2" "3" "4" "5" "6" "7" "8" "9") ; ("10" "11" "12" "13" "14" "15" "16" "17" "18" "19") ; ("20" "21" "22" "23" "24" "25" "26" "27" "28" "29") ; ("30" "31" "32" "33" "34" "35" "36" "37" "38" "39") ; ("40" "41" "42" "43" "44" "45" "46" "47" "48" "49") ; ("50" "51" "52" "53" "54" "55" "56" "57" "58" "59") ; ("60" "61" "62" "63" "64" "65" "66" "67" "68" "69") ; ("70" "71" "72" "73" "74" "75" "76" "77" "78" "79") ; ("80" "81" "82" "83" "84" "85" "86" "87" "88" "89") ; ("90" "91" "92" "93" "94" "95" "96" "97" "98" "99"))

(with-input-from-string (in "0,1,2,3,4,5,6,7,8,9 10,11,12,13,14,15,16,17,18,19 20,21,22,23,24,25,26,27,28,29 30,31,32,33,34,35,36,37,38,39 40,41,42,43,44,45,46,47,48,49 50,51,52,53,54,55,56,57,58,59 60,61,62,63,64,65,66,67,68,69 70,71,72,73,74,75,76,77,78,79 80,81,82,83,84,85,86,87,88,89 90,91,92,93,94,95,96,97,98,99 ") (cl-csv:do-csv (row in) (print row))) ;>> ;>> ("0" "1" "2" "3" "4" "5" "6" "7" "8" "9") ;>> ("10" "11" "12" "13" "14" "15" "16" "17" "18" "19") ;>> ("20" "21" "22" "23" "24" "25" "26" "27" "28" "29") ;>> ("30" "31" "32" "33" "34" "35" "36" "37" "38" "39") ;>> ("40" "41" "42" "43" "44" "45" "46" "47" "48" "49") ;>> ("50" "51" "52" "53" "54" "55" "56" "57" "58" "59") ;>> ("60" "61" "62" "63" "64" "65" "66" "67" "68" "69") ;>> ("70" "71" "72" "73" "74" "75" "76" "77" "78" "79") ;>> ("80" "81" "82" "83" "84" "85" "86" "87" "88" "89") ;>> ("90" "91" "92" "93" "94" "95" "96" "97" "98" "99") ;=> NIL

 これらの他、行単位で読み書きする、read/write-csv-row、要素単位で読み書きする、read/write-csv-valueが用意されていますが、大体他のCSVを扱うライブラリと同じで、CSVをリストに変換してくれるので、後はリスト操作で好きなように処理するという感じです。
これらに加えて、行単位で処理するdo-csvも用意されていて、さらに、改行やクォート方法については変数でカスタマイズできます。

まとめ

 今回は、cl-csvを紹介してみました。
CLikiでは、CSVを扱うお勧めライブラリとしては、このcl-csvが挙げられています。

どの辺りが良いのかの理由は書いてありませんが、多分、他より良いのでしょう。

comments powered by Disqus