diff --git a/.gitignore b/.gitignore index cdc106b58..779b3dbcf 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,8 @@ data/.gitignore docs/_build docs6/_build +man/man1 + miller-*.src.rpm mlr.exe mlr.linux.x86_64 diff --git a/go/regtest/cases/cli-help/0001/expout b/go/regtest/cases/cli-help/0001/expout index b7ded340b..8d1b41b01 100644 --- a/go/regtest/cases/cli-help/0001/expout +++ b/go/regtest/cases/cli-help/0001/expout @@ -160,6 +160,7 @@ Usage: mlr fill-empty [options] Fills empty-string fields with specified fill-value. Options: -v {string} Fill-value: defaults to "N/A" +-S Don't infer type -- so '-v 0' would fill string 0 not int 0. ================================================================ filter diff --git a/go/regtest/cases/verb-fill-empty/0003/cmd b/go/regtest/cases/verb-fill-empty/0003/cmd new file mode 100644 index 000000000..2a5f08415 --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/0003/cmd @@ -0,0 +1 @@ +mlr --csv fill-empty -v 0 then put -f ${CASEDIR}/mlr regtest/input/fill-down.csv diff --git a/go/regtest/cases/verb-fill-empty/0003/experr b/go/regtest/cases/verb-fill-empty/0003/experr new file mode 100644 index 000000000..e69de29bb diff --git a/go/regtest/cases/verb-fill-empty/0003/expout b/go/regtest/cases/verb-fill-empty/0003/expout new file mode 100644 index 000000000..a2fc5b084 --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/0003/expout @@ -0,0 +1,4 @@ +a,b,c,tb +1,0,3,int +4,5,6,int +7,0,9,int diff --git a/go/regtest/cases/verb-fill-empty/0003/mlr b/go/regtest/cases/verb-fill-empty/0003/mlr new file mode 100644 index 000000000..f4bdb8b24 --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/0003/mlr @@ -0,0 +1 @@ +$tb = typeof($b) diff --git a/go/regtest/cases/verb-fill-empty/0004/cmd b/go/regtest/cases/verb-fill-empty/0004/cmd new file mode 100644 index 000000000..a2218924a --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/0004/cmd @@ -0,0 +1 @@ +mlr --csv fill-empty -Sv 0 then put -f ${CASEDIR}/mlr regtest/input/fill-down.csv diff --git a/go/regtest/cases/verb-fill-empty/0004/experr b/go/regtest/cases/verb-fill-empty/0004/experr new file mode 100644 index 000000000..e69de29bb diff --git a/go/regtest/cases/verb-fill-empty/0004/expout b/go/regtest/cases/verb-fill-empty/0004/expout new file mode 100644 index 000000000..41df71a75 --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/0004/expout @@ -0,0 +1,4 @@ +a,b,c,tb +1,0,3,string +4,5,6,int +7,0,9,string diff --git a/go/regtest/cases/verb-fill-empty/0004/mlr b/go/regtest/cases/verb-fill-empty/0004/mlr new file mode 100644 index 000000000..f4bdb8b24 --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/0004/mlr @@ -0,0 +1 @@ +$tb = typeof($b) diff --git a/go/regtest/cases/verb-fill-empty/x b/go/regtest/cases/verb-fill-empty/x new file mode 100644 index 000000000..f4bdb8b24 --- /dev/null +++ b/go/regtest/cases/verb-fill-empty/x @@ -0,0 +1 @@ +$tb = typeof($b) diff --git a/go/src/transformers/fill-empty.go b/go/src/transformers/fill-empty.go index 5e7a03909..680692855 100644 --- a/go/src/transformers/fill-empty.go +++ b/go/src/transformers/fill-empty.go @@ -29,6 +29,7 @@ func transformerFillEmptyUsage( fmt.Fprintf(o, "Fills empty-string fields with specified fill-value.\n") fmt.Fprintf(o, "Options:\n") fmt.Fprintf(o, "-v {string} Fill-value: defaults to \"%s\"\n", defaultFillEmptyString) + fmt.Fprintf(o, "-S Don't infer type -- so '-v 0' would fill string 0 not int 0.\n") if doExit { os.Exit(exitCode) @@ -48,6 +49,7 @@ func transformerFillEmptyParseCLI( argi++ fillString := defaultFillEmptyString + inferType := true for argi < argc /* variable increment: 1 or 2 depending on flag */ { opt := args[argi] @@ -62,12 +64,15 @@ func transformerFillEmptyParseCLI( } else if opt == "-v" { fillString = cli.VerbGetStringArgOrDie(verb, opt, args, &argi, argc) + } else if opt == "-S" { + inferType = false + } else { transformerFillEmptyUsage(os.Stderr, true, 1) } } - transformer, err := NewTransformerFillEmpty(fillString) + transformer, err := NewTransformerFillEmpty(fillString, inferType) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) @@ -82,9 +87,15 @@ type TransformerFillEmpty struct { fillValue *types.Mlrval } -func NewTransformerFillEmpty(fillString string) (*TransformerFillEmpty, error) { - tr := &TransformerFillEmpty{ - fillValue: types.MlrvalFromString(fillString), +func NewTransformerFillEmpty( + fillString string, + inferType bool, +) (*TransformerFillEmpty, error) { + tr := &TransformerFillEmpty{} + if inferType { + tr.fillValue = types.MlrvalFromInferredType(fillString) + } else { + tr.fillValue = types.MlrvalFromString(fillString) } return tr, nil }