Borrar filtros
Borrar filtros

How can I append table to csv file?

18 visualizaciones (últimos 30 días)
Okan DÜZYEL
Okan DÜZYEL el 2 de Jun. de 2022
Comentada: melanie becker el 24 de Ag. de 2023
Hi,
I am dealing with appending problem with csv file. Briefly, I have images those come from with for loop. Every iteration I find something in image and create a new table that contains string and numerical data, but I can't merge it to csv file for every iteration. How can I do it?
Getting that error:
Undefined function 'real' for input arguments of type 'table'.
Error in dlmwrite (line 163)
str = sprintf('%.*g%+.*gi',precn,real(m(i,j)),precn,imag(m(i,j)));
Error in challenge (line 84)
dlmwrite('matrix.csv',T,'delimiter',',','-append');
My code like this:
folder = 'Downloads/challenge/';
filePattern = fullfile(folder, '*.png');
srcFiles = dir(filePattern)
numFiles = length(srcFiles)
if numFiles == 0
message = sprintf('There are no png files are in folder:\n%s', folder);
uiwait(warndlg(message));
else
fprintf('There are %d files in %s:\n', numFiles, folder);
for k = 1 : numFiles
fprintf(' %s\n', srcFiles(k).name);
image = uint8(imread(srcFiles(k).name));
[T,EM] = graythresh(image);
BW = imbinarize(image,0.3);
[Ctrs,Radi] = imfindcircles(BW(:,:,1), [11 20],'ObjectPolarity','dark', 'Sensitivity',0.925);
h = viscircles(Ctrs,Radi);
T = array2table(Ctrs);
S = srcFiles(k).name(1:end-4);
T{:,'NewColumn'} = S;
dlmwrite('matrix.csv',T,'delimiter',',','-append');
clear T;
clear fid;
clear Radi;
clear Ctrs;
clear image;
clearvars -global
end
end

Respuestas (1)

MJFcoNaN
MJFcoNaN el 2 de Jun. de 2022
Hello,
dlmwrite cannot deal with table, but take numetric matrix or cell, such as [1 2 3] or {1,2,3}.
You may take the values of T directly, for example
dlmwrite('matrix.csv',T{:,:},'delimiter',',','-append');
PS: Since R2019a, "dlmwrite is not recommended. Use "writematrix" instead."
PS2: You may be interested in a function of "writetable" as well.
  2 comentarios
Walter Roberson
Walter Roberson el 2 de Jun. de 2022
T contains multiple data types, you would not be able to dlmwrite T{:,:}
Use writetable. New enough versions of MATLAB support 'WriteMode', 'append' which makes the task much easier.
melanie becker
melanie becker el 24 de Ag. de 2023
Hello, I'd a code that worked for matlab2022beta:
writetable(T,'outfile.txt','Delimiter',' ', 'WriteMode','append')
writetable(T,'outfile.csv','WriteMode','append')
... but now using matlab2017a I cannot use it anymore (writetable does not know append for writemode).
How I can write my test file with matlab2017a?
I use dlmwrite but I've this error: "Undefined function 'real' for input arguments of type 'string'"
My table contains both string & real,... How I can write both of them?
THanks

Iniciar sesión para comentar.

Community Treasure Hunt

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

Start Hunting!

Translated by