mirror of
https://github.com/johnkerl/miller.git
synced 2026-01-23 02:14:13 +00:00
Use type-inference in mlr fill-empty (#738)
This commit is contained in:
parent
4162da1dd6
commit
9503d0abe2
12 changed files with 31 additions and 4 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -21,6 +21,8 @@ data/.gitignore
|
|||
docs/_build
|
||||
docs6/_build
|
||||
|
||||
man/man1
|
||||
|
||||
miller-*.src.rpm
|
||||
mlr.exe
|
||||
mlr.linux.x86_64
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
1
go/regtest/cases/verb-fill-empty/0003/cmd
Normal file
1
go/regtest/cases/verb-fill-empty/0003/cmd
Normal file
|
|
@ -0,0 +1 @@
|
|||
mlr --csv fill-empty -v 0 then put -f ${CASEDIR}/mlr regtest/input/fill-down.csv
|
||||
0
go/regtest/cases/verb-fill-empty/0003/experr
Normal file
0
go/regtest/cases/verb-fill-empty/0003/experr
Normal file
4
go/regtest/cases/verb-fill-empty/0003/expout
Normal file
4
go/regtest/cases/verb-fill-empty/0003/expout
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
a,b,c,tb
|
||||
1,0,3,int
|
||||
4,5,6,int
|
||||
7,0,9,int
|
||||
1
go/regtest/cases/verb-fill-empty/0003/mlr
Normal file
1
go/regtest/cases/verb-fill-empty/0003/mlr
Normal file
|
|
@ -0,0 +1 @@
|
|||
$tb = typeof($b)
|
||||
1
go/regtest/cases/verb-fill-empty/0004/cmd
Normal file
1
go/regtest/cases/verb-fill-empty/0004/cmd
Normal file
|
|
@ -0,0 +1 @@
|
|||
mlr --csv fill-empty -Sv 0 then put -f ${CASEDIR}/mlr regtest/input/fill-down.csv
|
||||
0
go/regtest/cases/verb-fill-empty/0004/experr
Normal file
0
go/regtest/cases/verb-fill-empty/0004/experr
Normal file
4
go/regtest/cases/verb-fill-empty/0004/expout
Normal file
4
go/regtest/cases/verb-fill-empty/0004/expout
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
a,b,c,tb
|
||||
1,0,3,string
|
||||
4,5,6,int
|
||||
7,0,9,string
|
||||
1
go/regtest/cases/verb-fill-empty/0004/mlr
Normal file
1
go/regtest/cases/verb-fill-empty/0004/mlr
Normal file
|
|
@ -0,0 +1 @@
|
|||
$tb = typeof($b)
|
||||
1
go/regtest/cases/verb-fill-empty/x
Normal file
1
go/regtest/cases/verb-fill-empty/x
Normal file
|
|
@ -0,0 +1 @@
|
|||
$tb = typeof($b)
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue