Skip to content

Commit 38f8da1

Browse files
committed
fix the bug when selecting with field numbers. #242
1 parent fb9e487 commit 38f8da1

File tree

4 files changed

+21
-12
lines changed

4 files changed

+21
-12
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
- [csvtk v0.27.1](https://github.com/shenwei356/csvtk/releases/tag/v0.27.1)
2+
[![Github Releases (by Release)](https://img.shields.io/github/downloads/shenwei356/csvtk/v0.27.1/total.svg)](https://github.com/shenwei356/csvtk/releases/tag/v0.27.1)
3+
- `csvtk filter2/mutate2`:
4+
- fix the bug when selecting with field numbers. [#242](https://github.com/shenwei356/csvtk/issues/242)
15
- [csvtk v0.27.0](https://github.com/shenwei356/csvtk/releases/tag/v0.27.0)
26
[![Github Releases (by Release)](https://img.shields.io/github/downloads/shenwei356/csvtk/v0.27.0/total.svg)](https://github.com/shenwei356/csvtk/releases/tag/v0.27.0)
37
- `csvtk`:

csvtk/cmd/csv.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ type Record struct {
3737
Row int // the row number, header row skipped
3838
Err error
3939

40-
IsHeaderRow bool
40+
IsHeaderRow bool // is current record the header row
41+
SelectWithColnames bool // wether user use colnames to select fields
4142

4243
All []string
4344
Fields []int // selected fields
@@ -127,6 +128,8 @@ func (csvReader *CSVReader) Read(opt ReadOption) {
127128
fields, colnames, negativeFields, needParseHeaderRow, x2ends := parseFields(fieldStr, fieldStrSep, csvReader.NoHeaderRow)
128129
var fieldsMap map[int]struct{}
129130

131+
selectWithColnames := len(fields) == 0
132+
130133
if len(fields) > 0 && negativeFields {
131134
fieldsMap = make(map[int]struct{}, len(fields))
132135
for _, f := range fields {
@@ -474,7 +477,8 @@ func (csvReader *CSVReader) Read(opt ReadOption) {
474477
Fields: fields, // the first variable
475478
Selected: items, // copied values
476479

477-
IsHeaderRow: isHeaderRow,
480+
IsHeaderRow: isHeaderRow,
481+
SelectWithColnames: selectWithColnames,
478482
}
479483

480484
continue
@@ -499,7 +503,8 @@ func (csvReader *CSVReader) Read(opt ReadOption) {
499503
Fields: fields, // the first variable
500504
Selected: items, // copied values
501505

502-
IsHeaderRow: isHeaderRow,
506+
IsHeaderRow: isHeaderRow,
507+
SelectWithColnames: selectWithColnames,
503508
}
504509
}
505510

csvtk/cmd/filter2.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ Custom functions:
224224
var colnamesMap map[string]*regexp.Regexp
225225
var fieldsUniq []int
226226

227-
var hasHeaderRow bool
227+
var selectWithColnames bool
228228

229229
keys := make([]string, 0, 8)
230230

@@ -237,15 +237,15 @@ Custom functions:
237237
if checkFirstLine {
238238
checkFirstLine = false
239239

240+
selectWithColnames = record.SelectWithColnames
241+
240242
parameters = make(map[string]string, len(record.All))
241243
parameters2 = make(map[string]interface{}, len(record.All))
242244
parameters2["shenweiNULL"] = nil
243245

244246
fieldsUniq = UniqInts(record.Fields)
245247

246248
if !config.NoHeaderRow || record.IsHeaderRow { // do not replace head line
247-
hasHeaderRow = true
248-
249249
colnames2fileds = make(map[string][]int, len(record.All))
250250

251251
colnamesMap = make(map[string]*regexp.Regexp, len(record.All))
@@ -270,7 +270,7 @@ Custom functions:
270270
N++
271271

272272
// prepaire parameters
273-
if !hasHeaderRow {
273+
if !selectWithColnames {
274274
for _, fieldTmp = range fieldsUniq {
275275
value = record.All[fieldTmp-1]
276276
col = strconv.Itoa(fieldTmp)

csvtk/cmd/mutate2.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ Custom functions:
292292
var colnames2fileds map[string][]int // column name -> []field
293293
var colnamesMap map[string]*regexp.Regexp
294294
var fieldsUniq []int
295-
var hasHeaderRow bool
295+
var selectWithColnames bool
296296
var record2 []string // for output
297297
keys := make([]string, 0, 8)
298298

@@ -305,15 +305,15 @@ Custom functions:
305305
if checkFirstLine {
306306
checkFirstLine = false
307307

308+
selectWithColnames = record.SelectWithColnames
309+
308310
parameters = make(map[string]string, len(record.All))
309311
parameters2 = make(map[string]interface{}, len(record.All))
310312
parameters2["shenweiNULL"] = nil
311313

312314
fieldsUniq = UniqInts(record.Fields)
313315

314316
if !config.NoHeaderRow || record.IsHeaderRow { // do not replace head line
315-
hasHeaderRow = true
316-
317317
colnames2fileds = make(map[string][]int, len(record.All))
318318

319319
colnamesMap = make(map[string]*regexp.Regexp, len(record.All))
@@ -332,8 +332,8 @@ Custom functions:
332332
}
333333
}
334334

335-
// prepaire parameters
336-
if !hasHeaderRow {
335+
// prepare parameters
336+
if !selectWithColnames {
337337
for _, fieldTmp = range fieldsUniq {
338338
value = record.All[fieldTmp-1]
339339
col = strconv.Itoa(fieldTmp)

0 commit comments

Comments
 (0)