Gauche でファイルを読み込み、1行 or 1文字毎に処理を行う

;;; reader を使ってデータを読み込み、fn で処理を行う
(define (read-with-function reader fn)
  (lambda ()
    (let loop ((val (reader)))
      (cond ((eof-object? val) '())
            (else (fn val)
                  (loop (reader)))))))

;;; ファイルを読み込み、1行毎に処理 fn を適用する
(define (read-lines file fn)
  (with-input-from-file file
    (read-with-function read-line fn)))

;;; ファイルを読み込み、1文字毎に処理 fn を適用する
(define (read-chars file fn)
  (with-input-from-file file
    (read-with-function read-char fn)))

行番号を付加する

(define (put-line-number file)
  (let ((counter 0))
    (read-lines file
                (lambda (line)
                  (format #t "~4,'0d : ~a\n" counter line)
                  (inc! counter)))))

1文字毎に , を追加する

(define (put-comma file)
  (read-chars file (lambda (c)
                     (display
                       (cond ((char=? c #\newline) (string c))
                             (else
                               (string c #\,)))))))
プログラミングGauche
プログラミングGauche

posted with amazlet at 10.01.25
Kahuaプロジェクト
オライリージャパン
売り上げランキング: 202591
«
»