CSV fields are counted from 1

master
2017-02-14 18:17:46 +01:00
parent c32c2bcca4
commit a41faae3f0
4 changed files with 126 additions and 48 deletions

3
.gitignore vendored
View File

@ -1 +1,2 @@
*~
*~
/nbproject/private/

72
csv/discovery Normal file
View File

@ -0,0 +1,72 @@
#!/usr/bin/php
<?php
require_once(__DIR__."/functions.inc.php");
if ($argc<6) {
fprintf(STDERR,"Missing arguments!\n");
fprintf(STDERR,"send file.csv delim mode hostfield [item1=field1] [item2=field2] ...\n");
fprintf(STDERR,"mode is stdout or send,\n");
fprintf(STDERR,"hostfield is host for item to send,\n");
fprintf(STDERR,"itemx is key for item to send,\n");
fprintf(STDERR,"fieldx is data to send send,\n");
fprintf(STDERR,"In hostfield, itemx and fieldx are replaced this macros:\n");
fprintf(STDERR,"{COLUMN:x} is replaced by value of column x\n");
fprintf(STDERR,"{column:x} is replaced by lowercased value of column x\n");
fprintf(STDERR,"x can be column index (x starts with zero) or header name.\n");
fprintf(STDERR,"CSV must include header line.\n\n");
exit(1);
}
$csv=$argv[1];
if ($csv=="-") {
$csv="php://stdin";
}
$delim=$argv[2];
$mode=$argv[3];
$host=$argv[4];
$items=Array();
for ($i=5;$i<$argc;$i++) {
List($key,$field)=preg_split("/=/",$argv[$i]);
$items[]=Array(
"key" => $key,
"field" => $field
);
}
$c=fopen($csv,"r");
$header=fgetcsv($c,false,$delim);
$data="";
while ($row=fgetcsv($c,false,$delim)) {
if (count($row)==1 && trim($row[0])=="") continue;
$p=get_replacements($header,$row);
$hostr=preg_replace($p["patterns"],$p["replacements"],$host);
foreach ($items as $item) {
$data.=sprintf("%s %s %s\n",
$hostr,
preg_replace($p["patterns"],$p["replacements"],$item["key"]),
addcslashes(preg_replace($p["patterns"],$p["replacements"],$item["field"]),"\0..\40\"")
);
}
}
fclose($c);
if ($mode=="send") {
$h = popen(getenv("ZAF_BIN")." send", "w");
fputs($h,$data);
fclose($h);
exit;
}
if ($mode=="stdout") {
echo $data;
exit;
}
fprintf(STDERR,"Bad mode $mode\n!");
exit(1);

View File

@ -1,28 +1,28 @@
#!/usr/bin/php
<?php
require_once(__DIR__ . "/functions.inc.php");
require_once(__DIR__."/functions.inc.php");
$csv = getenv("csv");
$range = parse_colnum(getenv("columns"));
$rangef = array_flip($range);
$delim = getenv("delimiter");
$csv=getenv("csv");
$range=parse_colnum(getenv("columns"));
$rangef=array_flip($range);
$delim=getenv("delimiter");
$c=fopen($csv,"r");
$header=fgetcsv($c,false,$delim);
$c = fopen($csv, "r");
$header = fgetcsv($c, false, $delim);
fclose($c);
json_init();
$last1=end($header);
$last2=end($range);
$last1 = end($header);
$last2 = end($range);
foreach ($header as $num=>$column) {
if (!array_key_exists($num,$range)) continue;
json_row();
json_column("COLUMN",$num);
json_column("NAME",addslashes($column),true);
json_row_end($last1==$column||$last2==($num+1));
foreach ($header as $num => $column) {
if (!array_key_exists($num, $range))
continue;
json_row();
json_column("COLUMN", $num+1);
json_column("NAME", addslashes($column), true);
json_row_end($last1 == $column || $last2 == ($num + 1));
}
json_end();

View File

@ -1,45 +1,50 @@
#!/usr/bin/php
<?php
require_once(__DIR__ . "/functions.inc.php");
require_once(__DIR__."/functions.inc.php");
$csv = getenv("csv");
$range = parse_colnum(getenv("columns"));
$rows = parse_colnum(getenv("rows"));
$rowsf = array_flip($rows);
$rangef = array_flip($range);
$head = getenv("header");
$delim = getenv("delimiter");
$csv=getenv("csv");
$range=parse_colnum(getenv("columns"));
$rows=parse_colnum(getenv("rows"));
$rowsf=array_flip($rows);
$rangef=array_flip($range);
$head=getenv("header");
$delim=getenv("delimiter");
$c=fopen($csv,"r");
$c = fopen($csv, "r");
$header = Array();
$i = 1;
if ($head) {
$header=fgetcsv($c,false,$delim);
$h = fgetcsv($c, false, $delim);
foreach ($h as $val) {
$header[$i] = $val;
$i++;
}
} else {
$header=Array();
$i=0;
foreach ($range as $r) {
$header[$i]=sprintf("FIELD%d",$i);
$i++;
}
foreach ($range as $r) {
$header[$i] = sprintf("FIELD%d", $i + 1);
$i++;
}
}
json_init();
$line=0;
$last=end($range);
$lastrow=max($rows);
$line = 0;
$last = end($range);
$lastrow = max($rows);
$numrows = intval(exec("wc -l '$csv'"));
while ($row=fgetcsv($c,false,$delim)) {
$line++;
if (!array_key_exists($line,$rowsf)) continue;
json_row();
json_column("ROW","$line");
foreach ($range as $num) {
$col=$num-1;
json_column("COLUMN$col",$header[$col]);
json_column("VALUE$col",addslashes($row[$col]),$last==$num);
}
json_row_end(feof($c)||$line==$lastrow);
while ($row = fgetcsv($c, false, $delim)) {
$line++;
if (!array_key_exists($line, $rowsf))
continue;
json_row();
json_column("ROW", "$line");
foreach ($range as $col) {
json_column("COLUMN$col", $header[$col]);
json_column("VALUE$col", addslashes($row[$col - 1]), $last == $col);
}
echo feof($c);
json_row_end(feof($c) || $line == $lastrow || $line == $numrows-1);
}
json_end();