Dear all,
I thought I acquired some Matlab knowledge over the years. But textscan really makes me feel dumb. I can not figure out the syntax to read a quoted text file.
Let's say I have a text file with the following format:
"L1: quoted text, with commas","111.111",123\n "L2: quoted text, with commas","222.222",234\n ...
(the field width are the same just for the example; consider them variable in the real world).
Now my understanding of textscan's formatSpec would be:
format = '%q,"%f",%f';delim = '\n';res = textscan(fileId,format,'Delimiter',delim,'ReturnOnError',false);
This is because I am assuming that %q considers everything between two quotes as part of the same string, as the help states
"If the string begins with a double quotation mark ("), omit the leading quotation mark and its accompanying closing mark, which is the second instance of a lone double quotation mark"
However this fails with the ominous error message:
Error using textscan Mismatch between file and format string. Trouble reading 'Literal' field from file (row number 1, field number 2) ==> "L2: quoted text, with commas","222.222",234\n
So the commas in the quoted string somehow screw-up the parsing, since using the regexp-like
format = '"%[^"]","%f",%f';
instead of %q works perfectly fine.
So my questions are:
- What am I doing wrong?
- Why is there the %q option if it does not treat everything in between as string (as this would than simply be a shorthand for "%s")?
- Am I using the delimiter option correctly?
Any help appreciated!
Greetings, David
Best Answer