Lorz.Astro
Lorz.Astro

Reputation: 23

Extract specific column information from table in MATLAB

I have several *.txt files with 3 columns information, here just an example of one file:

namecolumn1   namecolumn2     namecolumn3
#----------------------------------------
name1.jpg         someinfo1     name

name2.jpg         someinfo2     name

name3.jpg         someinfo3     name

othername1.bmp    info1         othername

othername2.bmp    info2         othername

othername3.bmp    info3         othername

I would like to extract from "namecolumn1" only the names starting with name but from column 1.

My code look like this:

file1    = fopen('test.txt','rb');

c        = textscan(file1,'%s %s %s','Headerlines',2);

tf       = strcmp(c{3}, 'name');

info     = c{1}{tf};

the problem is that when I do disp(info) I got only the first entry from the table: name1.jpg and I would like to have all of them:

name1.jpg

name2.jpg

name3.jpg

Upvotes: 0

Views: 379

Answers (1)

sco1
sco1

Reputation: 12214

You're pretty much there. What you're seeing is an example of MATLAB's Comma Separated List, so MATLAB is returning each value separately.

You can verify this by entering c{1}{tf} in the command line after running your script, which returns:

>> c{1}{tf}

ans =

name1.jpg


ans =

name2.jpg


ans =

name3.jpg

Though sometimes we'd want to concatenate them, I think in the case of character arrays it is more difficult to work with than retaining the cell arrays:

>> info = [c{1}{tf}]

info =

name1.jpgname2.jpgname3.jpg

versus

>> info = c{1}(tf)

info = 

    'name1.jpg'
    'name2.jpg'
    'name3.jpg'

The former would require you to reshape the result (and whitespace pad, if the strings are different lengths), whereas you can index the strings in a cell array directly without having to worry about any of that (e.g. info{1}).

Upvotes: 0

Related Questions