Parse a cell array of strings without looping
古いコメントを表示
I've got a nx1 cell array of strings that correspond to spatial coordinates. Here's an example where n=4,
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
Each row of the cell array is a string containing x,y, and z coordinates separated by a comma. I need to parse each string to separate the coordinates, convert the coordinates to numbers, do an operation on them, then put them back in their original format. Is there a way to do this without looping through each row of the cell array? Any tips or insight would be greatly appreciated.
Regards, Justin
6 件のコメント
per isakson
2012 年 10 月 11 日
Why are these strings in a cell array? Did they originate in a file?
Justin Solomon
2012 年 10 月 11 日
per isakson
2012 年 10 月 11 日
編集済み: per isakson
2012 年 10 月 11 日
Why not parse the data with textscan when reading? If you need the cell array of strings read twice with textscan. When the file is in the system cache it is faster to parse with textscan( fid, ...) than to parse the cell array of strings.
Justin Solomon
2012 年 10 月 11 日
Azzi Abdelmalek
2012 年 10 月 11 日
this is another question
per isakson
2012 年 10 月 11 日
編集済み: per isakson
2012 年 10 月 11 日
With 'Headerlines' and 'N' of textscan it would still be possible to read and parse in one step. However, you need to find out the values of the two first.
採用された回答
その他の回答 (2 件)
C = {'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'};
% Extract the numbers:
D = cellfun(@str2num,C,'Un',0);
% Do the 'operation' on the coords with cellfun:
E = cellfun(@(x) x+[1 2 3],D,'Un',0)
% Put them back in original format.
F = cellfun(@(x) sprintf('%.4f,',x),E,'Un',0)
Note that the step from D to E is ambiguous given your description, but you get the idea.
per isakson
2012 年 10 月 11 日
編集済み: per isakson
2012 年 10 月 11 日
On possibility for your first step - if the file is not huge:
str = {
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
};
M = str2num( char(str) );
or I didn't get it.
3 件のコメント
Justin Solomon
2012 年 10 月 11 日
per isakson
2012 年 10 月 11 日
編集済み: per isakson
2017 年 2 月 9 日
cellstr( num2str( M, '%f,%f,%f\n' ) )
However, write the numerical array directly to the file with fprintf in a loop I guess that fast enough. Otherwise, transpose the numerical array and write with fprintf, but only if profile showed that it could be worth the trouble.
Justin Solomon
2012 年 10 月 11 日
カテゴリ
ヘルプ センター および File Exchange で Data Type Conversion についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!