Parse a cell array of strings without looping
    4 visualizzazioni (ultimi 30 giorni)
  
       Mostra commenti meno recenti
    
    Justin Solomon
      
 il 11 Ott 2012
  
    
    
    
    
    Modificato: per isakson
      
      
 il 9 Feb 2017
            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 Commenti
  per isakson
      
      
 il 11 Ott 2012
				
      Modificato: per isakson
      
      
 il 11 Ott 2012
  
			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.
Risposta accettata
  Azzi Abdelmalek
      
      
 il 11 Ott 2012
        
      Modificato: Azzi Abdelmalek
      
      
 il 11 Ott 2012
  
      clear
A={'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'
'122.8233,216.1323,671.8740'}
B=cellfun(@(x) regexp(x,',','split'),A,'uni',false)
out=cell2mat(cellfun(@(x) [cellfun(@(y) str2num(y),x)],B,'uni',false))
%or easier
 out=str2num(cell2mat(A))
1 Commento
Più risposte (2)
  Matt Fig
      
      
 il 11 Ott 2012
        
      Modificato: Matt Fig
      
      
 il 11 Ott 2012
  
      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.
0 Commenti
  per isakson
      
      
 il 11 Ott 2012
        
      Modificato: per isakson
      
      
 il 11 Ott 2012
  
      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 Commenti
  per isakson
      
      
 il 11 Ott 2012
				
      Modificato: per isakson
      
      
 il 9 Feb 2017
  
			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.
Vedere anche
Categorie
				Scopri di più su Data Type Conversion in Help Center e File Exchange
			
	Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




