Azzera filtri
Azzera filtri

convert 47,000rows * 1000columns .mat file to .txt file

1 visualizzazione (ultimi 30 giorni)
Hi Friends,
I have totally 1000 variables, each has 47,000*1 double values. Now, I need to store all in a txt file.
Please help me to find a solution Thanks in advance

Risposta accettata

Image Analyst
Image Analyst il 31 Dic 2016
Use
fid = fopen(filename, 'wt')
% Write out variable 1
fprintf(fid, '%f, ', data1);
fprintf(fid, '\n');
% Write out variable 2
fprintf(fid, '%f, ', data2);
fprintf(fid, '\n');
% Write out variable 3
fprintf(fid, '%f, ', data3);
fprintf(fid, '\n');
.
.
.
% Write out variable 1000
fprintf(fid, '%f, ', data1000);
fprintf(fid, '\n');
fclose(fid);
You really should learn how to use arrays and not have 1000 variables. I don't think I've ever written a program in my entire life that had 1000 separate variables.
  3 Commenti
Image Analyst
Image Analyst il 1 Gen 2017
Well somehow you already have typed them all because you're using them in your code, aren't you? If it's too cumbersome to do that here while saving them, then why is it not to cumbersome to use them all in your code. I mean, let's say your variables area called var1, var2, var3, ...var1000. Is there someplace in the code where you access each one, like (for example)
var438 = 10 * var219 - var934 + log(var791);
And then you do that again for all 999 other variables? Everyone will tell you this is not a good way to program.
To not have to type them all again you'd have to use dynamic field names, as Walter showed you. But it's best to just avoid that in the first place. Don't use 1000 separate variables. Use one array instead. Then you just have one variable to worry about. What are your variable names and why do you think you need 1000 of them.
Walter Roberson
Walter Roberson il 1 Gen 2017
Note that this does not write the data out as columns as was requested in the original question.

Accedi per commentare.

Più risposte (1)

Walter Roberson
Walter Roberson il 31 Dic 2016
data_struct = load('TheFileName.mat');
fn = fieldnames(data_struct);
sorted_fn = sort_nat(fn);
num_var = length(sorted_fn);
one_var = data_struct.(sorted_fn{1});
size_of_var = length( one_var );
all_data = zeros(size_of_var, num_var, class(one_var));
for K = 1 : num_var
all_data(:,K) = data_struct.(sorted_fn{K});
end
Now all of the data has been stored in all_data. But you have not been specific about the output format. Some of the possible outputs include
save OutputFileName.txt all_data -ASCII %space, low precision
or
save OutputFileName.txt all_data -ASCII -DOUBLE %space, higher precision
or
csvwrite('OutputFileName.csv', all_data) %commas
or
dlmwrite('OutputFileName.txt', all_data, 'delimiter', '\t') %tabs
or
xlswrite('OutputFileName.csv', all_data) %commas
  9 Commenti
Walter Roberson
Walter Roberson il 20 Gen 2017
data_struct = load('TheFileName.mat');
fn = fieldnames(data_struct);
sorted_fn = sort_nat(fn);
num_var = length(sorted_fn);
one_var = data_struct.(sorted_fn{1});
size_of_var = length( one_var );
all_data = zeros(size_of_var, num_var, class(one_var));
col_names = cell(1, num_var);
used_cols = 0;
for K = 1 : num_var
this_data = data_struct.(sorted_fn{K});
if isnumeric(this_data)
used_cols = used_cols + 1;
all_data(:,used_cols) = this_data;
col_names{used_cols} = sorted_fn{K};
end
end
all_data(:,used_cols+1:end) = []; %trim out unused
col_names(used+cols+1:end) = []; %trim out unused
item_hdr_fmt = '%-23s'
item_num_fmt = '%+23.16e';
hdr_fmt = [repmat([item_hdr_fmt ' '], 1, used_cols-1), item_hdr_fmt '\n'];
item_fmt = [repmat([item_num_fmt ' '], 1, used_cols-1), item_num_fmt '\n'];
fid = fopen('TheOutputFile.txt', 'wt');
fprintf(fid, hdr_fmt, col_names{:});
fprintf(fid, item_fmt, all_data .'); %the transpose is important
fclose(fid);
Sara
Sara il 23 Gen 2017
Thank you so very much Walter!!! :O) :OD
So Awesome!!!
Tiny typo on the line below: the+ should be an _ ;O)
col_names(used+cols+1:end) = []; %trim out unused
col_names(used_cols+1:end) = []; %trim out unused
Thank you!!!
Sara

Accedi per commentare.

Categorie

Scopri di più su Get Started with MATLAB in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by