mad
mad

Reputation: 2789

Apply a string value to several positions of a cell array

I am trying to create a string array which will be fed with string values read from a text file this way:

labels = textread(file_name, '%s');

Basically, for each string in each line of the text file file_name I want to put this string in 10 positions of a final string array, which will be later saved in another text file.

What I do in my code is, for each string in file_name I put this string in 10 positions of a temporary cell array and then concatenate this array with a final array this way:

final_vector='';

for i=1:size(labels)
    temp_vector=cell(1,10);
    temp_vector{1:10}=labels{i};
    final_vector=horzcat(final_vector,temp_vector);
end

But when I run the code the following error appears:

The right hand side of this assignment has too few values to satisfy the left hand side.

Error in my_example_code (line 16)
temp_vector{1:10}=labels{i};

I am too rookie in cell strings in matlab and I don't really know what is happening. Do you know what is happening or even have a better solution to my problem?

Upvotes: 1

Views: 20

Answers (2)

Robert Seifert
Robert Seifert

Reputation: 25232

Use deal and put the left hand side in square brackets:

labels{1} = 'Hello World!'

temp_vector = cell(10,1)
[temp_vector{1:10}] = deal(labels{1});

This works because deal can distribute one value to multiple outputs [a,b,c,...]. temp_vector{1:10} alone creates a comma-separated list and putting them into [] creates the output array [temp_vector{1}, temp_vector{2}, ...] which can then be populated by deal.


It is happening because you want to distribute one value to 10 cells - but Matlab is expecting that you like to assign 10 values to 10 cells. So an alternative approach, maybe more logic, but slower, would be:

n = 10;
temp_vector(1:n) = repmat(labels(1),n,1);

Upvotes: 1

mad
mad

Reputation: 2789

I also found another solution

final_vector='';
for i=1:size(labels)
    temp_vector=cell(1,10);
    temp_vector(:,1:10)=cellstr(labels{i});
    final_vector=horzcat(final_vector,temp_vector);
end

Upvotes: 0

Related Questions