csvファイルを正確に読み込めない
Ältere Kommentare anzeigen
添付(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のまま読み込みたいと思っています。
上記うまく読み込めない現象へのお心当たり、及び解決策をお教えいただけますと助かります。
Akzeptierte Antwort
Weitere Antworten (1)
Hernia Baby
am 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 Kommentare
Hernia Baby
am 3 Aug. 2022
Bearbeitet: Hernia Baby
am 3 Aug. 2022
■'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
am 4 Aug. 2022
Kategorien
Mehr zu スプレッドシート finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!