string output in text-file without " " (quotation notes). MATLAB BUG? comma in string effects quotation notes in .txt-file

Hi guys!
I noticed something strange in MATLAB. Maybe anybody knows this problem.
I would like to write a string-vector into a .txt-file.
If my string-vector contains a comma "," so my .txt.file begins with an quotation mark and end with one "....."
But i need a .txt-file without quotation marks, only with the strings, which maybe contains commas...
example 1 without comma in string and so without quotation marks in .txt-file:
Name1 = "Walter";
Gewicht1 = 55;
testvektor(1,1) = "Walter hat " + " / Hunger "+"";
testvektor(2,1) = "Gewicht" + ": " + Gewicht1;
fid = fopen('Textdatei.txt','wt');
writematrix(testvektor,'Textdatei.txt',"FileType","text")
fclose(fid);
Output example 1:
Walter hat / Hunger
Gewicht: 55
example 2 with comma in string and so with quotation marks in .txt-file:
Name1 = "Walter";
Gewicht1 = 55;
testvektor(1,1) = "Walter hat " + " / Hunger "+",";
testvektor(2,1) = "Gewicht" + ": " + Gewicht1;
fid = fopen('Textdatei.txt','wt');
writematrix(testvektor,'Textdatei.txt',"FileType","text")
fclose(fid);
Output example 2:
"Walter hat / Hunger "
"Gewicht: 55"
Thank you for helping guys!
Hope you know the issue!
Best regards,
Maxim

2 个评论

It is not advisable to fopen(), writematrix(), fclose(). writematrix() does not operate on a file identifier: it opens and closes the file as needed. The extra fopen() justs risks glitches, unnecessarily.

请先登录,再进行评论。

 采纳的回答

You can use "QuoteStrings","none" in your call to writematrix() to avoid writing the double-quotes in either case:
Name1 = "Walter";
Gewicht1 = 55;
testvektor(1,1) = "Walter hat " + " / Hunger "+"";
testvektor(2,1) = "Gewicht" + ": " + Gewicht1;
testvektor
testvektor = 2×1 string array
"Walter hat / Hunger " "Gewicht: 55"
writematrix(testvektor,'Textdatei.txt',"FileType","text","QuoteStrings","none")
show_file_contents('Textdatei.txt');
Walter hat / Hunger Gewicht: 55
testvektor(1,1) = "Walter hat " + " / Hunger "+",";
testvektor(2,1) = "Gewicht" + ": " + Gewicht1;
testvektor
testvektor = 2×1 string array
"Walter hat / Hunger ," "Gewicht: 55"
writematrix(testvektor,'Textdatei.txt',"FileType","text","QuoteStrings","none")
show_file_contents('Textdatei.txt');
Walter hat / Hunger , Gewicht: 55
Or you can use fprintf() instead of writematrix():
fid = fopen('Textdatei.txt','w');
fprintf(fid,'%s\n',testvektor);
fclose(fid);
show_file_contents('Textdatei.txt');
Walter hat / Hunger , Gewicht: 55
function show_file_contents(fn)
fid = fopen(fn);
data = fread(fid,'*char').';
fclose(fid);
disp(data);
end

1 个评论

Exactly. In a comma separated text file, the occurence of one comma inside the strings would create an ambiguous file. To avoid this double quotes are added as default when commas are found.
This is a smart feature, which can be confusing. This is a typical effect of applying heuristics to guess, what the users wants.

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Characters and Strings 的更多信息

产品

版本

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by