* Bug 13593 fixed: csvRead() with range & header 41/21541/3
Samuel GOUGEON [Tue, 21 Jul 2020 15:25:17 +0000 (17:25 +0200)]
  http://bugzilla.scilab.org/13593

Change-Id: Ie545144dd6ee2f2159c9d6516c58cfb48ac3104f

scilab/CHANGES.md
scilab/modules/spreadsheet/sci_gateway/c/sci_csvRead.c
scilab/modules/spreadsheet/tests/nonreg_tests/bug_13593.tst [new file with mode: 0644]

index 5454265..701eba7 100644 (file)
@@ -281,6 +281,7 @@ Bug Fixes
 * [#12516](https://bugzilla.scilab.org/12516): From `browsevar`, clicking on any graphical handle did not edit its figure with `ged`.
 * [#12532](https://bugzilla.scilab.org/12532): From `browsevar`, clicking on any function did not edit it with `edit`. The content of libraries could not be displayed either.
 * [#12889](https://bugzilla.scilab.org/12889): In the help browser, add a menu allowing to select the language of help pages, regardless of the language of the session.
+* [#13593](https://bugzilla.scilab.org/13593): `csvRead()` did not take the `range` into account when `header` is provided. `[]` could not be used as default `range`.
 * [#14873](https://bugzilla.scilab.org/14873): `setfield` page: The output and the 6.0 history were documented only on the en_US version. The input was wrongly restricted to matrices, while any Scilab object is acceptable. The specific role of `setfield` for mlists was not really described nor illustrated. The example did not include any call to setfield.
 * [#15280](https://bugzilla.scilab.org/15280): `gsort` was unable to sort any hypermatrix along dimensions > "r"|"c".
 * [#15839](https://bugzilla.scilab.org/15839): `gsort`: the only sparse possible input were real or complex vectors, and only with the `g` method.
index 51da1fd..b48c8a2 100644 (file)
@@ -77,7 +77,7 @@ int sci_csvRead(char *fname, void* pvApiCtx)
         }
     }
 
-    if (Rhs == 7)
+    if (Rhs >= 7)
     {
         int m7 = 0, n7 = 0;
 
@@ -87,30 +87,32 @@ int sci_csvRead(char *fname, void* pvApiCtx)
             freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
             return 0;
         }
-
-        if ((m7 * n7 != SIZE_RANGE_SUPPORTED) )
+        if (m7 > 0 && n7 > 0)
         {
-            freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
-            Scierror(999, _("%s: Wrong size for input argument #%d: Four entries expected.\n"), fname, 7);
-            return 0;
-        }
+            if ((m7 * n7 != SIZE_RANGE_SUPPORTED) )
+            {
+                freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
+                Scierror(999, _("%s: Wrong size for input argument #%d: Four entries expected.\n"), fname, 7);
+                return 0;
+            }
 
-        if ((m7 != 1) && (n7 != 1))
-        {
-            freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
-            Scierror(999, _("%s: Wrong size for input argument #%d: A column or row vector expected.\n"), fname, 7);
-            return 0;
-        }
+            if ((m7 != 1) && (n7 != 1))
+            {
+                freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
+                Scierror(999, _("%s: Wrong size for input argument #%d: A column or row vector expected.\n"), fname, 7);
+                return 0;
+            }
 
-        if (isValidRange(iRange, m7 * n7))
-        {
-            haveRange = 1;
-        }
-        else
-        {
-            freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
-            Scierror(999, _("%s: Wrong value for input argument #%d: Inconsistent range.\n"), fname, 7);
-            return 0;
+            if (isValidRange(iRange, m7 * n7))
+            {
+                haveRange = 1;
+            }
+            else
+            {
+                freeVar(&filename, &separator, &decimal, &conversion, &iRange, &toreplace, 0, &regexp);
+                Scierror(999, _("%s: Wrong value for input argument #%d: Inconsistent range.\n"), fname, 7);
+                return 0;
+            }
         }
     }
 
diff --git a/scilab/modules/spreadsheet/tests/nonreg_tests/bug_13593.tst b/scilab/modules/spreadsheet/tests/nonreg_tests/bug_13593.tst
new file mode 100644 (file)
index 0000000..c30d188
--- /dev/null
@@ -0,0 +1,35 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2020 - Samuel GOUGEON
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+//
+// <-- CLI SHELL MODE -->
+// <-- NO CHECK REF -->
+//
+// <-- Non-regression test for bug 13593 -->
+//
+// <-- Bugzilla URL -->
+// http://bugzilla.scilab.org/13593
+//
+// <-- Short Description -->
+// csvRead() did not use the given range when the header input is provided.
+// [] could be rejected as default range.
+
+
+File = tempname();
+m = matrix(1:20, 5, -1);
+csvWrite(m, File);
+
+r = csvRead(File,[],[],"double",[],[],[3 2 4 3]);
+assert_checkequal(r, [8 13 ; 9 14]);
+
+r = csvRead(File,[],[],"double",[],[],[], 3);
+assert_checkequal(r, [4 9 14 19 ; 5 10 15 20]);
+
+r = csvRead(File,[],[],"double",[],[],[]);
+assert_checkequal(r, m);
+
+r = csvRead(File,[],[],"double",[],[],[2 2 3 3],1);
+assert_checkequal(r, [8 13 ; 9 14]);