func (col *Column) DeleteRecordAt(i int) *Record {
	if i < 0 {
		return nil
	}
	clen := col.Len()
	if i >= clen {
		return nil
	}
	r := col.Records[i]
	last := clen - 1
	copy(col.Records[i:], col.Records[i+1:])
	col.Records[last] = nil
	col.Records = col.Records[0:last]
	return r
}
DeleteRecordAt will delete record at index `i` and return it.
package tabula
import (
	"strconv"
)
type Column struct {
	Name string
	Type int
	Flag int
	ValueSpace []string
	Records Records
}
func NewColumn(colType int, colName string) (col *Column) {
	col = &Column{
		Type: colType,
		Name: colName,
		Flag: 0,
	}
	col.Records = make([]*Record, 0)
	return
}
func NewColumnString(data []string, colType int, colName string) (
	col *Column,
	e error,
) {
	col = NewColumn(colType, colName)
	datalen := len(data)
	if datalen <= 0 {
		return
	}
	col.Records = make([]*Record, datalen)
	for x := 0; x < datalen; x++ {
		col.Records[x] = NewRecordString(data[x])
	}
	return col, nil
}
func NewColumnInt(data []int64, colName string) (col *Column) {
	col = NewColumn(TInteger, colName)
	datalen := len(data)
	if datalen <= 0 {
		return
	}
	col.Records = make([]*Record, datalen)
	for x, v := range data {
		col.Records[x] = NewRecordInt(v)
	}
	return
}
func NewColumnReal(data []float64, colName string) (col *Column) {
	col = NewColumn(TReal, colName)
	datalen := len(data)
	if datalen <= 0 {
		return
	}
	col.Records = make([]*Record, datalen)
	for x := 0; x < datalen; x++ {
		rec := NewRecordReal(data[x])
		col.Records[x] = rec
	}
	return
}
func (col *Column) SetType(tipe int) {
	col.Type = tipe
}
func (col *Column) SetName(name string) {
	col.Name = name
}
func (col *Column) GetType() int {
	return col.Type
}
func (col *Column) GetName() string {
	return col.Name
}
func (col *Column) SetRecords(recs *Records) {
	col.Records = *recs
}
func (col *Column) Interface() interface{} {
	return col
}
func (col *Column) Reset() {
	col.Flag = 0
	col.Records = make([]*Record, 0)
}
func (col *Column) Len() int {
	return len(col.Records)
}
func (col *Column) PushBack(r *Record) {
	col.Records = append(col.Records, r)
}
func (col *Column) PushRecords(rs []*Record) {
	col.Records = append(col.Records, rs...)
}
func (col *Column) ToIntegers() []int64 {
	newcol := make([]int64, col.Len())
	for x := range col.Records {
		newcol[x] = col.Records[x].Integer()
	}
	return newcol
}
func (col *Column) ToFloatSlice() (newcol []float64) {
	newcol = make([]float64, col.Len())
	for i := range col.Records {
		newcol[i] = col.Records[i].Float()
	}
	return
}
func (col *Column) ToStringSlice() (newcol []string) {
	newcol = make([]string, col.Len())
	for i := range col.Records {
		newcol[i] = col.Records[i].String()
	}
	return
}
func (col *Column) ClearValues() {
	for _, r := range col.Records {
		r.Reset()
	}
}
func (col *Column) SetValueAt(idx int, v string) {
	if idx < 0 {
		return
	}
	if col.Records.Len() <= idx {
		return
	}
	_ = col.Records[idx].SetValue(v, col.Type)
}
func (col *Column) SetValueByNumericAt(idx int, v float64) {
	if idx < 0 {
		return
	}
	if col.Records.Len() <= idx {
		return
	}
	switch col.Type {
	case TString:
		col.Records[idx].SetString(strconv.FormatFloat(v, 'f', -1, 64))
	case TInteger:
		col.Records[idx].SetInteger(int64(v))
	case TReal:
		col.Records[idx].SetFloat(v)
	}
}
func (col *Column) SetValues(values []string) {
	vallen := len(values)
	reclen := col.Len()
	if reclen <= 0 {
		col.Records = make([]*Record, vallen)
		reclen = vallen
	}
	minlen := reclen
	if vallen < reclen {
		minlen = vallen
	}
	for x := 0; x < minlen; x++ {
		_ = col.Records[x].SetValue(values[x], col.Type)
	}
}