reshape a matrix from the text

2 views (last 30 days)
yousef albah
yousef albah on 23 Sep 2017
Edited: Stephen23 on 23 Sep 2017
I am trying to reshape a matrix from the text file to 45x50 , but when i do the reshape it shows that the number of the elements should not be changes. is there any problem with my coding?
% fileid = fopen ('2016 Sept 7 - Vortex 1_0001')
x = textscan (fileid, '%n %n %n %n','headerlines',3,'delimiter',',')
cc = reshape (x, 44,45)

Answers (2)

Stephen23
Stephen23 on 23 Sep 2017
Edited: Stephen23 on 23 Sep 2017
A simple way to get the numeric data in one array is to use textscan's option 'CollectOutput':
[fid,msg] = fopen(...,'rt');
assert(fid>=3,msg)
opt = {'HeaderLines',3, 'Delimiter',',', 'CollectOutput',true};
C = textscan(fid,'%n%n%n%n', opt{:});
fclose(fid);
M = C{1};
Note that in this code I display the error message if fopen can't open the file, and also put the textscan options into a cell array to make them easier to keep track of.

Cedric
Cedric on 23 Sep 2017
Edited: Cedric on 23 Sep 2017
The output of TEXTSCAN is a row cell array with 4 cells and each one of them contains a numeric array (column vector) of 2250 values.
>> class( x )
ans =
cell
>> size( x )
ans =
1 4
>> class( x{1} )
ans =
double
>> size( x{1} )
ans =
2250 1
It is difficult to guess what you want to achieve with the reshape, but you probably want to merge the content of all cells into a 2250x4 numeric array first:
>> data = [x{:}] ;
>> class( data )
ans =
double
>> size( data )
ans =
2250 4
where x{:} is a comma-separated list (CSL), [..] is a concatenation, and [x{:}] is equivalent to [x{1},x{2},x{3},x{4}].
  2 Comments
Stephen23
Stephen23 on 23 Sep 2017
Or just set textscan's option 'CollectOutput' to true.
Cedric
Cedric on 23 Sep 2017
Stephen, move this as an answer and I vote for it ;-)

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!