CSVファイルからの読み込んだ文字(数字)データの数字への変換
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
カンマ区切りのCSVファイル(test.csv(10x10の数字データ))から数字を読み出そうとしています。
下記のように書いたのですが、
v = str2double(dt);
でvに入る値がNaNになってしまいます。
ステップ実行でdtを見る限り正しく文字(数字)が入っているのですが、vにはNaNが入ります。
何を間違えているのでしょうか。
fid = fopen('test.csv', 'r');
databox = zeros(10);
for r = 1:10
d = fgetl(fid);
[dt, rem] = strtok(d, ',');
v = str2double(dt);
databox(r, 1) = real(v);
for c = 2:10
[dt, rem] = strtok(rem, ',');
v = str2double(dt);
databox(r, c) = real(v);
end
end
fclose(fid);
Akzeptierte Antwort
Atsushi Ueno
am 27 Mär. 2024
Verschoben: Atsushi Ueno
am 28 Mär. 2024
なるほどそうでしたか。
readmatrix関数などの高水準関数を使えばこの様な問題を回避する事ができます。
readmatrix('test.csv') % UTF-8 BOM付き⇒問題ない
readmatrix('test2.csv') % UTF-8 BOM無し⇒問題ない
問題を再現させて確認しました。
fid = fopen('test.csv', 'r'); % UTF-8 BOM付き
rem = fgetl(fid) % 文字として表示しても判らないが...
unicodeValues = dec2hex(double(rem)) % 最初に0xFE,0xFFが付いている!
v = str2double(rem) % BOMが付いているので、NaNになった
v = str2double(rem(2:end)) % BOMを除けば正しく読み込める(数字が連結されるのは仕様)
fclose(fid);
fid = fopen('test2.csv', 'r'); % UTF-8 BOM無し
rem = fgetl(fid)
unicodeValues = dec2hex(double(rem)) % BOMは付いていない
v = str2double(rem) % 問題ない(数字が連結されるのは仕様)
fclose(fid);
2 Kommentare
Atsushi Ueno
am 28 Mär. 2024
原因が判らないから質問するのも困難だし、回答する側も input が不明だから何が問題か想定が困難だし、QAは本当に難しいですね。勉強になります。だから評価ください。回答に移動しましたよ。
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu ビッグ データの処理 finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!