具有空 (SQL NULL) 值的 fscanf 操作

fscanf operation with empty (SQL NULL) values

提问人:Александр Попов 提问时间:9/2/2023 更新时间:9/2/2023 访问量:32

问:

我正在阅读一个带有 fscanf 的制表符分隔的 csv 文件。

该文件是从 SQL 数据库中获取的,其中某些列为 NULL。因此,有些地方在选项卡之间没有 csv 中的任何内容,然后 fscanf 误入歧途并错误地生成格式化的记录。

有没有一种优雅的方法来检查格式化条目中的缺失值?

struct Path {
    unsigned int objectId, parentObjectId, changeId, prevId, nextId;
    unsigned short regionCode, areaCode, cityCode, placeCode, planCode, streetCode;
    char updateDate[10], startDate[10], endDate[10];
    bool isActive;
    char path[300];
}

while (!feof(ah))
{
    path = (struct Path*) malloc(sizeof(struct Path));
    fscanf(ah, "%u  %u  %u  %u  %u  %u  %u  %u  %u  %u  %u  %s  %s  %s  %u  %s", 
        &path->objectId, &path->parentObjectId, &path->changeId, 
        &path->regionCode, &path->areaCode, &path->cityCode, &path->placeCode, &path->planCode, &path->streetCode,
        &path->prevId, &path->nextId,
        &path->updateDate, &path->startDate, &path->endDate,
        &path->isActive, &path->path);
    free(path);
}
fclose(ah);
c 扫描 readfile

评论

4赞 Some programmer dude 9/2/2023
请阅读 为什么 “while( !feof(file) )” 总是错的?
5赞 Some programmer dude 9/2/2023
至于您的问题,请尝试获取一个库来为您处理CSV文件。这些文件可能看起来很容易处理,但后来出现了这样的事情,突然间一切都变得更加困难。这并不是此类文件的唯一非平凡案例!
2赞 John Bollinger 9/3/2023
fscanf不太适合您的目的。(有人说它不适合任何目的。当使用空格时,它会使用任意运行的空格 - 例如,成对的连续制表符。此外,它大多不区分空格、制表符、换行符和其他空格字符。获取第三方解析器,或者编写自己的解析器,而无需依赖 .fscanffscanf

答: 暂无答案