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

区分
報告者

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

  1. 複数のエントリーがまとめられた、複数の長いテキストファイルを入力とする
  2. エントリーの区切り文字は^_
  3. エントリーごとに1ファイルにして出力 </ol> というところです。
    書き捨てな感じですが、
    (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で名前をつける
    4. </ol> という風にしてみました。
      想像していたより短く書けたので満足です。

トップページに戻る

技師部隊からの
お知らせ

【求人】エンジニア募集しています。

本頁の来客数
八十七万千百七十六名以上(計測停止中)

メンバー一覧

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

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

アクトインディへ

カテゴリー

アクトインディ

aaaa