2018年9月1日土曜日

開発環境

Head First C ―頭とからだで覚えるCの基本 (David Griffiths (著)、Dawn Griffiths (著)、中田 秀基 (監修)、木下 哲也 (翻訳)、オライリージャパン)の3章(小さなツールの作成 - 1つのことだけをうまくやる)、コードマグネット(p. 142)をGoで取り組んでみる。

コードマグネット(p. 142)

コード(Emacs)

package main

import (
 "fmt"
 "os"
 "strings"
)

func main() {
 if len(os.Args) != 6 {
  fmt.Fprintln(os.Stderr, "5つの引数を指定してください。")
  return
 }
 in, err := os.Open("spooky.csv")
 if err != nil {
  fmt.Fprintln(os.Stderr, err)
  return
 }
 defer in.Close()

 file1, err1 := os.Create(os.Args[2])
 if err1 != nil {
  fmt.Fprintln(os.Stderr, err1)
  return
 }
 defer file1.Close()

 file2, err2 := os.Create(os.Args[4])
 if err2 != nil {
  fmt.Fprintln(os.Stderr, err2)
  return
 }
 defer file2.Close()

 file3, err3 := os.Create(os.Args[5])
 if err3 != nil {
  fmt.Fprintln(os.Stderr, err3)
  return
 }
 defer file3.Close()

 var line string
 for {
  n, _ := fmt.Fscanln(in, &line)
  if n != 1 {
   break
  }
  if strings.Contains(line, os.Args[1]) {
   fmt.Fprintln(file1, line)
  } else if strings.Contains(line, os.Args[3]) {
   fmt.Fprintln(file2, line)
  } else {
   fmt.Fprintln(file3, line)
  }
 }
}

入出力結果(Terminal)

$ go run sample5.go
5つの引数を指定してください。
$ go run sample5.go mermaid mermaid.csv Elvis elvises.csv the_rest.csv
$ cat spooky.csv 
30.685163,-68.137207,Type=Yeti
-100.0, 50,Type=Test1
28.304380,-74.575195,Type=UFO
29.132971,-71.136475,Type=Ship
28.343065,-62.753906,Type=Elvis
27.868217,-68.005371,Type=Goatsucker
30.496017,-73.333740,Type=Disappearance
26.224447,-71.477051,Type=UFO
29.401320,-66.027832,Type=Ship
37.879536,-69.477539,Type=Elvis
22.705256,-68.192139,Type=Elvis
27.166695,-87.484131,Type=Elvis
50,200,Type=Test2
$ cat mermaid.csv 
$ cat elvises.csv 
28.343065,-62.753906,Type=Elvis
37.879536,-69.477539,Type=Elvis
22.705256,-68.192139,Type=Elvis
27.166695,-87.484131,Type=Elvis
$ cat the_rest.csv 
30.685163,-68.137207,Type=Yeti
-100.0,
0,Type=Test1
28.304380,-74.575195,Type=UFO
29.132971,-71.136475,Type=Ship
27.868217,-68.005371,Type=Goatsucker
30.496017,-73.333740,Type=Disappearance
26.224447,-71.477051,Type=UFO
29.401320,-66.027832,Type=Ship
50,200,Type=Test2
$ 

0 コメント:

コメントを投稿