# HG changeset patch # User Lachlan Andrew # Date 1458356317 25200 # Node ID a41e48ef2b99abf14b642c70fdf5b2db7d6f518d # Parent db67dc54fa2ca7049260bc98d63c1561e0285659 textscan: Don't pad columns with ReturnOnError = 1 * textscan.cc (textscan::do_scan): Do not check for EOL at EOF if error occurs. Add BIST tests. diff -r db67dc54fa2c -r a41e48ef2b99 libinterp/corefcn/textscan.cc --- a/libinterp/corefcn/textscan.cc Fri Mar 18 17:38:38 2016 -0700 +++ b/libinterp/corefcn/textscan.cc Fri Mar 18 19:58:37 2016 -0700 @@ -1409,7 +1409,9 @@ // If file does not end in EOL, do not pad columns with NaN. bool uneven_columns = false; - if (isp.eof () || (err & 4)) + if (err & 4) + uneven_columns = true; + else if (isp.eof ()) { isp.clear (); isp.seekg (-1, std::ios_base::end); @@ -3241,7 +3243,8 @@ %! ## Check ReturnOnError %! f = tempname (); %! fid = fopen (f, "w+"); -%! fprintf (fid, "1 2 3\n4 s 6"); +%! str = "1 2 3\n4 s 6"; +%! fprintf (fid, str); %! fseek (fid, 0, "bof"); %! c = textscan (fid, "%f %f %f"); %! fseek (fid, 0, "bof"); @@ -3249,20 +3252,27 @@ %! fseek (fid, 0, "bof"); %! fclose (fid); %! unlink (f); +%! u = textscan (str, "%f %f %f"); +%! v = textscan (str, "%f %f %f", "ReturnOnError", 1); %! assert (c, {[1;4], [2;NaN], [3;6]}) %! assert (d, {[1;4], [2], [3]}) +%! assert (u, {[1;4], [2;NaN], [3;6]}) +%! assert (v, {[1;4], [2], [3]}) %!test %! ## Check ReturnOnError %! f = tempname (); %! fid = fopen (f, "w+"); -%! fprintf (fid, "1 2 3\n4 s 6\n"); +%! str = "1 2 3\n4 s 6\n"; +%! fprintf (fid, str); %! fseek (fid, 0, "bof"); %! c = textscan (fid, "%f %f %f", "ReturnOnError", 1); %! fseek (fid, 0, "bof"); %! fclose (fid); %! unlink (f); +%! u = textscan (str, "%f %f %f", "ReturnOnError", 1); %! assert (c, {[1;4], 2, 3}) +%! assert (u, {[1;4], 2, 3}) %!error textscan ("1 2 3\n4 s 6", "%f %f %f", "ReturnOnError", 0);