Last active
February 27, 2018 13:47
-
-
Save c-yan/da8abffc6c5c0dc6ff3bae97d768b489 to your computer and use it in GitHub Desktop.
13. col1.txtとcol2.txtをマージ 12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package mr | |
| import ( | |
| "bufio" | |
| "io" | |
| "os" | |
| "strings" | |
| ) | |
| type multiReader struct { | |
| Readers []*bufio.Reader | |
| Tmp []string | |
| } | |
| func NewMultiReader(fpList ...*os.File) *multiReader { | |
| readers := make([]*bufio.Reader, len(fpList)) | |
| for i, fp := range fpList { | |
| readers[i] = bufio.NewReader(fp) | |
| } | |
| return &multiReader{readers, make([]string, len(readers))} | |
| } | |
| func (mr *multiReader) ReadLine() (string, error) { | |
| var gerr error = nil | |
| for i, r := range mr.Readers { | |
| s, err := r.ReadString('\n') | |
| if ((err != nil) && (err != io.EOF)) || ((err == io.EOF) && (s == "")) { | |
| return "", err | |
| } | |
| mr.Tmp[i] = strings.TrimRight(s, "\r\n") | |
| if err == io.EOF { | |
| gerr = io.EOF | |
| } | |
| } | |
| return strings.Join(mr.Tmp, "\t"), gerr | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package main | |
| import ( | |
| "./mr" | |
| "fmt" | |
| "io" | |
| "os" | |
| ) | |
| func main() { | |
| fileList := os.Args[1:] | |
| fpList := make([]*os.File, len(fileList)) | |
| for i, fn := range fileList { | |
| fp, err := os.Open(fn) | |
| if err != nil { | |
| panic(err) | |
| } | |
| fpList[i] = fp | |
| defer fp.Close() | |
| } | |
| mreader := mr.NewMultiReader(fpList...) | |
| for { | |
| line, err := mreader.ReadLine() | |
| if (err != nil) && (err != io.EOF) { | |
| panic(err) | |
| } | |
| if line != "" { | |
| fmt.Println(line) | |
| } | |
| if err == io.EOF { | |
| break | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
execution result