1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyでわりかし簡単にCSVからSIMAに変換する

Posted at

調査士会で会員向けに配布された、測地成果2011変換済みの街区基準点データをSIMA形式(CSV)に変換します。
SIMA形式(CSV)では文字コードがShift-JISとされているのでスクリプトもShift-JISで作成すると不幸にならないと思います。

pName = 4
x = 6
y = 7
dName = File.basename(ARGV[0],".*")

sima = <<EOF
G00,00,#{dName},
Z00,/* 座標データ */,
Z01,2,
A00,
EOF

open(ARGV[0]) do |file|
   file.each_with_index do |line, i|
      if line =~ /\t/
         arry = line.split("\t")
      else
         arry = line.split(",")
      end

      arry.each do |elem|
         elem.strip!
      end

      if arry[x] && (arry[x][-1] =~ /[0-9]/)
         sima = sima + "A01,#{i + 1},#{arry[pName]},#{arry[x]},#{arry[y]},,\n"
      end
   end
end

sima = sima + "A99,\n"

open(dName + ".sim", "w") do |file|
   file.write sima
end

たまに空行があったり項目名が何度も出てきたりするのはif arry[x] && (arry[x][-1] =~ /[0-9]/)のくだりで弾けていると思います。
スクリプトをcsv2sim.rbと保存した場合下記の様に実行すると入力したCSVと同じディレクトリにさいたま市.simというファイルが作成されます。

ruby -Ks csv2sima.rb さいたま市.csv

測量計算ソフトには座標テキストファイルを読み込む機能があるのでその機能を使って読み込むとRubyを使わなくても座標を展開できます。

今回は38ファイル全部を変換したかったのでスクリプトを組んだわけです。
PowerShellから下記のようなコマンドを叩くとディレクトリ内のCSVを一括でSIMAに変換してくれます。

Get-ChildItem -Name *.csv| Where-Object { ruby -Ks.\csv2sim.rb $_ }

pNamexyの変数に適切な数字を当て込めば別の座標データCSVでもSIMAにできるかもしれません。
ただし、測地成果2011の9系以外のデータの時はZ01,2,の行を削除するか適切な値に変更しないといけないので注意が必要です。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?