getting "Index exceeds matrix dimensions." Can anyone explain?

1 次查看(过去 30 天)
function [ coordinates ] = readSTL1( filename,k)
% reads ASCII STL file and gives coordinates of vertices.
%filename-name of file(test.txt),k- number of rows in cell.
fid=fopen(filename);
C=textscan(fid,'%s');
%reads file and generates cell.
m = 11;
i = 1;
coordinates = zeros(4455,1);
while(m < (k-3))
j = 1;
while (j < 4)
l = 1;
while(l<4)
coordinates(i) = C(m);
l = l+1; % makes sure loop runs thrice.
m = m+1; % access corresponding row from cell'C'.
i = i+1; % row number in output matrix.
end
m = m+1;
j = j+1;
end
m = m+10;
end
end

回答(2 个)

Walter Roberson
Walter Roberson 2013-5-21
Are you sure that is your code? textscan() returns a cell array, so your C is a cell array and thus C(m) is a 1x1 cell array (which has a string inside it), but you cannot assign a cell array into a numeric array (you initialized coordinates as zeros() which is numeric).
Even if you were to change it to C{m} then C{m} would be a string, most likely of multiple characters, and assigning multiple characters into a single numeric location is not going to work.
When you use textscan with a '%s' format, the input will be divided up into (whitespace delimited) strings with line boundaries treated the same as whitespace, so C will contain one location per string. e.g.,
fizz 19 39
bar
would return
{'fizz'; '19'; '39'; 'bar'}
You assume in your code that m starts from 11, so your code that accesses C(m) is going to fail of there were not at least 11 strings in the file.
  2 个评论
siddhesh rane
siddhesh rane 2013-5-21
编辑:siddhesh rane 2013-5-21
Yes..the cell has both numerical and text datas..i wrote this code to separate numerical data from text..numerical data repeats itself in certain sequence.so i have to copy data from those rows and create coordinates matrix .rowise sequence of occurance of data is {[(11,12,13)(15,16,17)(19,20,21)][(32,33,34)(36,37,38)(40,41,42)]}..for accessing thows rows i used three while loops..And as my cell will have atleast 11 columns i guess that wont be a problem.
Walter Roberson
Walter Roberson 2013-5-21
At the command line, give the command
dbstop if error
then run the program. When it stops at the error you indicated, examine size(C) and the value of m .

请先登录,再进行评论。


Iain
Iain 2013-5-21
If you know the indices of where the data is, you can instead do:
Indices = [ 11 12 13 15 16 17 19 20 21 32 33 34 36 37 38 40 41 42];
for i = 1:numel(Indices)
coordinates(i) = C{Indices(i)};
end
The error occurs because your "m" is larger than the number of elements in C.

类别

Help CenterFile Exchange 中查找有关 Labels and Annotations 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by