久しぶりにPerlで書いてみた


 職場の人からGISのテキストデータを編集して欲しいと頼まれ、久しぶりにコーディング。処理としては格納されているx座標とy座標の順番を変えるという単純なものですが、40万行くらいあるので表計算ソフトぢゃ無理。

 最初はRでちゃちゃっと終わらせようかな~と思ってたのですが、もらったテキストが所々にヘッダーのような行が入ってるんですな↓

#Data
#Region 1
#  16
-50852.785000000003 -47664.510000000002
-50837.785000000003 -47627.010000000002
#Region 1
#  15
-51565.279999999999 -46182.625
-51552.779999999999 -46228.875

元々Rは統計用言語なので、こういうのぶっ込むと途中途中のヘッダーを認識してくれなかったりすんので、うまくいきません。ま、強引にすればいくんでしょうけど・・・

ということで、久しぶりにperlで書くことにしてみました。実に4年ぶりの作業。とりあえずActive Perlwーwロwサwクして書き始めようとするものの・・・・完全に忘れてる!!

何$って??@って・・・初歩的なとこの復習を昔自分が書いたコード見ながら勉強。とりあえず、どうにかでけました。正味2時間くらい。思ってたよりさくっといけたです。

#mifの座標のxyを入れ替える。
#途中に文字列あるので、条件分岐の必要あり。
#################################################

open(FILE,”<vector.txt”) or die “open error!!”;
open(OUT,”>>output.mif”) or die “open error”;
while(<FILE>){
    chomp;
    if($_ =~ m/#.*/){
       print OUT “$_
“;
    }
    else{
        @array = split /s+/;
        print OUT “$array[1] $array[0]
“;
    }
}

close FILE;
close OUT;

 ヘッダー要素には頭に#が付くという規則性があるようなので、そこんとこで条件分岐。数秒で処理完了。う~んPerlもなかなか。

 ま、単純な処理だったってのもありますけど。

 改めて思いましたが、やっぱPerlって可読性低いですな。syntactic sugarが豊富っちゅーのもあるんでしょうが、昔自分が書いたコード見ても何書いてるかさっぱりですもの。その点Rは結構厳格というか・・・

 つっても、柔軟なテキスト処理はやっぱPerlの方が上。PerlとRをうまく使い分けてコーディングするのが賢い使い方なんでしょうな。

  • bunsho

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ゑクセルでもなんとかなりますよ~
    うふふ~
    確かにアールとパールって長所短所ありますよね。
    そんな僕もパールは過去の遺産になりつつあります…

  • myuhe

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    いやいや40万行は無理っしょ。もしかして今のゑクセルは読み込めると??
    とうとうR派に転向っすか??
    それとも、もしやRuby????

  • bunsho

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
    ゑクセル2007はすごいッスよ。かなりの行数をいけるみたいですが使えませ…
    未だCSVでパールですが、後輩は受け付けず、楽な方へ流れます。ルビーよりパールですね
    VBすら使わずに解析出来る時代になって、時代の変化を感じます。

  • myuhe

    SECRET: 0
    PASS: 74be16979710d4c4e7c6647856088456
     excel2007でも、100万そこそこだしね。100万超すとやっぱ書かないと無理と思われ。
     ま、かく言う私もショボデータの時はピボットテーブルwヘwロwシwョなんですけど・・・