Output my cell array or table to a .txt file and preserve the original row and column orientation
7 次查看(过去 30 天)
显示 更早的评论
I have a large amount of data in a cell array (5000x7). I have converted all elements to strings so that I can more easily export the data to a .txt file. I have tried several different things, but can't seem to get my data to the .txt file in the exact same format I currently see it in Matlab.
So for example, if I have a 10x7 CELL array of STRINGS that looks something like this (' ' is an empty string and 's' is just a string): I have separated each string in the cell array with a comma because Mathworks is not outputting this text in the same format that I am originally writing it in (ha ha).
C =
{' ', ' ', ' ', ' ', ' ', ' ', ' ';
' ', ' ', ' ', ' ', ' ', ' ', ' ';
's', 's', 's', ' ', ' ', ' ', ' ';
's', 's', 's', ' ', ' ', ' ', ' ';
's', 's', 's', ' ', ' ', ' ', ' ';
's', 's', 's', 's', 's', 's', 's';
's', 's', 's', 's', 's', 's', 's';
's', 's', 's', 's', 's', 's', 's';
's', 's', 's', 's', 's', 's', 's';
's', 's', 's', 's', 's', 's', 's'}
I want to output this to a .txt file in this EXACT same format--meaning that all of the columns and rows line up correctly.
I have tried:
fileID = fopen('tst.txt','w+');
[nrows,ncols] = size(C);
for row = 1:nrows
fprintf(fileID,'%s\n' ,C{row,:});
end
I have tried a couple other delimiters in exchange for %s\n with no good result. Maybe someone knows exactly what delimiter I should use and this is a simple fix.
I have also tried:
CTable = cell2table(C);
writetable(CTable,'tst.txt','Delimiter', '\t','WriteVariableNames',0);
And in the result the columns are clearly not aligned at all. Even though Mathworks used nearly this exact code on a different table and they were lined up...I am thinking the empty strings are messing it up?
I also tried assigning column variable names to CTable and then outputting it, but had no luck there either. Also I thought I should add that the reason this is such an issue is that this .txt file needs to be read in by another program using textscan.
Any help would be much appreciated! Thanks!
0 个评论
回答(1 个)
Shameer Parmar
2016-6-24
Hello M275,
for your mentioned C (10x7) string matrix,
your code for writing the data into txt file is correct except line "fprintf(fileID,'%s\n' ,C{row,:});"
if you replace that line with "fprintf(fileID,'%s\n' ,[C{row,:}]);" , it will write the data into txt without any error, but here your row content will be concatenated.
So to put the spaces between the all elements of each row, you need to apply one more 'for loop'.. So the modified code is as follow:
(This is just suggested code, if you want to use..)
fileID = fopen('tst.txt','w+');
[nrows,ncols] = size(C);
for row = 1:nrows
newRow = '';
for i=1:ncols
if (i==ncols)
newRow = [newRow,C{row,i}];
else
newRow = [newRow,C{row,i},' '];
end
end
fprintf(fileID,'%s\n',newRow);
end
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!