csvファイルを正確に読み込めない
Show older comments
添付(ZR1.csv)のようなZR1.csvからZR10.csvまで通し番号が振られたcsvファイルを読み込みたいと考えています。
下記のコードで実行すると、添付(キャプチャ.JPG)のように正確に読み込まれません。
numfiles=10;
for k=1:numfiles
filename{k}=sprintf('ZR%d.csv',k);
File=filename{k};
zmat{k}=readmatrix(File);
end
しかし、例えばZR1a.csvのように通し番号の後に任意のアルファベットを入れてcsvファイルを保存し、下記コードでそれを読み込もうとすると上手く読み込むことができます。
numfiles=10;
for k=1:numfiles
filename{k}=sprintf('ZR%da.csv',k); ←変更
File=filename{k};
zmat{k}=readmatrix(File);
end
ZR1a.csvのようにその都度csvファイルを別名保存してから実行するのは手間がかかるので、可能であればZR1.csvのまま読み込みたいと思っています。
上記うまく読み込めない現象へのお心当たり、及び解決策をお教えいただけますと助かります。
Accepted Answer
More Answers (1)
Hernia Baby
on 3 Aug 2022
スプレッド形式として読み込めてないのかもしれません。
readmatrixのFiletypesオプションを指定するとうまくいきました。
以下のコードでご確認ください。
Files = dir("ZR*.csv");
numfiles = length(Files);
for k=1:numfiles
filename{k} = sprintf('ZR%i.csv',k);
File = filename{k};
zmat{k} = readmatrix(File,FileType="spreadsheet"); %<-変えた場所
end
2 Comments
■'ZR1a.csv'でうまくいくか検証
format shortE
T1 = readmatrix('ZR1.csv')
T2 = readmatrix('ZR1a.csv')
上記でもわかる通り、差異は見られませんでした。
■メモ帳で中身がどうなっているのか確認

@Atsushi Uenoさんが述べている通り、
おそらく前の空白2文字が悪さをしているのだと思います。
そして空白2文字とハイフンを文字として認識しているの可能性もあります。
■ZR1b(見栄えをそろえるため正数に1つスペースを置いたもの)を読み込み

T3 = readmatrix('ZR1b.csv')
やはり空白が悪さしていますね。
■ZR1c(前のスペースを消したもの)を読み込み(確認用)

T4 = readmatrix('ZR1c.csv')
以上で前の空白が影響を与えていることがわかりました。
■すべて正数の場合(ハイフンなし)
T5 = readmatrix('ZR1d.csv')
■対策
空白の対処 or FileType関連と考えました。
エクセルで見てみると1列だったため、スプレッド形式なら読めると判断したからです。
T6 = readmatrix('ZR1.csv',FileType='text')
■'NumHeaderLines'で解消する理由の考察

インポートツールのロジックを動かしている可能性があり、そのため解消したのかもしれません。
uiopenで見てみると確かに前方の空白が消えています(後ろに空白ができているが…)。

NK
on 4 Aug 2022
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!