CSVファイルからの読み込んだ文字(数字)データの数字への変換
조회 수: 10 (최근 30일)
이전 댓글 표시
カンマ区切りの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);
채택된 답변
Atsushi Ueno
2024년 3월 27일
이동: Atsushi Ueno
2024년 3월 28일
なるほどそうでしたか。
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
Atsushi Ueno
2024년 3월 28일
原因が判らないから質問するのも困難だし、回答する側も input が不明だから何が問題か想定が困難だし、QAは本当に難しいですね。勉強になります。だから評価ください。回答に移動しましたよ。
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 ビッグ データの処理에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!