readtableで空白を認識させるにはどうすればよいでしょうか。
조회 수: 11 (최근 30일)
이전 댓글 표시
現在、添付ファイルのような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);
댓글 수: 0
채택된 답변
Hernia Baby
2022년 8월 8일
■はじめに
添付されていたテキストデータは7行目の空白部がTabで構成されており不揃いです。
今回はそれを半角で書き直したものを使って行っています。
■やったこと
下の画像を参考にオプションを変更していきました。
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)
추가 답변 (1개)
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'})
尚、テキストのImportOptionsにパターンマッチングがないか探しましたが見当たりませんでした。
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Convert Image Type에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!