summaryrefslogtreecommitdiffstats
path: root/share/txr
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-09-11 21:07:32 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-09-11 21:07:32 -0700
commit650c49a11e964c20419e448aa23d31dddd7caac1 (patch)
treee1c2b6f89f7f92da715121fdae7a22ca4062b469 /share/txr
parent716e5255221344aaafc2c1d273832390c5ebb970 (diff)
downloadtxr-650c49a11e964c20419e448aa23d31dddd7caac1.tar.gz
txr-650c49a11e964c20419e448aa23d31dddd7caac1.tar.bz2
txr-650c49a11e964c20419e448aa23d31dddd7caac1.zip
awk macro: field splitting more Awk-like.
* share/txr/stdlib/awk.tl (sys:awk-state): Initialize fs to nil rather than the default regex. (sys:awk-state rec-to-f): If fs is nil then operate on a version of rec that is filtered through trim-str. Thus fs being nil is like the Awk special case when fs is a space. * txr.1: Description of fs updated.
Diffstat (limited to 'share/txr')
-rw-r--r--share/txr/stdlib/awk.tl20
1 files changed, 14 insertions, 6 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index e74a0a18..62311fe2 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -25,7 +25,7 @@
(defstruct sys:awk-state ()
(rs "\n")
- (fs #/[ \t\n]+/)
+ (fs)
(ofs " ")
(ors "\n")
(inputs (or *args* (list *stdin*)))
@@ -52,11 +52,19 @@
(defmeth sys:awk-state rec-to-f (self)
(cond
((equal self.rec "")
- (set self.fields nil)
- (set self.nf 0))
- (t
- (set self.fields (split-str self.rec self.fs))
- (set self.nf (length self.fields)))))
+ (set self.fields nil
+ self.nf 0))
+ (self.fs
+ (set self.fields (split-str self.rec self.fs)
+ self.nf (length self.fields)))
+ ((let ((trimmed (trim-str self.rec)))
+ (cond
+ ((equal trimmed "")
+ (set self.fields nil
+ self.nf 0))
+ (t
+ (set self.fields (split-str trimmed #/[ \t\n]+/)
+ self.nf (length self.fields))))))))
(defmeth sys:awk-state f-to-rec (self)
(set self.rec (cat-str self.fields self.ofs)))