【问题标题】:Accesing two different rows simultaneously in C在C中同时访问两个不同的行
【发布时间】: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


【解决方案1】:

当您阅读数据(例如,存储在标准文件中)时,通过查找行分隔符(换行符)来获取行的字节偏移量。然后,您可以在FILE *fseek() 上使用C 指针算法根据开始和结束字节偏移量读出行。存储几个字节的偏移量(通常是一个 8 字节的 long 或等价物)很便宜。

【讨论】:

  • 抱歉,Alex,我无法理解这项技术。你能详细说明一下吗? (我还是一个知识很少的菜鸟)
  • 如果您的数据表存储在文件中,请在文件中查找换行符(假设这是您平台上的行分隔符)并将偏移量存储在数组中。当您想要行N 时,您检索起始偏移量N 和结束偏移量N+1 并用fseek() 读出这些偏移量之间的字节。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 2013-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多