隙があればlispを詰め込んで行きたい (5)

平成22年7月8日(木) 16時50分29秒
区分
報告者:
chiba

隙があればlispを詰め込んで行きたい日々ですが、今回は一つのファイルを複数ファイルに分割する仕事です。
こういうのはやっぱりsed/awkの仕事だろう、と思うのですが、一つLISPでがんばりたいところ
具体的な仕事内容ですが、

  1. 複数のエントリーがまとめられた、複数の長いテキストファイルを入力とする
  2. エントリーの区切り文字は^_
  3. エントリーごとに1ファイルにして出力
というところです。
書き捨てな感じですが、
(dolist (file (directory "/var/tmp/foo/bar/big-*.txt"))
  (dolist (mail (cl-utilities:partition-if 
                 (mycl-util:curry #'string= "^_")
                 (kmrcl:read-file-to-strings file)))
    (alexandria:with-output-to-file 
        (out (format nil "/var/tmp/result/~A" (gensym "foo-")))
      (print out)
      (dolist (line mail)
        (write-line line out)))))
のように書いてみました。
軽く解説すると、
  1. ファイル読み込み1行を要素とするリストにする
  2. PARTITION-IFでリストの中身をデリミタで1ファイル1リストとして分割する
  3. 分割した要素1リストを1ファイルとして出力。名前が被らないようにGENSYMで名前をつける
という風にしてみました。
想像していたより短く書けたので満足です。

トップページに戻る

本頁の来客数
九万八千六百三十名

メンバー一覧

アクトインディ技師部隊員名簿

アクトインディ技師部元隊員

アクトインディへ

投稿する

カテゴリー

アクトインディ

aaaa