Файл размером 50 МБ не такой большой, что вы не можете просто загрузить его содержимое непосредственно в MATLAB в виде строки, что вы можете сделать с помощью функции FILEREAD :
strContents = fileread('yourfile.html');
Предполагая, что формат файла у вас есть выше, вы можете затем проанализировать содержимое с помощью функции REGEXP (используя захват именованного токена ):
expr = '<(?<tag>name|prodId|color)>''([^<>]+)''</\k<tag>>';
tokens = regexp(strContents,expr,'tokens');
tokens = vertcat(tokens{:});
И содержимое token
, использующее содержимое файла примера:
tokens =
'name' 'hat'
'prodId' '1829493'
'color' 'cyan'
'name' 'shirt'
'prodId' '193'
'name' 'dress'
'prodId' '18'
'color' 'dark purple'
Затем вы можете проанализировать полученный массив ячеек N-на-2 и поместить содержимое в структурный массив с полями 'name'
, 'prodId'
и 'color'
. Сложность в том, что не каждая запись будет иметь все три поля. Предполагая, что за каждым 'name'
будут следовать либо 'prodId'
, 'color'
или оба (в порядке 'prodId'
затем 'color'
), затем следующее код должен работать для вас:
s = struct('name',[],'prodId',[],'color',[]); %# Initialize structure
nTokens = size(tokens,1); %# Get number of tokens
nameIndex = find(strcmp(tokens(:,1),'name')); %# Find indices of 'name'
[s(1:numel(nameIndex)).name] = deal(tokens{nameIndex,2}); %# Fill 'name' field
%# Find and fill 'prodId' that follows a 'name':
index = strcmp(tokens(min(nameIndex+1,nTokens),1),'prodId');
[s(index).prodId] = deal(tokens{nameIndex(index)+1,2});
%# Find and fill 'color' that follows a 'name':
index = strcmp(tokens(min(nameIndex+1,nTokens),1),'color');
[s(index).color] = deal(tokens{nameIndex(index)+1,2});
%# Find and fill 'color' that follows a 'prodId':
index = strcmp(tokens(min(nameIndex+2,nTokens),1),'color');
[s(index).color] = deal(tokens{min(nameIndex(index)+2,nTokens),2});
И содержимое s
с использованием содержимого вашего файла примера будет:
>> s(1)
name: 'hat'
prodId: '1829493'
color: 'cyan'
>> s(2)
name: 'shirt'
prodId: '193'
color: []
>> s(3)
name: 'dress'
prodId: '18'
color: 'dark purple'