Effacer les filtres
Effacer les filtres

Writing cells into a .dat file?

4 vues (au cours des 30 derniers jours)
Ali Almakhmari
Ali Almakhmari le 11 Août 2023
Modifié(e) : C B le 11 Août 2023
I have a .mat file that looks like this:
A movement in the row-driection (down) means a new line in the .dat file and a movement in the column direction (right) indicates that between each cell is a comma. So the final file would look something like this (dont mind the spacing in front of each line):
I tried using the writecell command to wirte this .dat file from the .mat file but I failed. I am hoping someone can help me achieve it. I attached the .mat file as a reference.

Réponse acceptée

C B
C B le 11 Août 2023
Modifié(e) : C B le 11 Août 2023
Let me know if this is what you wanted and if anything is not clear in
load('files.mat')
numRows = size(files, 1);
concatenatedRows = cell(numRows, 1);
startcomma = false;
for i = 1:numRows
row = files(i, :);
rowStr = cellfun(@convertToString, row, 'UniformOutput', false);
rowStr(cellfun('isempty', rowStr)) = [];
if strcmp(rowStr{1}(1), '$')
startcomma = true;
end
if startcomma
if ~strcmp(rowStr{1}(1), '$')
if strcmp(rowStr{end}, '$')
concatenatedRows{i} = strjoin(rowStr, ',');
concatenatedRows{i} = [' ' , concatenatedRows{i}];
else
concatenatedRows{i} = [strjoin(rowStr, ','), ','];
concatenatedRows{i} = [' ' , concatenatedRows{i}];
end
else
concatenatedRows{i} = strjoin(rowStr, ' ');
concatenatedRows{i} = [' ' , concatenatedRows{i}];
end
else
concatenatedRows{i} = strjoin(rowStr, ' ');
end
if strcmp(rowStr{end}, '$')
startcomma = false;
end
end
filename = 'output.dat';
fid = fopen(filename, 'w');
for i = 1:numRows
fprintf(fid, '%s\n', concatenatedRows{i});
end
fclose(fid);
function out = convertToString(in)
if isnumeric(in)
out = num2str(in);
elseif islogical(in)
out = char(string(in));
else
out = char(in);
end
end
  2 commentaires
Ali Almakhmari
Ali Almakhmari le 11 Août 2023
Modifié(e) : Ali Almakhmari le 11 Août 2023
Thank you so much. This is almost what I want, what is missing is the fact that the comma between each cell in a row are missing. So you will see that the output.dat doesn't match the picture I attached in terms of the commas, instead of the commas, output.dat put spaces. Can you edit the code please?
C B
C B le 11 Août 2023
updated code for comma and space at start.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Get Started with MATLAB dans Help Center et File Exchange

Produits


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by