Gauche のお勉強メモ。文字列処理。
整理しながらなんで全然まとまりないし改善の余地ありありですが。
;; カレントディレクトリを glob して ;; 末尾が .html のファイル名だけを取る (filter #/\.html$/ (glob "*"))
;; 逆に .html を省く (remove #/\.html$/ (glob "*"))
;; Perl でいうところの、 ;; open my $in, "<", "file_name"; (define in (open-input-file "file_name"))
;; 1行ずつ読み込み (read-line in)
;; Perl でいうところの、 ;; close $in; (close-input-port in)
;; ファイルの中身を丸っと読み込み (define str (call-with-input-file "file_name" port->string))
;; ファイルの中身を行単位でリストにして読み込み (define lst (call-with-input-file "file_name" port->string-list))
;; カレントディレクトリにあるファイル名のリスト (define files (glob "*"))
;; ファイルの内容のリスト (define values (map (lambda (file) (call-with-input-file file port->string)) files))
;; files と values を組み合わせた alist (define alist (map (lambda (f v) (cons f v)) files values))
;; いやいや、まとめてやりましょう。 (define alist (map (lambda (file) (cons file (call-with-input-file file port->string))) (glob "*")))
;; ファイルの内容に特定の文字列を含むファイル名 (map (lambda (lst) (and (rxmatch #/bla bla bla/i (cdr lst)) (car lst))) alist) ;; 但し、結果はこんな風に表示されてしまうので ;; -> ("foo.html" "bar.txt" #f #f)
;; マッチしなかった場合は結果から除く (remove (lambda (result) (eq? result #f)) (map (lambda (lst) (and (rxmatch #/bla bla bla/i (cdr lst)) (car lst))) alist)) ;; -> ("foo.html" "bar.txt")
参考:
Scheme:テキスト処理
#Gauche #Scheme #Lisp #IO #Regex #Shell
SN 2013/06/30 00:59:19
Archives > Gauche_text_filter.html