readcellで要​素の型を指定してcs​vをインポートする方​法を教えてください。

readcellでcsvファイルを読み込む際に、cell内に元の数値(9桁の16進数)が格納されず、"Inf"が格納されてしまい困っています。
現在書いたコードではd, eの後が数字のみのため、指数表記と認識されているようです。
正しく動作させる方法を教えてください。
filename = 'test.csv';
numVars = 3;
varTypes = {'char','char','char'};
delimiter = ',';
dataStartLine = 2;
opts = delimitedTextImportOptions('NumVariables',numVars, ...
'VariableTypes',varTypes,...
'Delimiter',delimiter,...
'DataLines', dataStartLine);
input_data = readcell(filename,opts);

2 件のコメント

covao
covao 2023 年 3 月 13 日
全てのデータをchar文字列として正しく読み込むには、readcell関数ではなく、以下のようにreadtable関数を用いるのが良いようです。
input_data = table2cell(readtable(filename,opts));
K_S_
K_S_ 2023 年 3 月 13 日
無事できました。
ありがとうございました。

サインインしてコメントする。

 採用された回答

covao
covao 2023 年 3 月 16 日

0 投票

解決とのご連絡ありがとうございます。
再現するコードをこちらに記述しておきます。
filename='https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1312970/test.csv';
numVars = 3;
varTypes = {'char','char','char'};
delimiter = ',';
dataStartLine = 2;
opts = delimitedTextImportOptions('NumVariables',numVars, ...
'VariableTypes',varTypes,...
'Delimiter',delimiter,...
'DataLines', dataStartLine);
input_data_wrong = readcell(filename,opts) %Wrong types!
input_data_wrong = 3×3 cell array
{[1]} {'11a111111'} {[ Inf]} {[2]} {'11b111111'} {[ Inf]} {[3]} {'11c111111'} {'11f111111'}
input_data = table2cell(readtable(filename,opts)) %Correct types
input_data = 3×3 cell array
{'1'} {'11a111111'} {'11d111111'} {'2'} {'11b111111'} {'11e111111'} {'3'} {'11c111111'} {'11f111111'}

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchangeデータのインポートと解析 についてさらに検索

製品

リリース

R2022b

タグ

質問済み:

2023 年 3 月 3 日

回答済み:

2023 年 3 月 16 日

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!