CSV data manipulation: Difference between revisions

(→‎{{header|REXX}}: write to the same file (which I don't normally do))
Line 10:
:4,8,12,16,20
 
 
=={{header|Racket}}==
<lang racket>
#lang racket
(require (planet neil/csv:1:=7) net/url)
 
(define make-rosetta-csv-reader
(make-csv-reader-maker
'((separator-chars #\,)
(strip-leading-whitespace? . #t)
(strip-trailing-whitespace? . #t))))
 
(define (all-rows port make-reader)
(define read-row (make-rosetta-csv-reader port))
(define head (append (read-row) '("SUM")))
(define rows (for/list ([row (in-producer read-row '())])
(define xs (map string->number row))
(append row (list (~a (apply + xs))))))
(define (->string row) (string-join row "," #:after-last "\n"))
(string-append* (map ->string (cons head rows))))
</lang>
Example:
<lang racket>
(define csv-file
"C1, C2, C3, C4, C5
1, 5, 9, 13, 17
2, 6, 10, 14, 18
3, 7, 11, 15, 19
4, 8, 12, 16, 20")
 
(display (all-rows (open-input-string csv-file) make-rosetta-csv-reader))
</lang>
Output:
<lang racket>
C1,C2,C3,C4,C5,SUM
1,5,9,13,17,45
2,6,10,14,18,50
3,7,11,15,19,55
4,8,12,16,20,60
</lang>
 
=={{header|REXX}}==
Anonymous user