的大小爲50 MB的文件是不是這麼大,你不能只加載其內容直接進入MATLAB作爲一個字符串,你可以用做功能FILEREAD:
:
strContents = fileread('yourfile.html');
假設你有上面的文件格式,則可以再用REGEXP(使用named token capture)的功能解析內容
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單元陣列,並放置在一個structure array內容與領域'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'
張貼一些代碼。如果輸入數據格式良好,也許有一個簡單的答案。 –
看起來像讀取一個XML文檔。您可以嘗試稍微更改xmlread幫助頁面中提供的函數(http://www.mathworks.com/help/techdoc/ref/xmlread.html)。 – Aabaz
@ Kerrek SB 我已經添加了一個代碼示例'nugget'。 –