0
0

More than 3 years have passed since last update.

12. 1列目をcol1.txtに,2列目をcol2.txtに保存

Posted at

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ファイルを処理となんかソースがスッキリしない。

トップ

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0