MATLAB Answers


writing to an array

Asked by Baba
on 15 Nov 2011

I have some code that writes data in a column to a file. Instead of writing this to a file, I'd like to write to an Array A and have it stored in MATLAB workspace:

        f = fopen ([FileName], 'data');
        % write text data
        fprintf (f, '%.5f\n', a);
        % close file



No products are associated with this question.

3 Answers

Answer by Fangjun Jiang
on 15 Nov 2011

If you want to assign the value of the vector or matrix "a" to a particular column of the matrix variable "A", then


Of course, the number of rows in "A" needs to be the same as the number of elements in "a".


For example:


If you have variable "a" in the workspace, it is already "saved" in a sense that you don't need to "write" it to another variable to "save" it.

If for some reason, the value of "a" is going to be changed during data processing and you want to keep a copy of the value of "a", simply assign it to a new variable, such as a_backup=a;

You can save the numeric data "a" in a .mat file or .txt file using save().

save 'test.mat' a
save 'test.txt' a -ascii


See update.

on 15 Nov 2011

Here is my code, I want to avoid writing to ascii and instead jsut save to visible workspace variable

files = dir('*.bin');

B = [];

for i=1:length(files)

A = [];

fprintf ('%s...\n', files(i).name);

[d] = bintoasciconverter(files(i).name);

a = d(:,1);

A = [A, a];

f = fopen (Data], 'a');

fprintf (f, '%.5f\n', a);


B = [B; A];


A=[] is inside the for-loop so A is re-set at every iteration.
The way you concatenate to construct A is fine. But B is questionable as it contains many duplicated data carried over by A.

Answer by Naz
on 15 Nov 2011

For .txt file this should work:

A=bin2dec(A); %not sure that this line will work
save (name,'A');


on 15 Nov 2011

i'd like to save the data before it gets written to a file. my point is to eliminate writing to a txt

on 15 Nov 2011

So, what is your initial data that you want to write to the matrix?

Answer by Walter Roberson
on 15 Nov 2011

txtdata = sprintf(f, '%.5f\n', a);

That would give you a character row vector with linefeed (char(10)) in the vector at each position that a new line to be started.

If you prefer this to be converted to a cell array:

txtdata = regexp( sprintf(f, '%.5f\n', a), '\n', 'split');

Note: this particular cell array will end with an empty string because the \n at the end of the final number will trigger a split between that final number and the end of the string. You can remove that empty string.


Join the 15-year community celebration.

Play games and win prizes!

Learn more
Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

MATLAB Academy

New to MATLAB?

Learn MATLAB today!