From 650c49a11e964c20419e448aa23d31dddd7caac1 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Sun, 11 Sep 2016 21:07:32 -0700 Subject: 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. --- share/txr/stdlib/awk.tl | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'share') 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))) -- cgit v1.2.3