* define => uppercase 50/9050/2
Sylvestre Ledru [Tue, 18 Sep 2012 13:30:11 +0000 (15:30 +0200)]
* rename splitLine => splitLineCSV because it is already defines in fileio

Change-Id: Ia7c5b2ba387aaf2bc7d48491c41265b7d29c7175

scilab/modules/spreadsheet/src/cpp/csvRead.c
scilab/modules/spreadsheet/src/cpp/splitLine.c
scilab/modules/spreadsheet/src/cpp/splitLine.h

index 7a04cff..ed9e52a 100644 (file)
@@ -350,14 +350,15 @@ static int getNumbersOfColumnsInLines(const char **lines, int sizelines,
             }
             else
             {
-                if (previousNbColumns != NbColumns)
+                if (previousNbColumns < NbColumns)
                 {
+                    previousNbColumns = NbColumns;
                     return 0;
                 }
             }
         }
     }
-    return NbColumns;
+    return previousNbColumns;
 }
 // =============================================================================
 static int getNumbersOfColumnsInLine(const char *line, const char *separator)
@@ -366,7 +367,7 @@ static int getNumbersOfColumnsInLine(const char *line, const char *separator)
     {
         int i = 0;
         int nbTokens = 0;
-        char **splittedStr = splitLine(line, separator, &nbTokens, 0);
+        char **splittedStr = splitLineCSV(line, separator, &nbTokens, 0);
         if (splittedStr)
         {
             if (nbTokens > 0)
@@ -411,7 +412,7 @@ static char **getStringsFromLines(const char **lines, int sizelines,
         for (i = 0; i < sizelines; i++)
         {
             int nbTokens = 0;
-            char **lineStrings = splitLine(lines[i], separator, &nbTokens, 0);
+            char **lineStrings = splitLineCSV(lines[i], separator, &nbTokens, 0);
             int j = 0;
 
             if (lineStrings)
@@ -433,13 +434,19 @@ static char **getStringsFromLines(const char **lines, int sizelines,
 
             if (m != nbTokens)
             {
-                freeArrayOfString(results, m * n);
+                //                freeArrayOfString(results, nbTokens * n);
                 FREE(lineStrings);
-                return NULL;
+                //                return NULL;
             }
 
             for (j = 0; j < m; j++)
             {
+                if (j > nbTokens)
+                {
+                    printf("Bourrage à la position %d\n", j);
+                    results[i + n * j] = "42";
+                }
+
                 if (decimal)
                 {
                     results[i + n * j] = strdup(lineStrings[j]);
@@ -449,9 +456,9 @@ static char **getStringsFromLines(const char **lines, int sizelines,
                     results[i + n * j] = csv_strsubst(lineStrings[j], decimal, getCsvDefaultDecimal());
                 }
 
-                if (lineStrings[j])
+                if (lineStrings[j] && j <= nbTokens)
                 {
-                    FREE(lineStrings[j]);
+                    //                    FREE(lineStrings[j]);
                     lineStrings[j] = NULL;
                 }
             }
index d40b8c4..a48c5d0 100644 (file)
@@ -15,9 +15,9 @@
 #include "csv_strsubst.h"
 #include "MALLOC.h"
 /* ==================================================================== */
-char **splitLine(const char *str, const char *sep, int *toks, char meta)
+char **splitLineCSV(const char *str, const char *sep, int *toks, char meta)
 {
-#define emptyfield "__EMPTY_FIELD_CSV__"
+#define EMPTYFIELD "__EMPTY_FIELD_CSV__"
     char **retstr = NULL;
     const char *idx = NULL;
     const char *end = NULL;
@@ -32,14 +32,14 @@ char **splitLine(const char *str, const char *sep, int *toks, char meta)
     char *substitutedstring = NULL;
 
     sprintf(tokenstring_to_search, "%s%s", sep, sep);
-    sprintf(tokenreplacement_string, "%s%s%s", sep, emptyfield, sep);
+    sprintf(tokenreplacement_string, "%s%s%s", sep, EMPTYFIELD, sep);
     substitutedstring = csv_strsubst(str, tokenstring_to_search, tokenreplacement_string);
     if (strncmp(substitutedstring, sep, strlen(sep)) == 0)
     {
         char *tmp = NULL;
-        size_t l = strlen(substitutedstring) + strlen(emptyfield) + strlen(sep) + 1;
+        size_t l = strlen(substitutedstring) + strlen(EMPTYFIELD) + strlen(sep) + 1;
         tmp = (char*)MALLOC(sizeof(char) * l);
-        sprintf(tmp, "%s%s%s", emptyfield, sep, &substitutedstring[1]);
+        sprintf(tmp, "%s%s%s", EMPTYFIELD, sep, &substitutedstring[1]);
         FREE(substitutedstring);
         substitutedstring = tmp;
     }
@@ -47,9 +47,9 @@ char **splitLine(const char *str, const char *sep, int *toks, char meta)
     if (substitutedstring[strlen(substitutedstring) - 1] == sep[0])
     {
         char *tmp = NULL;
-        size_t l = strlen(substitutedstring) + strlen(emptyfield) + 1;
+        size_t l = strlen(substitutedstring) + strlen(EMPTYFIELD) + 1;
         tmp = (char*)MALLOC(sizeof(char) * l);
-        sprintf(tmp, "%s%s", substitutedstring, emptyfield);
+        sprintf(tmp, "%s%s", substitutedstring, EMPTYFIELD);
         FREE(substitutedstring);
         substitutedstring = tmp;
 
@@ -99,7 +99,7 @@ char **splitLine(const char *str, const char *sep, int *toks, char meta)
                         }
                         memcpy(retstr[curr_str], (idx - len), len);
                         retstr[curr_str][len] = 0;
-                        if (strcmp(retstr[curr_str], emptyfield) == 0)
+                        if (strcmp(retstr[curr_str], EMPTYFIELD) == 0)
                         {
                             strcpy(retstr[curr_str], "");
                         }
@@ -154,7 +154,7 @@ char **splitLine(const char *str, const char *sep, int *toks, char meta)
 
         memcpy(retstr[curr_str], (idx - len), len);
         retstr[curr_str][len] = 0;
-        if (strcmp(retstr[curr_str], emptyfield) == 0)
+        if (strcmp(retstr[curr_str], EMPTYFIELD) == 0)
         {
             strcpy(retstr[curr_str], "");
         }
index 787a391..879b541 100644 (file)
@@ -19,7 +19,7 @@ extern "C" {
     /**
     * split a line by separator
     */
-    char **splitLine(const char *str, const char *sep, int *toks, char meta);
+    char **splitLineCSV(const char *str, const char *sep, int *toks, char meta);
 
 #ifdef __cplusplus
 }