diff --git a/split-stream.go b/split-stream.go new file mode 100644 index 0000000..034d47a --- /dev/null +++ b/split-stream.go @@ -0,0 +1,58 @@ +package main + +import ( + "os" + "fmt" + "log" + "strconv" + "bufio" +) + +func main() { + // Create file to read + inputFile, err := os.Open("input.txt") + if err != nil { + fmt.Println(err) + log.Fatal("Failed to create file.") + } + inputFileScanner := bufio.NewScanner(inputFile) + // For changing the buffer size + //const maxCapacity int = + //buf := make([]byte,maxCapacity) + //inputFileScanner.Buffer(buf, maxCapacity) + + // Loop to create file handler array + var fileDescArray []*os.File + numberOfFileDesc := 7 + for fileDescIndex := range numberOfFileDesc { + + // Create and open file + handler, err := os.Create("file" + strconv.Itoa(fileDescIndex)) + if err != nil { + log.Fatal(err) + } + + // Append the handler to the list + fileDescArray = append(fileDescArray,handler) + } + + // Loop through open file and write to file handlers + var fileArrayIndex int = 0 + fileDescArrayLen := len(fileDescArray) + for inputFileScanner.Scan() { + (fileDescArray[fileArrayIndex % fileDescArrayLen]).Write(append(inputFileScanner.Bytes(),'\n')) + fileArrayIndex = fileArrayIndex + 1 + } + + // Loop to close all files + for _, handler := range fileDescArray { + if err := handler.Close(); err != nil { + log.Fatal(err) + } + } + // Close input file + if err := inputFile.Close(); err != nil { + log.Fatal(err) + } +} +