1

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!

vvofdcx
  • 509
  • 1
  • 6
  • 20
  • 3
    An example of the file's content would be useful. – Ainar-G May 18 '15 at 19:28
  • You can read a line with bufio.ReadString and then break that into indexable columns with strings.Fields or strings.Split. Or you can use the regexp package for unlimited power. – LemurFromTheId May 18 '15 at 19:40
  • Adding on to @Aedolon , http://stackoverflow.com/questions/13737745/split-a-string-on-whitespace-in-go# – Shrey Jul 29 '16 at 11:23

1 Answers1

5

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.

Ainar-G
  • 34,563
  • 13
  • 93
  • 119