From 7ef973af86c070965a4d7c1caf3b13844c4c741b Mon Sep 17 00:00:00 2001 From: Urban Müller Date: Tue, 6 Jun 2017 15:21:48 +0200 Subject: add filter(), cut(), askey() --- it_pipe.class | 48 ++++++++++++++++++++++++++++++++++++++++-------- tests/it_pipe.t | 2 ++ 2 files changed, 42 insertions(+), 8 deletions(-) diff --git a/it_pipe.class b/it_pipe.class index 281ee5f..5ab7e8a 100644 --- a/it_pipe.class +++ b/it_pipe.class @@ -84,6 +84,16 @@ function map($expr) return $this; } +/** + * Apply an expression to every line + */ +function filter($expr) +{ + $this->lines = it::filter($expr, $this->lines); + + return $this; +} + /** * Convert pipe from utf8 to iso-latin */ @@ -101,17 +111,14 @@ function utf8() } /** - * Return contents of pipe as key->val pair (key must be tab separated) + * Select cols from tab-separated cols in each line and tab-joins them again. Key order relevant. */ -function keyval() +function cut($picks) { - foreach ($this->lines as $line) - { - list($key, $val) = explode("\t", $line, 2); - $result[$key] = $val; - } + foreach ($this->lines as $idx => $line) + $this->lines[$idx] = join("\t", it::filter_keys(explode("\t", $line), $picks, ['reorder' => true])); - return (array)$result; + return $this; } /** @@ -128,6 +135,31 @@ function swap() return $this; } +/** + * Return contents of pipe as key->val pair (key must be tab separated). + */ +function keyval() +{ + foreach ($this->lines as $line) + { + list($key, $val) = explode("\t", $line, 2); + $result[$key] = $val; + } + + return (array)$result; +} + +/** + * Return contents of pipe as array keys with value true + */ +function askey() +{ + foreach ($this->lines as $line) + $result[$line] = true; + + return (array)$result; +} + function ED() { ED($this->lines); diff --git a/tests/it_pipe.t b/tests/it_pipe.t index e8fa4e8..93957b5 100755 --- a/tests/it_pipe.t +++ b/tests/it_pipe.t @@ -9,3 +9,5 @@ is(json_encode((new it_pipe(['data' => ["\t", "1\t2"]]))->csv()), '[{"fie is(json_encode((new it_pipe(['data' => ["a\tb", "1\t2"]]))->csv("c,d")), '[{"c":"1","d":"2"}]'); is(json_encode((new it_pipe(['data' => ["a\tb", "1\t2"]]))->csv(['forceschema' => "c,d"])), '[{"c":"1","d":"2"}]'); is(json_encode((new it_pipe(['data' => ["a b\tb", "1\t2"]]))->csv(['fixcolnames' => true])), '[{"a_b":"1","b":"2"}]'); + +is(json_encode((new it_pipe(['data' => "a\nb\n"]))->askey()), '{"a":true,"b":true}'); -- cgit v1.2.3