changeset 20477:4c4d8fe5583a stable

strread.m: properly preprocess all forms of string format specifier (bug #45712)
author Philip Nienhuis <prnienhuis@users.sf.net>
date Sun, 09 Aug 2015 23:23:15 +0200
parents 97edbce9b975
children d3f39abe119b
files scripts/io/strread.m
diffstat 1 files changed, 7 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/io/strread.m	Tue Aug 11 09:55:59 2015 -0700
+++ b/scripts/io/strread.m	Sun Aug 09 23:23:15 2015 +0200
@@ -388,7 +388,7 @@
   if (! isempty (white_spaces))
     ## For numeric fields, whitespace is always a delimiter, but not for text
     ## fields
-    if (isempty (strfind (format, "%s")))
+    if (isempty (regexp (format, '%\*?\d*s')))
       ## Add whitespace to delimiter set
       delimiter_str = unique ([white_spaces delimiter_str]);
     else
@@ -1086,3 +1086,9 @@
 ## Test for false positives in check for non-supported format specifiers
 %!test
 %! assert (strread ("Total: 32.5 % (of cm values)","Total: %f % (of cm values)"), 32.5, 1e-5);
+
+## Test various forms of string format specifiers (bug #45712)
+%!test
+%! str = "14 :1 z:2 z:3 z:5 z:11";
+%! [a, b, c, d] = strread (str, "%f %s %*s %3s %*3s %f", "delimiter", ":");
+%! assert ({a, b, c, d}, {14, {"1 z"}, {"3 z"}, 11});