numericでない​列をnumericに​変換してcsvrea​dしたい

6 views (last 30 days)
Y.Suzuki
Y.Suzuki on 12 Dec 2017
Commented: mizuki on 14 Dec 2017
CSVファイルは要素として、{ 25, 31, 84, "00", "60", 0, 12}の複数行から成り立っています。4列目と5列目の””を削除して、{ 25, 31, 84, 0, 60, 0, 12}としてCSVをreadしたいです。但し、"00"や"60"は、数値の部分は可変になっており、"36"だったりします。また、常に4列目と5列目は、ダブルコーテーションになっております。

Accepted Answer

mizuki
mizuki on 12 Dec 2017
Edited: mizuki on 12 Dec 2017
importtool を使用して読み込みを行うと一番楽ですが、読み込み関数は csvread である必要はありますか?
ファイル自体からダブルクオーテーションを抜いてから読み込むのは二度手間になるため、フォーマットを指定する方法を取る方法ではいかがでしょうか。
importtool を使用して作成した読み込み関数 importfile を添付します。実際の読み込み関数は、ダブルクオーテーションとカンマを抜くような形式を指定して textscan を使用しています。
使用方法は以下のようになります。
filename = 'csvread_answers.csv';
tbl = importfile(filename);
フォーマットは以下のように指定されています。
formatSpec = '%q%q%q%q%q%q%q%[^\n\r]';
また、importfile.m の内容を確認するには
edit importfile
と実行します。

More Answers (2)

Y.Suzuki
Y.Suzuki on 14 Dec 2017
table2array(tbl)を使うことにより、最終的にcsvreadによる取り込みと同じようになりました。ありがとうございました。たいへん勉強になりました。
  1 Comment
mizuki
mizuki on 14 Dec 2017
良かったです! お手数ですが、他の方が同じような点で困ったときにこの回答を使うかどうかの判断がすぐできるよう、回答のacceptをしていただけますでしょうか。よろしくお願いします。

Sign in to comment.


Y.Suzuki
Y.Suzuki on 14 Dec 2017
上記、処理を行うことで、データを取り込むことができましたが、数値として演算処理ができません。 ex. tbl(2,4)*3 で 'table' 型の入力引数の演算子 '*' が未定義です。とエラーが出ます。edit importfileで、見た感じでは、cell2matで数値化しているように見受けられるのですが、どうしてでしょうか。
  1 Comment
mizuki
mizuki on 14 Dec 2017
出力変数 tbl は数値型ではなく table 型になっているためです。型については class 関数で以下のように確認できます。
>> class(tbl)
importfile.m の86行目に、
csvreadanswers = table;
という行があります。これは、出力引数 csvreadanswers が table 型ということを定義しています。
エラーが起こったときには、問題をまず細かく分けて一つずつ解決していく必要があります。今回の場合、
>> tbl(2,4)*3
が実行できないということですが、このような場合、
>> tbl(2,4)
が実行できるかを見ていきましょう。
>> tbl(2,4)
ans =
table
VarName4
________
0
となっていますよね。これも数値型ではなく table 型になってしまっているため、直接掛け算をすることができません。(例えばVarName4 * 3 はできない)
これを解決する方法は、table 型から数値型に直す方法と、table 型から数値だけを抜き出す方法の2つがあります。
1. table 型から数値型に直す方法
table2array 関数を使用します。ただし、table 型が持っているヘッダ情報などは消えますのでご注意ください。
>> num = table2array(tbl)
2. table 型から数値だけを抜き出す方法
中括弧 {} を使用します。
>> tbl{2,4}

Sign in to comment.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!