"os"
"io"
"errors"
+ "bufio"
)
var rootPath = "samovar"
return nil
}
+type LineByLine struct {
+ input io.Reader
+ buf []byte
+ off int
+ end int
+}
+
+var lineByLineDebug = false
+
+func (r *LineByLine) ReadLine() (line []byte, err error) {
+ if r.input == nil { return nil, nil }
+ if r.buf == nil || len(r.buf) == 0 {
+ var x [8]byte
+ r.buf = append(r.buf, x[:]...)
+ r.end = cap(r.buf)
+ fmt.Printf("Allocating buffer: %v, %v, %v\n", r.buf, len(r.buf), cap(r.buf))
+ }
+
+ var n int
+ if lineByLineDebug { fmt.Printf("Start line is: %q, off: %d, end: %d, buf: %q\n", line, r.off, r.end, r.buf) }
+ for {
+
+ if r.off == 0 {
+ n, err = r.input.Read(r.buf)
+ if err != io.EOF && err != nil { return nil, err }
+ if lineByLineDebug { fmt.Printf("Read %q\n", r.buf) }
+ } else {
+ n = r.end
+ if lineByLineDebug { fmt.Printf("Continuing read from offset %d with %d\n", r.off, n) }
+ }
+
+ for i, c := range r.buf[r.off:] {
+ if lineByLineDebug { fmt.Printf("%d %q ", i, c) }
+ if i >= n {
+ break
+ }
+ if c == '\n' {
+ line = append(line, r.buf[r.off:r.off+i+1]...)
+ r.off += i+1
+ r.end = n
+ if lineByLineDebug { fmt.Printf("Found newline. Stopping at %d, %d with: %q\n", r.off, r.end, line) }
+ return line, nil
+ }
+ }
+ line = append(line, r.buf[r.off:n]...)
+ if lineByLineDebug { fmt.Printf("Newline not found. Line is: %q\n", line) }
+ if r.off != 0 {
+ r.off = 0
+ r.end = cap(r.buf)
+ }
+ if err == io.EOF {
+ return line, io.EOF
+ }
+ }
+}
+
func main() {
- err := filepath.WalkDir(rootPath, copyToLower)
+ h0, err := os.Open("int.go")
+ if err != nil { panic("huynya") }
+ defer h0.Close()
+
+ h1, err := os.OpenFile("2.tmp", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+ if err != nil { panic("huynya") }
+ defer h1.Close()
+
+ v := LineByLine{input: h0}
+ for {
+ l, err := v.ReadLine()
+ if err == io.EOF { break }
+ fmt.Printf("Received %q\n", l)
+ h1.Write(l)
+ }
+
+ h2, err := os.Open("int.go")
+ if err != nil { panic("huynya") }
+ defer h2.Close()
+
+ h3, err := os.OpenFile("3.tmp", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
+ if err != nil { panic("huynya") }
+ defer h3.Close()
+
+ s := bufio.NewScanner(h2)
+ for {
+ b := s.Scan()
+ if !b { break }
+ fmt.Printf("Scanner Received %q\n", s.Text())
+ l := s.Bytes()
+ l = append(l, "\n"...)
+ h3.Write(l)
+ }
+ return
+
+ err = filepath.WalkDir(rootPath, copyToLower)
if err != nil {
fmt.Println(err)
fmt.Println("huynya bro")