summaryrefslogtreecommitdiffstats
path: root/stdlib
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2025-01-30 19:27:46 -0800
committerKaz Kylheku <kaz@kylheku.com>2025-01-30 19:27:46 -0800
commit7037ccbafe1b1a5540a50440e203d4298b8b2777 (patch)
treec538b88d49c53ec18a18a3a5d13524f0a98ef51a /stdlib
parent89589c71c1eaa51a9f2d1c75b12ae47668ffc662 (diff)
downloadtxr-7037ccbafe1b1a5540a50440e203d4298b8b2777.tar.gz
txr-7037ccbafe1b1a5540a50440e203d4298b8b2777.tar.bz2
txr-7037ccbafe1b1a5540a50440e203d4298b8b2777.zip
awk: add CSV support.
* stdlib/awk (awk-state upd-rec-to-f): Handle a new case of fs being the keyword symbol :csv, producing a field-splitting lambda that calls get-csv. * tests/015/awk-basic.tl: Several new test cases for this CSV feature. * txr.1: Documented.
Diffstat (limited to 'stdlib')
-rw-r--r--stdlib/awk.tl8
1 files changed, 8 insertions, 0 deletions
diff --git a/stdlib/awk.tl b/stdlib/awk.tl
index 50121736..35bd436e 100644
--- a/stdlib/awk.tl
+++ b/stdlib/awk.tl
@@ -95,6 +95,14 @@
(if (< end l)
(add [self.rec end..:])))
self.nf i))))
+ ((eq self.fs :csv)
+ (when self.ft
+ (awk-error "both fs and ft set"))
+ (when self.kfs
+ (awk-error "fs set to :csv and ft set"))
+ (lambda (self)
+ (set self.fields (get-csv self.rec)
+ self.nf (length self.fields))))
(self.fs
(when self.ft
(awk-error "both fs and ft set"))