How do you separate the contents of one cell into separate columns?

I have char-type data of both numbers and words, delimited by spaces, in a cell array of size 207x1. I want to separate the contents of the data in the first column into separate columns based on the space delimiter. Essentially, I want to perform an Excel "Text to Columns" function. My code looks like this:
fid = fopen('file.txt','r');
i = 1;
tline = fgetl(fid);
A{i,1} = tline;
while ischar(tline)
i = i+1;
tline = fgetl(fid);
A{i,1} = tline;
end
fclose(fid);
It produces cells that look like this:
'1553 word T 0 0 15 2 2 15328 0 0 1.00005 0'
I'm unsure if it matters, but I'm using R2013b.

3 Comments

Just use textscan to read the whole file in one go. Is there a special reason why you need to reinvent the wheel and do this in a loop ?
textscan returns a 9762x1 cell for me when I try:
C = textscan(fid,'%s','Delimiter',' ');
Sure, but that is not the right way to use textscan for a file with columns. If you upload your data file then we can show you how to use textscan properly to read your file. By using a loop you are making this waaaay too complicated.

Sign in to comment.

Answers (1)

The simplest way is probably to use the 'split' option of regexp:
splitcells = regexp(yourcellarray, '\s+', 'split')
And assuming that all rows have the same number of columns you can then convert the cell array of cell array into a 2d cell array with:
splitcells = vertcat(splitcells{:})

3 Comments

I'm receiving an error using regexp that states "All cells must be strings." Is there an easy way to convert my char cells to strings? Thanks for your help!
>> cellstr(some characters)
As an aside, have you tried tableread? I encountered a problem similar to this trying to read data from excel and I found it was more friendly for me. Not sure if it suits your needs. ~Adam
If you're using the code you've posted to fill A, then all cells are already strings (unless A was not empty to start with).
To make sure that A is empty to start with replace the:
A{i,1} = tline;
before the loop (not inside the loop) by
A = {tline}; %initialise cell array with the first line.
But as Stephen said you're probably better off with textscan.

Sign in to comment.

Categories

Asked:

on 8 Jun 2016

Edited:

on 8 Jun 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!