Golang:如何仅读取制表符分隔文件中的特定列?

在Golang中,我们有一种方法只能读取某些列,例如matlab中的textscan,例如:</ p> \ n

  txt = textscan(op,'%s%* s%s%* s'); 
</ code> </ pre>

谢谢!</ </ p>
</ div>

展开原文

原文

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!

dtrphb5597
dtrphb5597 添加到@Aedolon,stackoverflow.com/questions/13737745/…
大约 4 年之前 回复
douyou1857
douyou1857 您可以使用bufio.ReadString读取一行,然后将其分成带有string.Fields或strings.Split的可索引列。或者,您可以使用regexp软件包获得无限的动力。
大约 5 年之前 回复
duanchi5078
duanchi5078 文件内容的示例将很有用。
大约 5 年之前 回复

1个回答



如果您的文件基本上是TSV文件(即,带有制表符而不是逗号的CSV文件),则可以非常简单 stdlib的 csv.Reader </ code> :</ p>的包装器

 类型FieldsReader结构{

  • csv.Reader 字段[] int }

func(r * FieldsReader)Read()(记录[] string,err错误) {
rec,err:= r.Reader.Read()
if err!= nil {
return nil,err
}

record = make([] string,len(r.fields) )
代表i,f:=范围r.fields {
record [i] = rec [f]
}

返回记录,nil
}
</ code> </ pre> \ n

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

展开原文

原文

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.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐