機能

Scilab使用例(2) -csvファイルの扱い-

  • 2020/08/26
  • WATANABE Tomoo
Scilab使用例(2) -csvファイルの扱い-

 色々なシチュエーションを想定し、使えそうなスクリプトをご紹介していきたいと思います。
 今回は前回省略した「csvファイルからのデータインポート/エクスポート」の補足です。

 前回の記事でデータファイルの標準的フォーマットと言えるcsvファイルも読み書き可能ということは述べたとおりですが、注意としては読み込む時はデフォルトとしてデータが全て"数値"として読み込まれてしまうということです。つまり、データを取得した際のタイトルなどは全て数値ではないということから"NaN"で返されてしまうことになります。

 

<Example>
M = ["1" , "Not-A-Number" , "2" , "Not-A-Number"];
filename = fullfile(TMPDIR, "data.csv");
csvWrite(M, filename);
M1 = csvRead(filename)

 
 
 

とすると、4つの文字列をcsvファイル内に書き込みますが、これは同じ変数M内に数値と文字列が混在できないための処置でcsvファイル内では特に制限があるわけではありません。改めてM1としてcsvファイルの中身を読み込みますが、上記で実行すると、

--> M1 = csvRead(filename)
M1 =
1. Nan 2. Nan

と返されます。

 これを避けるには、一度csvファイルの中身を全てテキストとして読み込み、数値に該当する部分だけ改めて置換をする。という対処を行います。

 

M2 = csvRead(filename,',',[],'string')
M3 = strtod(M2)

 

とすれば、M2は全て文字列の変数として読み込まれ、M3はこれらを数値に変換します。結果は、

--> M2 = csvRead(filename,',',[],'string')
M2 =
"1" "Not-A-Number" "2" "Not-A-Number"

--> M3 = strtod(M2)
M3 =
1. Nan 2. Nan

となります。あまり文字列と数値が同じ行内に混在することは無いと思われますが、その様な場合には個別に変換していくなどの処置が必要となります。

 csvReadを読み込む際には、他にもセパレータ, 小数点記号, 読み込む範囲指定等のオプションが追加できますので、詳細についてはこちらを御覧ください。