Extracting certain data from very large text/numeric data
信息
此问题已关闭。 请重新打开它进行编辑或回答。
显示 更早的评论
I am trying to extract data from a hoc file which is a combination of text,whitespace,characters, and numbers. I need to be able to find the row index of wherever there occurs the string "section[%d]" where d is an integer, just being able to find the row when I use importdata to a cell array would be good enough, there are upwards of like 40 occurences of the string so I need to find all of them.
6 个评论
Cedric
2013-8-28
Why do you need row numbers? What do you need to extract or do then with these row numbers?
Bernard
2013-8-28
Bernard
2013-8-28
Cedric
2013-8-28
Kelly and I also answered this question from you:
but you gave no feedback, did you need more information?
For the current question, do you need to get the section ID or just to split the file by section and process each section with TEXTSCAN ?
Bernard
2013-8-29
Walter Roberson
2013-8-29
My regexp solution is not working for you?
回答(2 个)
Walter Roberson
2013-8-28
find(~cellfun(@isempty, regexp(YourCell, 'section\[%\d+\]', 'start')))
0 个评论
Based on your comment: one way to tackle that is to split the file according to section headers/footer, so you get blocks that you can process using TEXTSCAN. Example:
content = fileread('myData.txt') ;
blocks = regexp(content, '(}\s*){0,1}section\[\d+\]\s*{|}', 'split') ;
blocks = blocks(2:end-1) ; % Eliminate first empty and last
% (after last '}') blocks.
nBlocks = length(blocks) ;
data = cell(nBlocks, 1) ;
for bId = 1 : nBlocks
data{bId} = textscan(blocks{bId}, 'pt3dadd(%f,%f,%f,%f,%f)') ;
end
and if you don't want data to be a cell array of cell arrays (output of _TEXTSCAN_is a cell array of columns), you can replace the above line in the FOR loop with:
buffer = textscan(blocks{bId}, 'pt3dadd(%f,%f,%f,%f,%f)') ;
data{bId} = [buffer{:}] ;
0 个评论
此问题已关闭。
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!