12. 1列目をcol1.txtに,2列目をcol2.txtに保存
各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.
###Go
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// 読み込みファイルを指定
name := "../hightemp.txt"
w1name := "col1.txt"
w2name := "col2.txt"
// 読み込むファイルを開く
f, err := os.Open(name)
if err != nil {
fmt.Printf("os.Open: %#v\n",err)
return
}
defer f.Close() // 終了時にクリーズ
// 1列目の保存ファイルを作成
w1, err := os.Create(w1name)
if err != nil {
fmt.Printf("os.Open: %#v\n",err)
return
}
defer w1.Close() // 終了時にクリーズ
// 2列目の保存ファイルを作成
w2, err := os.Create(w2name)
if err != nil {
fmt.Printf("os.Open: %#v\n",err)
return
}
defer w2.Close() // 終了時にクリーズ
// スキャナライブラリを作成
scanner := bufio.NewScanner(f)
// データを1行読み込み
for scanner.Scan() {
// TAB で分割
clm := strings.Split(scanner.Text(),"\t")
w1.WriteString(clm[0] + "\n")
w2.WriteString(clm[1] + "\n")
}
// エラーが有ったかチェック
if err = scanner.Err(); err != nil {
fmt.Printf("scanner.Err: %#v\n",err)
return
}
}
###python
# 読み込むファイルを開く
with open("../hightemp.txt", "r") as r:
# 1つ目の書き出すファイルを開く
with open("col1.txt", "w") as w1:
# 2つ目の書き出すファイルを開く
with open("col2.txt", "w") as w2:
# 一行ずつ読み込む
for data in r:
# TAB を区切り文字で配列化
col = data.strip().split("\t")
# 1項目を col1.txt へ書き出し
w1.writelines(col[0] + "\n")
# 2項目を col2.txt へ書き出し
w2.writelines(col[1] + "\n")
###Javascript
// モジュールの読み込み
var fs = require("fs");
var col1 = [];
var col2 = [];
// テキストファイルを読み込み
var col = fs.readFileSync("../hightemp.txt", 'utf-8');
// 改行で文字列を分割
var data = col.split('\n');
// 行数ループ
data.forEach(function( value ) {
// 項目を TAB で分割
val = value.split('\t')
// 各配列へデータを Push
col1.push(val[0]);
col2.push(val[1]);
});
// col1.txt , col2.txt へ改行で連結したテキストを出力
fs.writeFileSync("col1.txt",col1.join('\n'));
fs.writeFileSync("col2.txt",col2.join('\n'));
まとめ
Go,Python の Close 処理がスッキリで良い。
Python のインデントが深くなる。
Javascirpt は同期処理へ変更。非同期はどこかで待つのか?。
これだけバッファ処理へで書いてる。
3ファイルを処理となんかソースがスッキリしない。