I have a text file (attached). I am trying to extract a specific part (Nodes part) starting by reading the header (nodal.coordinates) then extract the following four columns (node name, x, y and z). I am trying textscan ad cell2mat functions but I got an empty matrix. Many thanks in advance.

 Réponse acceptée

Stephen23
Stephen23 le 7 Fév 2022
Modifié(e) : Stephen23 le 7 Fév 2022
Method one: TEXTSCAN:
fmt = '%s%f%f%f';
opt = {'MultipleDelimsAsOne',true, 'CollectOutput',true, 'HeaderLines',1};
fid = fopen('sampleQ.txt','rt');
while ~feof(fid) && ~strcmp(fgetl(fid),'nodal.coordinates')
end
out = textscan(fid,fmt,opt{:});
fclose(fid);
out{:}
ans = 8×1 cell array
{'n111' } {'n111-y1'} {'n111-y2'} {'n111-y3'} {'n121' } {'n121-x1'} {'n121-x2'} {'#' }
ans = 7×3
0 0 0 0 450 0 0 1500 0 0 2550 0 0 3000 0 600 3000 0 2000 3000 0
Method two: REGEXP:
str = fileread('sampleQ.txt');
str = regexp(str,'(?<=nodal\.coordinates\s+)[^#]+','match','once');
tkn = regexp(str,'^\s*(\S+)\s+(\d\S+)\s+(\d\S+)\s+(\d\S+)','tokens','lineanchors');
tkn = vertcat(tkn{:})
tkn = 7×4 cell array
{'n111' } {'0.' } {'0.' } {'0.'} {'n111-y1'} {'0.' } {'450.' } {'0.'} {'n111-y2'} {'0.' } {'1500.'} {'0.'} {'n111-y3'} {'0.' } {'2550.'} {'0.'} {'n121' } {'0.' } {'3000.'} {'0.'} {'n121-x1'} {'600.' } {'3000.'} {'0.'} {'n121-x2'} {'2000.'} {'3000.'} {'0.'}
mat = str2double(tkn(:,2:end))
mat = 7×3
0 0 0 0 450 0 0 1500 0 0 2550 0 0 3000 0 600 3000 0 2000 3000 0

Plus de réponses (0)

Catégories

En savoir plus sur Data Import and Export dans Centre d'aide et File Exchange

Produits

Version

R2021b

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by