Replace comma with dot after fopen

5 views (last 30 days)
Hello everyone,
I am having some problems with Matlab.
I import a txt file with fopen and, after imported, I want to convert the commas in the file with dots but I do not know how to do. I have searched between the answers in the Matlab Central but I have found nothing.
Thank you for the help.
  4 Comments
Daniele Sonaglioni
Daniele Sonaglioni on 19 Oct 2021
@KSSV Thanks but it does not help me because it must be used before fopen (as far as I have seen).
I attach a part of my code to let you know what I am working on:
fidi = fopen('myfile.txt','rt');
k1 = 1;
while ~feof(fidi)
readline = fgetl(fidi);
if strcmp(readline,'Results:')
C = textscan(fidi, '%f%f%f%f %*f%*f%*f%*f%*f%*f', 'HeaderLines',9, 'CollectOutput',1);
else
C = textscan(fidi, '%f%f%f%f %*f%*f%*f%*f%*f%*f', 'HeaderLines',0, 'CollectOutput',1);
end
M = cell2mat(C);
fprintf(1,'\tSection %2d: (%4d x %d)\n', k1, size(M));
if isempty(M) % Empty Matrix Indicates End-Of-File
fprintf(1,'Reading finished, %d Sections\n',k1-1);
break
end
D{k1,:} = M;
fseek(fidi, 0, 0);
k1 = k1 + 1;
end
fclose(fidi);
Daniele Sonaglioni
Daniele Sonaglioni on 19 Oct 2021
@Stephen I am aware that there are results on the Matlab Central (I have also checked them) but I have not found anything useful.
I know that before asking question one has to check on the central.

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 19 Oct 2021
For MATLAB versions R2019a and later, the readmatrix function permits definition of the 'DecimalSeparator' (see the Text Files Only documentation section, since ther is no direct link to it) as a name-value pair argument.
.
  4 Comments
Daniele Sonaglioni
Daniele Sonaglioni on 20 Oct 2021
This the kind of file I want to convert.
Star Strider
Star Strider on 20 Oct 2021
Since you stated that using readmatrix (or readtable) would disrupt your existing code, an alternative would be textscan.
The online Run feature would not let me do all this here, so I did it offline —
fidi = fopen('trial_file.txt','rt');
C = textscan(fidi, '%f%s%s%s', 'HeaderLines',10, 'CollectOutput',1, 'EndOfLine','\r\n');
fclose(fidi);
M = [C{1} str2double(strrep(C{2},',','.'))];
Check = M(1:5,:)
Check =
0 0 -19.773 -0.009783
1 0.001 -19.733 -0.015429
2 0.002 -19.655 -0.038148
3 0.003 -19.564 -0.081012
4 0.004 -19.462 -0.13152
That imports the file and coinverts it correctly so it can be used in computations.
.

Sign in to comment.

More Answers (1)

Stephen23
Stephen23 on 20 Oct 2021
Edited: Stephen23 on 20 Oct 2021
fnm = 'trial_file.txt';
opt = detectImportOptions(fnm, 'VariableNamesLine',9, 'VariableUnitsLine',10, 'DecimalSeparator',',', 'ExtraColumnsRule','ignore');
opt.DataLines = [11,Inf];
tbl = readtable(fnm, opt)
tbl = 69227×4 table
Index t Ts Value _____ _____ _______ _________ 0 0 -19.773 -0.009783 1 0.001 -19.733 -0.015429 2 0.002 -19.655 -0.038148 3 0.003 -19.564 -0.081012 4 0.004 -19.462 -0.13152 5 0.005 -19.36 -0.17076 6 0.006 -19.262 -0.19742 7 0.007 -19.161 -0.21605 8 0.008 -19.061 -0.22971 9 0.009 -18.96 -0.24071 10 0.01 -18.861 -0.24984 11 0.011 -18.76 -0.25674 12 0.012 -18.661 -0.26249 13 0.013 -18.56 -0.26758 14 0.014 -18.461 -0.27248 15 0.015 -18.36 -0.27657

Community Treasure Hunt

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

Start Hunting!