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 CenterFile Exchange에서 Convert Image Type에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!