0

我创建了将执行文件的代码,然后将执行代码并将该代码存储到 .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

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

4

1 回答 1

0

简单的:

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;
    }
}
于 2013-11-15T00:25:21.267 回答