英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论