diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-09-21 03:31:45 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-09-21 03:31:45 -0700 |
commit | 77f63c2a9e338207cb1fbe59b410958ce2ecda6d (patch) | |
tree | 85507cb1d398ab7a02183baeebc6fa4b71431692 | |
parent | 9bf70a553426b49ae0a2967207472bcd35b2754c (diff) | |
download | txr-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.
-rw-r--r-- | share/txr/stdlib/awk.tl | 20 |
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}`)) |