summaryrefslogtreecommitdiff
path: root/it_pipe.class
diff options
context:
space:
mode:
authorUrban Müller2017-06-06 15:21:48 +0200
committerUrban Müller2017-06-06 15:21:48 +0200
commit7ef973af86c070965a4d7c1caf3b13844c4c741b (patch)
treeb8ce39c6924ec2b895a639a3a0972b4a4da4726a /it_pipe.class
parent9e266afd380229e578c1b4dc2e32b5506dd99e57 (diff)
downloaditools-7ef973af86c070965a4d7c1caf3b13844c4c741b.tar.gz
itools-7ef973af86c070965a4d7c1caf3b13844c4c741b.tar.bz2
itools-7ef973af86c070965a4d7c1caf3b13844c4c741b.zip
add filter(), cut(), askey()
Diffstat (limited to 'it_pipe.class')
-rw-r--r--it_pipe.class48
1 files changed, 40 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);