summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--it_pipe.class48
-rwxr-xr-xtests/it_pipe.t2
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
@@ -85,6 +85,16 @@ function map($expr)
}
/**
+ * 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
*/
function 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}');