From 86f76b9b80234b690a9559f2b044ad29f5bb3aec Mon Sep 17 00:00:00 2001 From: John Kerl Date: Sat, 9 May 2015 14:40:31 -0700 Subject: [PATCH] document mlr check --- c/containers/lrec_parsers.c | 13 ++++++++++++- c/mapping/mapper_check.c | 2 +- c/todo.txt | 3 --- doc/content-for-record-heterogeneity.html | 2 +- doc/content-for-reference.html | 5 +++++ doc/record-heterogeneity.html | 15 ++++++++------- doc/reference.html | 17 ++++++++++++++++- 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/c/containers/lrec_parsers.c b/c/containers/lrec_parsers.c index 3f390fdd5..6d67dcfa6 100644 --- a/c/containers/lrec_parsers.c +++ b/c/containers/lrec_parsers.c @@ -174,13 +174,16 @@ lrec_t* lrec_parse_csv(hdr_keeper_t* phdr_keeper, char* data_line, char ifs, int char* value = data_line; // xxx needs hdr/data length check!!!!!! - // xxx needs pe-non-null (hdr-empty) check: sllse_t* pe = phdr_keeper->pkeys->phead; for (char* p = data_line; *p; ) { if (*p == ifs) { *p = 0; + if (pe == NULL) { // xxx to do: get file-name/line-number context in here + fprintf(stderr, "Header-data length mismatch!\n"); + exit(1); + } key = pe->value; lrec_put_no_free(prec, key, value); @@ -195,8 +198,16 @@ lrec_t* lrec_parse_csv(hdr_keeper_t* phdr_keeper, char* data_line, char ifs, int p++; } } + if (pe == NULL) { + fprintf(stderr, "Header-data length mismatch!\n"); + exit(1); + } key = pe->value; lrec_put_no_free(prec, key, value); + if (pe->pnext != NULL) { + fprintf(stderr, "Header-data length mismatch!\n"); + exit(1); + } return prec; } diff --git a/c/mapping/mapper_check.c b/c/mapping/mapper_check.c index 82db55aec..06eff30db 100644 --- a/c/mapping/mapper_check.c +++ b/c/mapping/mapper_check.c @@ -23,7 +23,7 @@ mapper_t* mapper_check_alloc() { void mapper_check_usage(char* argv0, char* verb) { fprintf(stdout, "Usage: %s %s\n", argv0, verb); fprintf(stdout, "Consumes records without printing any output.\n"); - fprintf(stdout, "Useful for doing a well-formatted check on input data.\n"); + fprintf(stdout, "Useful for doing a well-formatted check on CSV input data.\n"); } mapper_t* mapper_check_parse_cli(int* pargi, int argc, char** argv) { diff --git a/c/todo.txt b/c/todo.txt index 584aed5a0..d5ce14894 100644 --- a/c/todo.txt +++ b/c/todo.txt @@ -2,9 +2,6 @@ ! BUGFIXES ! * --ofmt ignored in put. perhaps best to reglobalize. -* csv hdr/data length check!! -* echo a|mlr --dkvp --oxtab cat puts 'a a' - ================================================================ FEATURES diff --git a/doc/content-for-record-heterogeneity.html b/doc/content-for-record-heterogeneity.html index 990d06f71..2a89e2585 100644 --- a/doc/content-for-record-heterogeneity.html +++ b/doc/content-for-record-heterogeneity.html @@ -22,7 +22,7 @@ POKI_RUN_COMMAND{{mlr --opprint cat data/het.dkvp}}HERE POKI_PUT_LINK_FOR_PAGE(reference.html)HERE):
-POKI_RUN_COMMAND{{mlr --csv group-like data/het.dkvp}}HERE +POKI_RUN_COMMAND{{mlr --ocsv group-like data/het.dkvp}}HERE POKI_RUN_COMMAND{{mlr --opprint group-like data/het.dkvp}}HERE
diff --git a/doc/content-for-reference.html b/doc/content-for-reference.html index b28b5c68e..45dc9585a 100644 --- a/doc/content-for-reference.html +++ b/doc/content-for-reference.html @@ -214,6 +214,11 @@ POKI_RUN_COMMAND{{mlr --csv cat a.csv b.csv}}HERE POKI_RUN_COMMAND{{mlr --icsv --oxtab cat a.csv b.csv}}HERE + +

check

+ +POKI_RUN_COMMAND{{mlr check --help}}HERE +

count-distinct

diff --git a/doc/record-heterogeneity.html b/doc/record-heterogeneity.html index 20084c10e..a47e798ea 100644 --- a/doc/record-heterogeneity.html +++ b/doc/record-heterogeneity.html @@ -173,14 +173,15 @@ resource loadsec ok

-$ mlr --csv group-like data/het.dkvp
-resource=/path/to/file,loadsec=0.45
-record_count=100,resource=/path/to/file
-record_count=150,resource=/path/to/second/file
+$ mlr --ocsv group-like data/het.dkvp
+resource,loadsec,ok
+/path/to/file,0.45,true
+/path/to/second/file,0.32,true
+/some/other/path,0.97,false
 
-resource=/path/to/file,loadsec=0.45,ok=true
-resource=/path/to/second/file,loadsec=0.32,ok=true
-resource=/some/other/path,loadsec=0.97,ok=false
+record_count,resource
+100,/path/to/file
+150,/path/to/second/file
 

diff --git a/doc/reference.html b/doc/reference.html index 5f4aa9c08..2857c8178 100644 --- a/doc/reference.html +++ b/doc/reference.html @@ -99,6 +99,7 @@ Miller commands were run with pretty-print-tabular output format.     • Number formatting
• Data transformations
    • cat
+    • check
    • count-distinct
    • cut
    • filter
@@ -468,6 +469,20 @@ c 9

+ +

check

+ +

+

+
+$ mlr check --help
+Usage: mlr check
+Consumes records without printing any output.
+Useful for doing a well-formatted check on CSV input data.
+
+
+

+

count-distinct

@@ -605,7 +620,7 @@ i j k
 $ mlr filter 'FNR == 2' data/small*
 a=eks,b=pan,i=2,x=0.7586799647899636,y=0.5221511083334797
-pan=pan,1=1,0.3467901443380824=0.3467901443380824,0.7268028627434533=0.7268028627434533
+1=pan,2=pan,3=1,4=0.3467901443380824,5=0.7268028627434533
 a=wye,b=eks,i=10000,x=0.734806020620654365,y=0.884788571337605134