2015-01-06 2 views
-2

: 다음io.Reader 분할 - ReadWriter 사용? 다음 예 가정

func Execute(r io.Reader) { 
    // do soemthing 
} 

func BatchFromCSV(cr csv.Reader, batchSize int) { 
    n := 0 
    for { 
     r, err := cr.Read() 
     if err != nil { 
      if err != io.EOF { 
       panic(err) 
      } 
      break 
     } 

     n = n + 1 

     // Execute() when batchSize == n 
    } 
} 

일종의 버퍼를 생성하지 않고 수신 리더 분할하는 방법이되고, 바이트를 사용/string.NewReader()? 이것이 ReadWriter를위한 장소입니까? 그렇다면 어떻게하면 readWriter를 구현할 수 있습니까?

+1

"들어오는 리더를 분할"한다는 것은 무엇을 의미합니까? – JimB

+0

call 각 배치에 대해 실행합니다. 일괄 처리 크기가 200 인 300 행의 csv는 Execute가 두 번 호출되는 결과를 가져옵니다. 그 부분은 사소한 일로, 나는 Execute를주는 가장 효율적인 방법에 관심이있다. 이것이 ReadWriter가 들어오는 지 확실하지 않았습니다. – kwolfe

+1

'io.ReadWriter'는 읽고 쓰기위한 것이고, 나는 무엇을 쓸 계획입니까? (또한'csv.Reader'는 당신을 혼란스럽게하는 경우를 대비해'io.Reader'가 아닙니다). – JimB

답변

-1

csv 파일이 메모리에 저장되면 ReadAll()을 호출하고 적합하다고 판단되는 레코드 조각을 나눕니다.

전체 파일을 한 번에 소비하지 않으려면 처리 할 많은 레코드를 각각 하나씩 Read() 번으로 누적하십시오.

+1

누군가이 답변에 동의하지 않으면 그 이유를 알려주십시오. 한 번에 하나씩 구문 분석하지 않고 N 개의 csv 레코드를 읽을 수있는 방법이 없습니다. – JimB