| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 | (library (fileio)  (export get-string-from-file          get-lines-from-file          get-lines-from-port          get-lines-from-file-using-splitting          put-lines-to-file          put-string-to-file)  (import   (except (rnrs base)           let-values           map)   (only (guile)         lambda* λ         ;; ports and files         call-with-input-file         call-with-output-file         set-port-encoding!         eof-object?         ;; string         string-split         string-join)   (ice-9 textual-ports)  ; for textual reading and writing procedures   (ice-9 binary-ports)  ; not sure if needed   (ice-9 rdelim)  ; for `eof-object?`   (ice-9 optargs)  ; for keyword arguments   ;; not sure if needed   (srfi srfi-1))  (define get-string-from-file    (lambda* (file-path              #:key              (encoding "UTF-8"))      (call-with-input-file file-path        (λ (port)          (set-port-encoding! port encoding)          (get-string-all port)))))  (define get-lines-from-file    (lambda* (file-path              #:key              (encoding "UTF-8"))      ;; another common encoding is: "ISO-8859-1"      ;; see http://www.iana.org/assignments/character-sets for more      (define (get-lines-from-port port)        (let ([line (get-line port)])          (cond [(eof-object? line) '()]                [else                 (cons line                       (get-lines-from-port port))])))      (call-with-input-file file-path        (λ (port)          (set-port-encoding! port encoding)          (get-lines-from-port port)))))  (define get-lines-from-file-using-splitting    (lambda* (file-path              #:key              (encoding "UTF-8"))      (string-split (get-string-from-file file-path #:encoding encoding)                    ;; You could use simple character here, but I am using                    ;; lambda to show that it can be used as well.                    (λ (char) (char=? char #\newline)))))  (define put-lines-to-file    (lambda* (file-path              lines              #:key              (encoding "UTF-8")              (mode 'replace))      (call-with-output-file file-path        (λ (port)          (set-port-encoding! port encoding)          (put-string port                      (cond                       [(eq? mode 'append)                        (string-append (get-string-from-file                                        file-path                                        #:encoding encoding)                                       "\n"                                       (string-join lines "\n"))]                       [(equal? mode 'replace) (string-join lines "\n")]                       [else (string-join lines "\n")]))))))  (define put-string-to-file    (lambda* (file-path              string              #:key              (encoding "UTF-8")              (mode 'replace))      (call-with-output-file file-path        (λ (port)          (set-port-encoding! port encoding)          (put-string port                      (cond                       [(eq? mode 'append)                        (string-append (get-string-from-file                                        file-path                                        #:encoding encoding)                                       "\n"                                       string)]                       [(equal? mode 'replace) string]                       [else string])))))))
 |