1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
| package main
import ( "bufio" "fmt" "io" "math/rand" "os" "strconv" "strings" "sync" "time" )
var ( wg5 sync.WaitGroup )
func main() { wg5.Add(1000) go writeDataToFile() wg5.Wait() fmt.Println("文件写入完成!!!!!!!!!!") fmt.Println()
fmt.Println("读取所写文件对其排序生成新的文件!!!!!!!") dataChan := make(chan int, 1000) readDataToChannel(dataChan) sortToSave(dataChan) }
func sortToSave(dataChan chan int) { dataSlice := make([]int, len(dataChan)) for i := 0; i < len(dataSlice); i++ { for data := range dataChan { dataSlice[i] = data break } } fmt.Println(len(dataSlice)) QuickSort(dataSlice) fmt.Println("排序后:", dataSlice)
file, err := os.OpenFile("d:/go-test/sortData.txt", os.O_WRONLY|os.O_TRUNC|os.O_APPEND|os.O_CREATE, 0666) if err != nil { fmt.Println("open file err ", err) return } defer file.Close() writer := bufio.NewWriter(file)
for i := 0; i < len(dataSlice); i++ { _, err := writer.WriteString(strconv.Itoa(dataSlice[i]) + ",") if err != nil { fmt.Println("write file err ", err) break } } writer.Flush() fmt.Println("有序文件写入完成!!!!!") }
func writeDataToFile() { rand.Seed(time.Now().UnixNano()) file, err := os.OpenFile("d:/go-test/data.txt", os.O_WRONLY|os.O_TRUNC|os.O_APPEND|os.O_CREATE, 0666) if err != nil { fmt.Println("open file err ", err) return } defer file.Close()
writer := bufio.NewWriter(file)
for i := 0; i < 1000; i++ { _, err := writer.WriteString(strconv.Itoa(rand.Intn(1000)+1) + ",") wg5.Done() if err != nil { fmt.Println("write file err ", err) break } } writer.Flush() }
func readDataToChannel(dataChan chan int) { file, err := os.Open("d:/go-test/data.txt") if err != nil { fmt.Println("open file err ", err) return } defer file.Close() reader := bufio.NewReader(file)
for { dataStr, errRead := reader.ReadString(',') if errRead != nil { if errRead == io.EOF { fmt.Println("读取结束!!!!") } else { fmt.Println("读取错误:", errRead) } break } atoi, _ := strconv.Atoi(strings.Trim(dataStr, ",")) dataChan <- atoi }
close(dataChan) fmt.Println("长度:", len(dataChan)) }
func QuickSort(arr []int) { if len(arr) < 2 { return } left, right := 0, len(arr)-1 pivot := right
for i := 0; i < len(arr); i++ { if arr[i] < arr[pivot] { arr[left], arr[i] = arr[i], arr[left] left++ } }
arr[left], arr[right] = arr[right], arr[left] QuickSort(arr[:left]) QuickSort(arr[left+1:]) }
|