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

13 vues (au cours des 30 derniers jours)
K_S_
K_S_ le 8 Août 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);

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (1)

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

Catégories

En savoir plus sur Convert Image Type dans Help Center et File Exchange

Produits


Version

R2022a

Community Treasure Hunt

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

Start Hunting!