summaryrefslogtreecommitdiffstats
path: root/share/txr
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2016-09-21 03:31:45 -0700
committerKaz Kylheku <kaz@kylheku.com>2016-09-21 03:31:45 -0700
commit77f63c2a9e338207cb1fbe59b410958ce2ecda6d (patch)
tree85507cb1d398ab7a02183baeebc6fa4b71431692 /share/txr
parent9bf70a553426b49ae0a2967207472bcd35b2754c (diff)
downloadtxr-77f63c2a9e338207cb1fbe59b410958ce2ecda6d.tar.gz
txr-77f63c2a9e338207cb1fbe59b410958ce2ecda6d.tar.bz2
txr-77f63c2a9e338207cb1fbe59b410958ce2ecda6d.zip
awk macro: streamline field splitting.
* share/txr/awk.tl (sys:awk-state rec-to-f): Check for empty record only in the fs case; it's not necessary when tokenizing with ft. Check (not self.kfs) first, since it's the common case. Handle default case (no fs or ft) using tok-str using the regex #/[^ \t\n]+/, which requires no trim-str and no empty record check.
Diffstat (limited to 'share/txr')
-rw-r--r--share/txr/stdlib/awk.tl20
1 files changed, 7 insertions, 13 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index b1e9f509..7c6ae504 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -53,25 +53,19 @@
(defmeth sys:awk-state rec-to-f (self)
(cond
- ((and (equal self.rec "") (not self.kfs))
- (set self.fields nil
- self.nf 0))
(self.fs
(when self.ft
(throwf 'eval-error "awk: both fs and ft set"))
- (set self.fields (split-str self.rec self.fs self.kfs)
- self.nf (length self.fields)))
+ (if (and (not self.kfs) (equal self.rec ""))
+ (set self.fields nil
+ self.nf 0)
+ (set self.fields (split-str self.rec self.fs self.kfs)
+ self.nf (length self.fields))))
(self.ft
(set self.fields (tok-str self.rec self.ft self.kfs)
self.nf (length self.fields)))
- ((let ((trimmed (trim-str self.rec)))
- (cond
- ((and (equal trimmed "") (not self.kfs))
- (set self.fields nil
- self.nf 0))
- (t
- (set self.fields (split-str trimmed #/[ \t\n]+/ self.kfs)
- self.nf (length self.fields))))))))
+ ((set self.fields (tok-str self.rec #/[^ \t\n]+/ self.kfs)
+ self.nf (length self.fields)))))
(defmeth sys:awk-state f-to-rec (self)
(set self.rec `@{self.fields self.ofs}`))