Robbie,

Fixed a typo: https://play.golang.org/p/JbKGJMw4r3

Peter

On Friday, February 24, 2017 at 12:48:44 PM UTC-5, peterGo wrote:
>
> Robbie,
>
> It's hard to understand what you are doing.
>
> The header says that there is no grade and sg is not where you say it is. 
> Why are you using a channel? Why are you limiting the size of your input by 
> reading the entire file into memory? And so on.
>
> My best guess is that you want to do something like this:
>
> Go Playground: https://play.golang.org/p/4Aok43E6AC
>
> Peter
>
> On Friday, February 24, 2017 at 8:58:52 AM UTC-5, Robbie Wright wrote:
>>
>> Hi this is my first go program and I am looking for some feedback and 
>> help writing buffer to csv. To give you an idea of the structure of the 
>> data I have run head on the input file gives output seen at the bottom.
>>
>> package main
>>
>> import (
>>        "bytes"
>>        "encoding/csv"
>>        "fmt"
>>        "io"
>>        "log"
>>        "strconv"
>>        "strings"
>>        "bufio"
>>        "io/ioutil"
>> )
>>
>> // Calculate economic block value given a 40x20x12 block of density sg and 
>> grade
>> func calculateE(sg float64, grade float64) float64 {
>>        return 40 * 20 * 12 * sg * grade * 80 / 10 * 0.66
>> }
>>
>> // Credit: Stack Overflow
>> func processCSV(rc io.Reader) (ch chan []string) {
>>        ch = make(chan []string, 10)
>>        go func() {
>>               r := csv.NewReader(rc)
>>               if _, err := r.Read(); err != nil { //read header
>>                      log.Fatal(err)
>>               }
>>               defer close(ch)
>>               for {
>>                      rec, err := r.Read()
>>
>>                      if err != nil {
>>                             if err == io.EOF {
>>                                    break
>>                             }
>>                             log.Fatal(err)
>>
>>                      }
>>                      ch <- rec
>>               }
>>        }()
>>        return
>> }
>>
>> // Credit: Stack Overflow
>> func Readln(r *bufio.Reader) (string, error) {
>>        var (
>>               isPrefix bool  = true
>>               err      error = nil
>>               line, ln []byte
>>        )
>>        for isPrefix && err == nil {
>>               line, isPrefix, err = r.ReadLine()
>>               ln = append(ln, line...)
>>        }
>>        return string(ln), err
>> }
>>
>> func main() {
>>        var buf bytes.Buffer
>>
>>        w := csv.NewWriter(&buf)
>>        file := "C:/ORIG.csv"
>>        dat, _ := ioutil.ReadFile(file)
>>        f := string(dat)
>>
>>        for rec := range processCSV(strings.NewReader(f)) {
>>               sg, err := strconv.ParseFloat(rec[17], 64)
>>               grade, err := strconv.ParseFloat(rec[13], 64)
>>
>>               if grade < 0 {
>>                      grade = 0
>>               } else {
>>                      grade = 0.1*grade
>>               }
>>               if sg < 0 {
>>                      sg = 0
>>               }
>>               fmt.Println(grade)
>>               // get economic block value
>>               e := calculateE(sg, grade)
>>               gradeStr := strconv.FormatFloat(grade, 'f', 8, 64)
>>               sgStr := strconv.FormatFloat(sg, 'f', 8, 64)
>>               eStr := strconv.FormatFloat(e, 'f', 8, 64)
>>               rec := append(rec[0:4], eStr, sgStr, gradeStr)
>>               if err = w.Write(rec); err != nil {
>>                      log.Fatal(err)
>>               }
>>        }
>>        w.Flush()
>>        if err := w.Error(); err != nil {
>>               log.Fatal(err)
>>        }
>>        //fmt.Println(buf.String())
>>        //f2, err := os.Create("C:/Users/root/result.csv")
>>        //defer f2.Close()
>>        //writer := csv.NewWriter(f2)
>>        //writer.Write(buf.String())
>> }
>>
>> // 500mb csv with head of the data looks like:
>> const data = 
>> `xcentre,ycentre,zcentre,xlength,ylength,zlength,fe_percent,fe_recovery,oxide,rescat,sg,mat_type_8,fillpc,mass_recovery,mass_recovery_percent,air,al2o3,cao,k2o,loi,mgo,mno,phos,sio2,tio2
>> 556960.000,6319980.000,-1100.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,91,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 557000.000,6319980.000,-1100.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,91,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 556960.000,6320000.000,-1100.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,91,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 557000.000,6320000.000,-1100.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,91,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 556960.000,6319980.000,-1088.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,100,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 557000.000,6319980.000,-1088.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,100,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 556960.000,6320000.000,-1088.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,100,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 557000.000,6320000.000,-1088.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,100,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> 557040.000,6319980.000,-1100.000,40.000,20.000,12.000,-99.00000000,66.00000000,-99,4,2.84999990,2,91,0.00000000,0.00000000,0,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000,0.00000000
>> `
>>
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to