@@ -2,7 +2,6 @@ package clusters
22
33import (
44 "bufio"
5- "bytes"
65 "encoding/csv"
76 "io"
87 "os"
@@ -16,30 +15,26 @@ func NewImporter() *Importer {
1615 return & Importer {}
1716}
1817
19- func (i * Importer ) Import (file string ) ([][]float64 , error ) {
20- f , err := os .Open (file )
21- if err != nil {
22- return [][]float64 {}, err
18+ func (i * Importer ) Import (file string , start , end , size int ) ([][]float64 , error ) {
19+ if start < 0 || end < 0 || start > end {
20+ return [][]float64 {}, ErrInvalidRange
2321 }
2422
25- defer f .Close ()
26-
27- b := bufio .NewReader (f )
28-
29- c , err := i .lineCount (bufio .NewReader (b ))
23+ f , err := os .Open (file )
3024 if err != nil {
3125 return [][]float64 {}, err
3226 }
3327
34- f .Seek (0 , 0 )
35- b .Reset (f )
28+ defer f .Close ()
3629
3730 var (
38- d = make ([][]float64 , c )
39- r = csv .NewReader (b )
40- k = 0
31+ d = make ([][]float64 , 0 , size )
32+ r = csv .NewReader (bufio .NewReader (f ))
33+ s = end - start + 1
34+ g []float64
4135 )
4236
37+ Main:
4338 for {
4439 record , err := r .Read ()
4540
@@ -49,39 +44,19 @@ func (i *Importer) Import(file string) ([][]float64, error) {
4944 return [][]float64 {}, err
5045 }
5146
52- d [ k ] = make ([]float64 , 0 , len ( record ) )
47+ g = make ([]float64 , 0 , s )
5348
54- for j , _ := range record {
49+ for j := start ; j <= end ; j ++ {
5550 f , err := strconv .ParseFloat (record [j ], 64 )
5651 if err == nil {
57- d [ k ] = append (d [ k ] , f )
52+ g = append (g , f )
5853 } else {
59- return [][] float64 {}, err
54+ continue Main
6055 }
6156 }
6257
63- k ++
58+ d = append ( d , g )
6459 }
6560
6661 return d , nil
6762}
68-
69- func (* Importer ) lineCount (r * bufio.Reader ) (int , error ) {
70- var (
71- buf = make ([]byte , 32 * 1024 )
72- count = 0
73- lineSep = []byte {'\n' }
74- )
75-
76- for {
77- c , err := r .Read (buf )
78- count += bytes .Count (buf [:c ], lineSep )
79-
80- switch err {
81- case io .EOF :
82- return count , nil
83- default :
84- return count , err
85- }
86- }
87- }
0 commit comments