Clear Filters
Clear Filters

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

5 views (last 30 days)
K_S_
K_S_ on 8 Aug 2022
Answered: Atsushi Ueno on 8 Aug 2022
現在、添付ファイルのような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);

Accepted Answer

Hernia Baby
Hernia Baby on 8 Aug 2022
■はじめに
添付されていたテキストデータは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 Comment
K_S_
K_S_ on 8 Aug 2022
ご回答いただきありがとうございます。
また、
>添付されていたテキストデータは7行目の空白部がTabで構成されており不揃いです。
意を汲んで修正していただきありがとうございました。

Sign in to comment.

More Answers (1)

Atsushi Ueno
Atsushi Ueno on 8 Aug 2022
デリミタ文字が不明または不規則なテキストに対しては、デリミタ文字を認識するアプローチから読み込みたい文字列をパターンマッチングで認識するアプローチに変更する事をおすすめします。
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にパターンマッチングがないか探しましたが見当たりませんでした。

Categories

Find more on Convert Image Type in Help Center and File Exchange

Products


Release

R2022a

Community Treasure Hunt

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

Start Hunting!