在c ++中用fscanf替代更快的方法?

我使用
fprintf("%ft%ft%ft%ft%ft%fn",p1,p2,p3,p4,p5,p6);
将数据存储在文本文件中 有100,000个条目,当我用它们阅读时
while(!EOF)
  fscanf("%f %f %f %f %f %f "&p1,&p2,&p3,&p4,&p5,&p6);
它花了很长时间。 有什么建议以更快的速度阅读? 提前致谢。     
已邀请:
将它们读入字符串缓冲区然后解析字符串 - 如果你坚持使用'c',请参阅fgets()和sscanf()     
尝试使用boost.spirit。     
你应该使用
fstream
。在对象中创建一个
fstream
,如
fin
,然后以与使用
cin
相同的方式输入文件的数据信息。您可以使用
iomanip
库进行更好的格式化。     
fscanf如此慢的原因主要是因为从硬盘驱动器中获取内存很慢。使用您发布的代码,从文件中提取一行文本,然后使用您提供的格式进行解析。这导致一次大量获取文件的小块。这是低效的。 与任何其他类型的内存提取操作一样,该解决方案是在给定时间获取更大的块,然后对检索到的块进行操作。换句话说,您应该将文件的整个内容转储到RAM中,然后进行处理。为此,您可以使用字符串流。基本上,将整个文件读入字符串流将导致从硬盘驱动器中检索内存的次数减少(理论上,它只会在一次操作中传输整个文件)。然后,stringstream可以像任何其他输入流一样使用。 实际上,找到一种避免在任何时间关键或CPU密集型过程中进行任何文件I / O的方法可能会更加合理。要么在之前或之后做,要尽量不要在循环中间做。例如,如果将所有数据加载到数组/向量中,然后处理数组/向量,则不再需要花费多少时间从文件加载数据,因为在开始任何时间关键处理之前这样做了的数据。 PS:因为你使用fscanf(),我猜你可能正在寻找一种C风格的解决方案,而不是像fstream和stringstream这样的C ++标准库。对不起,我不能给你任何暗示,想要坚持使用C函数是我很久以前克服过的一个问题,希望你也能做到或者很快就会这样做。     

要回复问题请先登录注册