Search code examples
regexstringmatlabtext-processingcell-array

convert string to cell matrix


In MATLAB, I have a string with the following format,

str = 'var1,var2\nvar1,var2,var3\n,var9\n'\n\n,var12,var13,var14,v15;

I want to convert this to a cell matrix where each comma , separate's a different item in a column and each \n represents a new row. Each value can either be a string or double.

There can be empty rows, and many empty values. The largest row can be any row.

I know I can loop split the string and loop through it adding to the cell matrix as I go along, but is there a more efficient way? How can I efficiently convert the above string to a cell matrix.


Solution

  • You can make use of strsplit and/or regexp to get the row,col elements in individual cells:

    >> strsplit(str,'\\n')
    ans = 
        'var1,var2'    'var1,var2,var3'    ',var9'    ',var12,var13,var14,v15'
    >> tab = regexp(strsplit(str,'\\n'),',','split');
    >> tab{:}
    ans = 
        'var1'    'var2'
    ans = 
        'var1'    'var2'    'var3'
    ans = 
        ''    'var9'
    ans = 
        ''    'var12'    'var13'    'var14'    'v15'
    

    Then you can access the cells like:

    >> tab{2}{3}
    ans =
    var3
    

    This is not a true 2D cell, but it may serve the purpose.