Golang:如何从一个制表符分隔的文件中只读取指定的列?

huangapple go评论73阅读模式
英文:

Golang: how to read only specified columns from a tab delimited file?

问题

在Golang中,我们有没有一种像Matlab中的textscan那样只读取特定列的方法,例如:

txt = textscan(op,'%s%*s%s%*s');

谢谢!

英文:

In Golang do we have a way to read only certain columns like textscan in matlab, e.g.:

txt = textscan(op,'%s%*s%s%*s');

Thanks!

答案1

得分: 5

如果您的文件基本上是一个TSV文件(即,一个使用制表符而不是逗号的CSV文件),您可以在stdlib的csv.Reader周围创建一个非常简单的包装器:

type FieldsReader struct {
    *csv.Reader
    fields []int
}

func (r *FieldsReader) Read() (record []string, err error) {
    rec, err := r.Reader.Read()
    if err != nil {
        return nil, err
    }

    record = make([]string, len(r.fields))
    for i, f := range r.fields {
        record[i] = rec[f]
    }

    return record, nil
}

完整的代码和用法示例:http://play.golang.org/p/YcwOmsMX2B。

英文:

If your file is basically a TSV file (that is, a CSV file with tabs instead of commas), you can make a very simple wrapper around stdlib's csv.Reader:

type FieldsReader struct {
	*csv.Reader
	fields []int
}

func (r *FieldsReader) Read() (record []string, err error) {
	rec, err := r.Reader.Read()
	if err != nil {
		return nil, err
	}

	record = make([]string, len(r.fields))
	for i, f := range r.fields {
		record[i] = rec[f]
	}

	return record, nil
}

Full code and usage example: http://play.golang.org/p/YcwOmsMX2B.

huangapple
  • 本文由 发表于 2015年5月19日 02:55:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/30310868.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定