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

13 Ansichten (letzte 30 Tage)
K_S_
K_S_ am 8 Aug. 2022
Beantwortet: Atsushi Ueno am 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);

Akzeptierte Antwort

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Atsushi Ueno
Atsushi Ueno am 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にパターンマッチングがないか探しましたが見当たりませんでした。

Kategorien

Mehr zu Convert Image Type finden Sie in Help Center und File Exchange

Produkte


Version

R2022a

Community Treasure Hunt

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

Start Hunting!