Create cell from character array
    7 views (last 30 days)
  
       Show older comments
    
Dear all,
I am reading lines from a text file using fgetl(), and I come across the following line in the file:
{[1, 2, 3], 'hello'}
If I read this in as the variable C, I get:
C =
{[1, 2, 3], 'hello'}
>> whos C
  Name      Size            Bytes  Class    Attributes
    C         1x15               30  char
I can easily convert this to a cell:
>> C = cellstr(C);
>> whos C
  Name      Size            Bytes  Class    Attributes
    C         1x1               156  cell
I would like to use C later to access its contents. Currently, if I try to access C I get the following:
>> C{1}
ans =
{[1, 2, 3], 'hello'}
It looks like the text line was read in and then converted to a character cell. However, I need to be able to access the first element as a numeric array and the second element as a character array. How can I do this?
Ultimately, I should be able to read in any cell, regardless of its contents (character, numeric, etc.) and sill be able to access the individual elements. I don't want just a single character array defined as a cell.
Many thanks in advance,
Louis
0 Comments
Answers (2)
  Star Strider
      
      
 on 16 Dec 2016
        It took a bit of experimenting to reproduce your cell.
See if this does what you want:
C{1} = {[1, 2, 3], 'hello'};
num = cell2mat(C{1}(1))                         % Option #1
numc = C{1}(1);                                 % Option #2
num = numc{:}
4 Comments
  Star Strider
      
      
 on 18 Dec 2016
				Try this:
Cs = regexp(C{:}, '\{|\[|\]|\}|\', 'split')
It gives:
Cs =
    ''    ''    '1, 2, 3'    ', 'Hello''    ''
The problem is that setting up the comma as a delimiter separates the numbers. Not doing it keeps the comma in the 'Hello' string. I can’t find any available logic expressions in the regexp documentation that will give the ‘pure’ output you want.
  Jan
      
      
 on 18 Dec 2016
        
      Edited: Jan
      
      
 on 18 Dec 2016
  
      Start with the string:
C = '{[1, 2, 3], ''hello''}'
You want to get the numerical array
D = [1,2,3]
correct?
D = sscanf(C(3:end), '%g,').'
Et voila.
Then you write:
 Ultimately, I should be able to read in any cell, regardless of its
 contents (character, numeric, etc.) and sill be able to access the
 individual elements.
Wow, you want to rebuild a Matlab interpreter. This is a really big job. Nested cells containing struct array with mutliple fields, user-defined objects and perhaps function handles for anonymous functions, which create HG2 objects on the fly?!
Don't do this. Do not try to reinvent the Matlab interpreter. If you need to interprete complicated strings as code to create a cell, write an M-file and let Matlab do the job it is designed for.
Not that you can parse the string dynamically using eval, but take this warning seriously:
Don't do this!
See Also
Categories
				Find more on Characters and Strings in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

