将文件映射到结构数组的有效方法是什么?

时间:2015-09-14 14:21:59

标签: c arrays file memory

我的系统中有一个包含1024行的文件,

student_db.txt

    Name   Subject-1  Subject-2  Subject-3
    -----  ---------  ---------  ---------
    Alex     98         90         80
    Bob      87         95         73
    Mark     90         83         92
    ....     ..         ..         ..
    ....     ..         ..         ..

我的C代码中有一个数组结构,

typedef struct
{
  char name[10];
  int  sub1;
  int  sub2;
  int  sub3;
} student_db;

student_db  stud_db[1024];

读取此文件并映射到此结构数组的有效方法是什么?

如果数字条目数较少,那么我们可以使用fgetswhile中获得正常strtok,但此处条目数 1024

所以请建议一些有效的方法来完成这项任务。

2 个答案:

答案 0 :(得分:5)

  1. 检查文件的大小,我认为是最大值。 100 KByte。这实际上没什么,即使编写得很糟糕的PHP脚本也可以在几毫秒内读取它。加载这么少量的数据没有慢的方法。

  2. 我认为,加载此文件只是第一步,真正的任务是处理此列表(搜索,过滤等)。您应该专注于处理速度,而不是优化加载速度。

  3. 过早优化是邪恶的。制作一个未经优化的代码,看看你对结果和速度是否满意。可能你永远不应该优化它。

答案 1 :(得分:0)

您可以尝试以二进制方式存储数据。现在编写文件的方式是字符方式。所以一切都表现为一个字符(数字,字符串和其他东西)。

如果您存储二进制文件,那么它意味着您按照它们的方式存储数字,字符串和其他内容,因此当您将一个整数写入文件时,您编写一个数字,当您稍后在文本编辑器中打开它时,那么您会看到字符,例如,相应的数字。 ASCII是您写入文件的那个。

您使用标准函数以二进制方式存储内容:

fopen("test.bin","wb");

w代表写,b代表二进制格式。写的功能是:

fwrite(&someInt, sizeof(someInt), 1, &someFile);

其中someInt是你要写的变量(函数接受指针), sizeof(someInt)是sizeof element int, 1表示元素数量,如果第一个参数是数组,someFile是文件,您要存储数据。

这样可以减小文件的大小,因此加载文件也会更快。处理文件

中的sata也更简单