c - 如何从文本文件中的制表符分隔字段中正确获取数据

标签 c file-io io

我正在尝试学习如何从文本文件中的制表符分隔字段导入数据。这是我试图从名为 users.in 的外部文件中获取的内容的示例:

1   joshmith    mypwd   John    Smith   Awesome Road 103
2   jane_doe    strongpwd   Jane    Doe Lucky Street 201
3   august84    goodpwd August May  Red Boulevard 24    

这是应该保存数据的结构...

typedef struct User
{
    int id;
    char username[20];
    char password[40];
    char firstname[20];
    char lastname[20];
    char address[120];
} User;

...当然还有应该处理该操作的代码:

User *u = (User *)malloc(sizeof(User)*4);
int i = 0;

    while (6 == fscanf(data_file, "%d\t%[^\t]\t%[^\t]\t%[^\t]\t%[^\t]\t%[^\t]\n", &(u+i)->id, (u+i)->username, (u+i)->password, (u+i)->firstname, (u+i)->lastname, (u+i)->address))
    {
        fprintf(stdout, "%d %s %s %s %s %s\n", (u+i)->id, (u+i)->username, (u+i)->password, (u+i)->firstname, (u+i)->lastname, (u+i)->address);
        i++;
    }

循环成功地完成了第一次迭代……然后它停止了。这是输出:

1 joshmith mypwd John Smith Awesome Road 103
2

谁能帮我弄清楚为什么会这样?导入此类格式化数据的正确方法是什么?

最佳答案

我会使用 fgets将每一行读入一个字符串,然后使用 strtok\t 作为分隔符来提取标记;每行中的第一个标记可以使用 atoi 转换为数字.

注意:使用 atoi() 意味着无效数字将作为 zaero 值返回,因此您无法在没有额外逻辑的情况下区分它们

关于c - 如何从文本文件中的制表符分隔字段中正确获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24283521/

相关文章:

c - 部分正弦数据拟合代码 C

c# - C sharp系统IO保存文本文件问题

java - 安全可靠地提供子文件夹中的文件资源内容

java - 有没有一种简洁的方法可以在 Google Guava 中为 InputStream 创建 InputSupplier?

c++ - 增加 cout 的缓冲区

c++ - 自定义输入流。流缓冲区和下溢方法

c - 如何使用 FILE 来理解给定的代码?

将 volatile int 转换为 int8_t 进行输出

c - 如何使用C获取目录中最旧的文件?

php - 无法在php中打开文件