howmsplit:ファイル名、文字コード
だいたいの雛形。
sjisのcygwin、そのcygwin上のgauche、utf-8のソースで処理対象ファイル名に日本語が含まれているケース。
指定されたディレクトリ以下のhowmの1日1ファイル形式のファイルを読み込んで、拡張子をテキストにして出力。
howmファイルはsjisで書かれている。
#!/usr/local/bin/gosh (use file.util) ;(define rx-howm-file #/\/\d\d\d\d-\d\d-\d\d\.howm$/) ;(define rx-howm-file #/\d\d\d\d-\d\d-\d\d\.howm$/) (define rx-howm-file #/^\d\d\d\d-\d\d-\d\d\.howm$/) (define (howmsplit file-name) (format #t "~A~%" file-name) (with-input-from-file file-name (lambda () (with-output-to-file (string-append (path-sans-extension file-name) "." "txt") (lambda () (let loop ((line (read-line))) (cond ((not (eof-object? line)) (format #t "~A~%" line) (loop (read-line)))))))) :encoding "*jp")) (define (main args) (format #t "arts: ~A~%" args) (cond ((null? (cdr args)) (format #t "set howm directory.~%")) (else (directory-fold (car (cdr args)) ;listerからは不完全文字列のファイル名も渡ってくる。 (lambda (file seed) (when (and (string-incomplete->complete file) (rxmatch rx-howm-file (sys-basename file))) ;不完全を含むファイルは捨てる。 ; (when (rxmatch rx-howm-file file) ; (when (rxmatch rx-howm-file (sys-basename file)) (howmsplit file))) '()))))
shift-jisというかms漢字のファイル名は内部で何か処理しようとすると、エラーになる(ここでは正規表現マッチ)。
不完全文字列というらしい。
ソースをsjisにしても同じだったから、どこかで変換するのかな。
今回は単純にスルー。
入力テキストの文字コードは、オプションで自動判定してくれるので、非常に楽。
出力は、何もしなければutf-8になる。
cygwinもutf-8対応になったみたいだし、移行するか。
list->stringは文字の連結。
(list->string '(#\a #\s #\d #\f)) "asdf"
文字列の連結は、string->append
gosh ./gauche/tmp/dir-fold.scm `cygpath -u "D:\home\someone\test\howm"`
windows上のファイラーからパス名をコピってきて渡したので。