我的系统中有一个包含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];
读取此文件并映射到此结构数组的有效方法是什么?
如果数字条目数较少,那么我们可以使用fgets
在while
中获得正常strtok
,但此处条目数 1024 。
所以请建议一些有效的方法来完成这项任务。
答案 0 :(得分:5)
检查文件的大小,我认为是最大值。 100 KByte。这实际上没什么,即使编写得很糟糕的PHP脚本也可以在几毫秒内读取它。加载这么少量的数据没有慢的方法。
我认为,加载此文件只是第一步,真正的任务是处理此列表(搜索,过滤等)。您应该专注于处理速度,而不是优化加载速度。
过早优化是邪恶的。制作一个未经优化的代码,看看你对结果和速度是否满意。可能你永远不应该优化它。
答案 1 :(得分:0)
您可以尝试以二进制方式存储数据。现在编写文件的方式是字符方式。所以一切都表现为一个字符(数字,字符串和其他东西)。
如果您存储二进制文件,那么它意味着您按照它们的方式存储数字,字符串和其他内容,因此当您将一个整数写入文件时,您编写一个数字,当您稍后在文本编辑器中打开它时,那么您会看到字符,例如,相应的数字。 ASCII是您写入文件的那个。
您使用标准函数以二进制方式存储内容:
fopen("test.bin","wb");
w
代表写,b
代表二进制格式。写的功能是:
fwrite(&someInt, sizeof(someInt), 1, &someFile);
其中someInt是你要写的变量(函数接受指针), sizeof(someInt)是sizeof element int, 1表示元素数量,如果第一个参数是数组,someFile是文件,您要存储数据。
这样可以减小文件的大小,因此加载文件也会更快。处理文件
中的sata也更简单