github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/types/csv/map.go (about)

     1  package csv
     2  
     3  import (
     4  	"encoding/csv"
     5  	"io"
     6  	"strconv"
     7  
     8  	"github.com/lmorg/murex/config"
     9  	"github.com/lmorg/murex/lang/stdio"
    10  	"github.com/lmorg/murex/lang/types"
    11  )
    12  
    13  func readMap(read stdio.Io, config *config.Config, callback func(*stdio.Map)) error {
    14  	reader := csv.NewReader(read)
    15  
    16  	v, err := config.Get("csv", "separator", types.String)
    17  	if err != nil {
    18  		return err
    19  	}
    20  	if len(v.(string)) > 0 {
    21  		reader.Comma = rune(v.(string)[0])
    22  	}
    23  
    24  	v, err = config.Get("csv", "comment", types.String)
    25  	if err != nil {
    26  		return err
    27  	}
    28  	if len(v.(string)) > 0 {
    29  		reader.Comment = rune(v.(string)[0])
    30  	}
    31  
    32  	for {
    33  		recs, err := reader.Read()
    34  		if err == io.EOF {
    35  			return nil
    36  		}
    37  		if err != nil {
    38  			return err
    39  		}
    40  
    41  		for i := range recs {
    42  			callback(&stdio.Map{
    43  				Key:      strconv.Itoa(i),
    44  				Value:    recs[i],
    45  				DataType: types.String,
    46  				Last:     i == len(recs)-1,
    47  			})
    48  		}
    49  	}
    50  }