readtableで​空白を認識させるには​どうすればよいでしょ​うか。

11 ビュー (過去 30 日間)
K_S_
K_S_ 2022 年 8 月 8 日
回答済み: Atsushi Ueno 2022 年 8 月 8 日
現在、添付ファイルのようなy座標のデータの開始行がずれてしまい空白ができた表データをそのままの形でインポートしたいと考えています。
下記のコードだと空白を認識できないのですが、どうすれば認識できるようになるでしょうか。
opts = detectImportOptions(filename);
opts.DataLines = [2 inf];
opts.VariableNames = {'Register','X','Y','NA'};
opts.VariableTypes = {'char','char','char','char'};
inputdata = readtable("test_readtable.txt",opts);

採用された回答

Hernia Baby
Hernia Baby 2022 年 8 月 8 日
■はじめに
添付されていたテキストデータは7行目の空白部がTabで構成されており不揃いです。
今回はそれを半角で書き直したものを使って行っています。
■やったこと
detectImportOptionsの代わりにfixedWidthImportOptionsを使用しています。
下の画像を参考にオプションを変更していきました。
filename = 'test_readtable1.txt';
% options
DataStartLine = 2;
NumVariables = 4;
VariableNames = {'Register','X','Y','NA'};
VariableWidths = [4, 17, 17, 16]; % 文字の幅を指定
DataType = {'double','char','char','char'};
% set options
opts = fixedWidthImportOptions('NumVariables',NumVariables,...
'DataLines',DataStartLine,...
'VariableNames',VariableNames,...
'VariableWidths',VariableWidths,...
'VariableTypes',DataType);
% read a file
inputdata = readtable(filename,opts)
inputdata = 6×4 table
Register X Y NA ________ ____________________ ____________________ ____________________ 1 {'10000000aaaaaaaa'} {0×0 char } {'****************'} 2 {'1000000000000000'} {'1000000000000000'} {'****************'} 3 {'ab000000ffffffff'} {'ab000000ffffffff'} {'****************'} 4 {'000000001b000000'} {'000000001b000000'} {'****************'} 5 {'0000000000000000'} {'0000000000000000'} {'****************'} 6 {0×0 char } {'00000000000000a1'} {'****************'}
  1 件のコメント
K_S_
K_S_ 2022 年 8 月 8 日
ご回答いただきありがとうございます。
また、
>添付されていたテキストデータは7行目の空白部がTabで構成されており不揃いです。
意を汲んで修正していただきありがとうございました。

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

その他の回答 (1 件)

Atsushi Ueno
Atsushi Ueno 2022 年 8 月 8 日
デリミタ文字が不明または不規則なテキストに対しては、デリミタ文字を認識するアプローチから読み込みたい文字列をパターンマッチングで認識するアプローチに変更する事をおすすめします。
rgx = '^\s*(\d+)\s+([0-9a-f]{16})*\s+([0-9a-f]{16})*\s+(\*{16})*';
str = fileread('test_readtable.txt');
tkn = regexp(str,rgx,'tokens','lineanchors');
tkn = vertcat(tkn{:});
cell2table(tkn,'VariableNames',{'Register','X','Y','NA'})
ans = 6×4 table
Register X Y NA ________ ____________________ ____________________ ____________________ {'1'} {'10000000aaaaaaaa'} {0×0 char } {'****************'} {'2'} {'1000000000000000'} {'1000000000000000'} {'****************'} {'3'} {'ab000000ffffffff'} {'ab000000ffffffff'} {'****************'} {'4'} {'000000001b000000'} {'000000001b000000'} {'****************'} {'5'} {'0000000000000000'} {'0000000000000000'} {'****************'} {'6'} {0×0 char } {'00000000000000a1'} {'****************'}
尚、テキストのImportOptionsにパターンマッチングがないか探しましたが見当たりませんでした。

カテゴリ

Help Center および File ExchangeConvert Image Type についてさらに検索

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!