Возникли проблемы при поиске значения пустого токена для пустого значения CSV - PullRequest
1 голос
/ 14 июня 2019

Итак, я хочу создать программу на C, которая будет читать файл CSV, который может иметь некоторые пустые значения.Мне нужно, чтобы моя программа по-прежнему устанавливала токены равными пустому значению, если оно есть.Я написал этот код, так как strtok () будет просто игнорировать все пустые значения.

Программа работает, беря эту строку записи и разбивая ее на 3 токена с помощью этих проверок if.

char record[100] = "1,,3,";

        char delimiter[] = ",";
        char *token1 = 0;
        char *token2 = 0;
        char *token3 = 0;



        static char *stringtobetokened = NULL;
        char *p= 0;
        stringtobetokened = record;

        if ((p = strpbrk(stringtobetokened, delimiter)) != NULL) {
            *p = 0;
            token1 = stringtobetokened;
            stringtobetokened = ++p;
            printf("token1's value:%s\n", token1);

        }

        if ((p = strpbrk(stringtobetokened, delimiter)) != NULL) {
            *p = 0;


            token2 = stringtobetokened;
            stringtobetokened = ++p;
            printf("token2's value:%s\n", token2);
            //this is where the issue is, this if check should be triggered since token2 is a empty value which should print the statement, token2 is null
            if (token2 == NULL)
            {
                printf("token2 is null\n");
                //insert some code that changes token2's value

            }

        }
        if ((p = strpbrk(stringtobetokened, delimiter)) != NULL) {
            *p = 0;
            token3 = stringtobetokened;
            stringtobetokened = ++p;
            printf("token3's value:%s\n", token3);

        }

Моя проблема в том, что, хотя он обнаруживает, что токен 2 пуст, проверка if

if (token2 == NULL)

не срабатывает.Я хочу, чтобы проверка запускалась, чтобы я мог вставить туда некоторый код, который изменил бы его значение.

если токен 2 не равен нулю или '\ 0', тогда каково его значение ??

Вот результаты, которые я получаю, когда запускаю указанный код:

token1's value:1
token2's value:
token3's value:3
Press any key to continue . . .

1 Ответ

1 голос
/ 14 июня 2019

token2 будет указывать на строку empty, поскольку вы заменяете , на 0 в предыдущем процессе токенизации.

                      token1 ----
                                 |
                               +---+---+---+-----
 stringtobetokened      =      | 1 | 0 | 0 |........
                               +---+---+---+-----
                                         |
                               token2 ----

Замените ваш if чек на условие ниже.

 if (*token2 == '\0')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...