How to writetable to file with 2nd row containing VariableUnits?
26 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Miguel Aznar
il 13 Nov 2017
Commentato: Jan Kappen
il 22 Ott 2024
Hi Everyone,
I would like to know how to write a table to file including the metadata (specifically VariableUnits). the function " writetable " does not seem to allow for this function. I have tried to writ table to a comma delimited file and use dlmwrite (....'-append') but this adds the unit row at the bottom of the file and one character at the time instead of the entire string. I would like to have it in the 2nd row, right underneath the variable names.
3 Commenti
Voss
il 22 Ott 2024
Spostato: Voss
il 22 Ott 2024
t = table([1;2;3],[4;5;6]);
t.Properties.VariableNames = {'A','B'};
t.Properties.VariableUnits = {'m','ft'};
filename = 'file.txt';
writetable_with_units_line(t,filename)
type(filename)
writetable_with_units_in_brackets(t,filename)
type(filename)
function writetable_with_units_line(t,filename)
fid = fopen(filename,'w');
str1 = strjoin(t.Properties.VariableNames,',');
str2 = strjoin(t.Properties.VariableUnits,',');
fprintf(fid,'%s\n%s',str1,str2);
fclose(fid);
writetable(t,filename,'WriteMode','append','WriteVariableNames',false,'Delimiter',',');
end
function writetable_with_units_in_brackets(t,filename)
fid = fopen(filename,'w');
str = strjoin(t.Properties.VariableNames+"["+t.Properties.VariableUnits+"]",',');
fprintf(fid,'%s',str);
fclose(fid);
writetable(t,filename,'WriteMode','append','WriteVariableNames',false,'Delimiter',',');
end
Jan Kappen
il 22 Ott 2024
Thanks for that proposal. Yeah it can be done this way, but I'd prefer not to write my own function for that ;)
BTW, I think you can make it shorter without using fopen and friends...
function writetable_with_units_in_brackets(T, filename)
arguments
T table
filename (1,1) string
end
namesWithUnits = T.Properties.VariableNames + " (" + T.Properties.VariableUnits + ")";
T.Properties.VariableNames = namesWithUnits;
writetable(T, filename, Delimiter=",");
end
But again - no function would be better.
A solution could be an extended version of the table class, adding a property WriteVariableUnits which gets parsed during writetable. But since table can't be subclassed that will never happen :(
Risposta accettata
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Text Data Preparation in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!