numericでない列をnumericに変換してcsvreadしたい
4 views (last 30 days)
Show older comments
CSVファイルは要素として、{ 25, 31, 84, "00", "60", 0, 12}の複数行から成り立っています。4列目と5列目の””を削除して、{ 25, 31, 84, 0, 60, 0, 12}としてCSVをreadしたいです。但し、"00"や"60"は、数値の部分は可変になっており、"36"だったりします。また、常に4列目と5列目は、ダブルコーテーションになっております。
0 Comments
Accepted Answer
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
と実行します。
0 Comments
More Answers (2)
Y.Suzuki
on 14 Dec 2017
1 Comment
mizuki
on 14 Dec 2017
>> 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}
See Also
Categories
Find more on 標準ファイル形式 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!