【发布时间】:2014-12-02 04:53:58
【问题描述】:
假设我有一个按以下方式排列的数据集
19 10 1 1
12 15 1 1
13 12 4 5
10 5 2 3
...
以此类推,在 for 循环中的特定迭代中,我必须只读取第 1 行和第 4 行,而在下一次迭代中,我必须访问其他一些行集,例如
1st iteration:
1st row: 19 10 1 1
4th row: 10 5 2 3
我将使用 fscanf() 函数访问我的数据。但是我如何确保在给定的迭代中只选择第一行和第四行或任何两行?
(由于数据集的大小为 10^8,我没有考虑将其读入二维数组)
谢谢。
【问题讨论】:
-
将您的输入读入二维数组,然后访问任何您想要的地方。你被什么困住了?
-
我不想这样做,因为我的数据集大小是 10^8,所以它变得非常慢。
-
如果您希望能够访问“给定迭代中的任意两行”,那么您必须将其存储在某个地方。 10^8 并没有你想象的那么大。从文件而不是内存中读取肯定会慢得多。
-
如果每一行的字符数相同(称为
N),那么您可以只fseek(fp, N*row, SEEK_SET)得到一行,然后fscanf该行。如果每一行的字符数不同,我建议使每一行都相同,否则除了一些复杂的扫描和记住行偏移之外,没有好的方法可以随机访问您的文件。 -
这与我发布的答案相同。
标签: c rows simultaneous