【问题标题】:Parse a File with C++使用 C++ 解析文件
【发布时间】:2013-11-28 02:55:03
【问题描述】:

我创建了将执行文件的代码,然后将执行代码并将该代码存储到如下所示的 .csv 文件管理器中

#include <string>
#include <iostream>
#include <sstream>
#include <stdlib.h>
#include <fstream>
using namespace.std;

int main(){
    int foo = 10;
    for(int i =1; x<=8 x++){

      std::stringstream ss;
      ss << "echo " << foo << " | ./triad >> scaling.csv"<<'\n';
      std::cout << ss.str().c_str() <<std::endl;
      system(ss.str().c_str());

      foo=foo*10
    }
return 0;
}

三合会程序是我给定的,不能改变的。我基本上运行了 10 次迭代并将其输出打印到 scaling.csv,给我以下输出

Length:        10    MFLOP/s:    2541.29
Length:       100    MFLOP/s:    2515.85
Length:      1000    MFLOP/s:    3616.75

等等……

有谁知道如何解析该文件,所以我的 scaling.csv 看起来像这样

Key,Value
10,2541.29
100,2515.85
1000,3616.75

三合会打印出来的内容我无法更改。

【问题讨论】:

  • 为什么不一开始就这样写呢?
  • 看起来输出取决于这个“三合会”程序是什么。如果这是一个您可以更改的程序,那太好了!更改它以输出您想要的内容。但是,我怀疑这不是您可以更改的。因此,您需要解析文件并重写内容,这似乎是您的问题,并导致我问您:您尝​​试了什么?
  • 您的代码无法编译。你没有说明triad 是什么,或者它的输入格式是什么,或者你为什么要使用它。您的问题无法以目前的形式回答。
  • triad 是一个已经给我的程序,我无法更改输出。基本上,我得到了打印到 .csv 文件的输出,我需要找到一种方法来解析它

标签: c++ string file parsing ofstream


【解决方案1】:

简单:

int main()
{
     string s;
     int key; float val;
     ifstream out("out.txt");
     ofstream in("in.txt);

    in >> s;
    in >> key; // key == 10
    in >> s;
    in >> val; // val == 2541.29
}

把它放到一个函数中,你就有了:

void extract(std::istream& in, int& key, float& val)
{
    // same as above
}

int main()
{
    int key; float val;
    while (in)
    {
        extract(in, key, val);
        out << key << ", " << val << std::endl;
    }
}

但是我们正在执行输入我们检查了流。这可能会导致问题。让extract 函数返回对流的引用:

std::ios& extract(std::istream& in, int& key, float& val)
{
    // same as above
}

int main()
{
    int key; float val;
    while (extract(in, key, val))
//         ^^^^^^^^^^^^^^^^^^^^^
    {
        out << key << ", " << val << std::endl;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-27
    • 2013-05-29
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多