Example #1
0
//
// WriteRawColumns write raw columns using separator `sep` for each record to
// file.
//
// We use pointer in separator parameter, so we can use empty string as
// separator.
//
func (writer *Writer) WriteRawColumns(cols *tabula.Columns, sep *string) (
	nrow int,
	e error,
) {
	ncol := len(*cols)
	if ncol <= 0 {
		return
	}

	if sep == nil {
		sep = new(string)
		*sep = DefSeparator
	}

	// Find minimum and maximum column length.
	minlen, maxlen := cols.GetMinMaxLength()

	esc := []byte(DefEscape)
	sepbytes := []byte(*sep)
	x := 0

	// First, write until minimum column length.
	for ; x < minlen; x++ {
		v := cols.Join(x, sepbytes, esc)
		v = append(v, DefEOL)

		_, e = writer.BufWriter.Write(v)

		if nil != e {
			return x, e
		}
	}

	// and then write column until max length.
	for ; x < maxlen; x++ {
		v := cols.Join(x, sepbytes, esc)
		v = append(v, DefEOL)

		_, e = writer.BufWriter.Write(v)

		if nil != e {
			break
		}
	}

	_ = writer.Flush()
	return x, e
}