How to use textscan with empty char fields
5 views (last 30 days)
Show older comments
Joan Vazquez
on 18 Nov 2021
Commented: Joan Vazquez
on 22 Nov 2021
How can I use textscan with files that include these kind of lines, with empty chars?
m1 = 'HELLO,42.53,A,B,1,C'; % Only this works fine
m2 = 'HELLO,42.53,A,,1,C';
m3 = 'HELLO,42.53,A,B,1,';
m4 = 'HELLO,42.53,,,1,C';
pattern = 'HELLO%f%c%c%f%c';
delimiter = ',';
[C1, pos1] = textscan(m1, pattern, 'Delimiter', delimiter)
[C2, pos2] = textscan(m2, pattern, 'Delimiter', delimiter)
[C3, pos3] = textscan(m3, pattern, 'Delimiter', delimiter)
[C4, pos4] = textscan(m4, pattern, 'Delimiter', delimiter)
1 Comment
Adam Danz
on 18 Nov 2021
Since this doesn't answer the question, How can I use textscan ..., I'll leave a comment rather than an answer.
A workaround is to use strsplit and then some post-processing to convert chars to numbers.
m1 = 'HELLO,42.53,A,B,1,C';
m2 = 'HELLO,42.53,A,,1,C';
m3 = 'HELLO,42.53,A,B,1,';
m4 = 'HELLO,42.53,,,1,C';
cleanStrFcn = @(s)[str2double(s{2}),s(3:end)];
s1 = cleanStrFcn(strsplit(m1,',','CollapseDelimiters',false))
s2 = cleanStrFcn(strsplit(m2,',','CollapseDelimiters',false))
s3 = cleanStrFcn(strsplit(m3,',','CollapseDelimiters',false))
s4 = cleanStrFcn(strsplit(m4,',','CollapseDelimiters',false))
Accepted Answer
Jeremy Hughes
on 18 Nov 2021
The format specifier %c always reads one character, no matter what that character is. What you likely want it %s, which reads all the characters up to the next matching delimiter.
2 Comments
Stephen23
on 18 Nov 2021
str = sprintf('%s\n', 'HELLO,42.53,A,B,1,C', 'HELLO,42.53,A,,1,C', 'HELLO,42.53,A,B,1,', 'HELLO,42.53,,,1,C')
out = textscan(str, 'HELLO,%f%s%s%f%s', 'Delimiter',',');
out{:}
More Answers (0)
See Also
Categories
Find more on Text Files in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!