16進数・カンマ区切​りで構成されたデータ​をreadtable​で読み込む

16進数で書かれたカンマ区切りの.txtデータがあり、
これをreadtableコマンドでテーブルとして読み込んだところ、
データ内で00と0E等と文字と数字が混在している列において、0Eのように文字で書かれたところがNaNで読み込まれてしまいます。
また、00のところは0と読み込んでしまっています。
.txtデータの中身をそのままの形でカンマ区切りでテーブルとして読み込むことは不可能でしょうか?
.txtファイル(一部)は下記のようになっており
60 55 FF 25 8
60 AB FF 2 8
60 E5 FF 3 8
60 F3 FF 2 8
60 FA FF 4 8
60 FB FF 0E 8
60 FC FF 6 8
60 FD FF FF 7
これをreadtableで読み込むと
60 '55' 'FF' 25 8
60 'AB' 'FF' 2 8
60 'E5' 'FF' 3 8
60 'F3' 'FF' 2 8
60 'FA' 'FF' 4 8
60 'FB' 'FF' NaN 8
60 'FC' 'FF' 6 8
60 'FD' 'FF' NaN 7
となってしまいます。

Antworten (1)

Kojiro Saito
Kojiro Saito am 30 Mär. 2021

1 Stimme

インポートする際のオプションでカラムのデータ型を指定できるので、VariableTypesにcharかstringを指定してみてはいかがでしょうか。
例:
filename = 'test.txt';
opts = detectImportOptions(filename);
opts.VariableTypes = {'string','string','string','string','string'};
t = readtable(filename, opts);

5 Kommentare

凌 大井川
凌 大井川 am 30 Mär. 2021
回答いただきありがとうございます。
データ型の指定はインポートするデータすべての要素に適応したい場合はどのように設定すれば良いのでしょうか?
設定できる旨は理解下のですが、実際に使用しているデータだと31列あるので、’string’を31回書くしか無いのでしょうか?
Kojiro Saito
Kojiro Saito am 30 Mär. 2021
setvartypeでまとめて同じデータ型を指定することもできますので、こちらのほうが楽ですね。
filename = 'test.txt';
opts = detectImportOptions(filename);
opts = setvartype(opts, 'string');
t = readtable(filename, opts);
参考:setvartype
凌 大井川
凌 大井川 am 30 Mär. 2021
ひとまず’string’を31回書いて、目的は達成できました。
ありがとうございました。
凌 大井川
凌 大井川 am 30 Mär. 2021
まとめてデータ型を指定する方法への回答、見落としてました。ありがとうございます!
ちなみに、これでインポートした各列に対して、hex2decが適応できないのですがどうすれば良いでしょうか?(別の質問として投稿させていただいております。)
凌 大井川
凌 大井川 am 30 Mär. 2021
どうやらデータの最終行に、<missing>という要素が含まれた行があり、これが存在するせいで変換できなかったようです。
この行を削除することで正常に変換することができました。

Melden Sie sich an, um zu kommentieren.

Kategorien

Tags

Gefragt:

am 30 Mär. 2021

Kommentiert:

am 30 Mär. 2021

Community Treasure Hunt

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

Start Hunting!