用数据读取文件

时间:2009-07-30 19:50:49

标签: c++

我是c ++编程的新手。我试图读取文件中的数据,其内容如下:

AS G02  2009 01 30 00 00  0.000000  2    1.593749310156e-04  4.717165038980e-11
AS G03  2009 01 30 00 00  0.000000  2    3.458468649886e-04  4.542246790350e-11
AS G04  2009 01 30 00 00  0.000000  2   -3.176765824224e-04  2.733827659950e-11
AS G05  2009 01 30 00 00  0.000000  2   -6.126657874204e-04  3.269050090460e-11

然后我会将此数据写入输出文件以便稍后处理。输出应该是这样的:

02  2009 01 30 00 00  0.000000  2    1.593749310156e-04  4.717165038980e-11
03  2009 01 30 00 00  0.000000  2    3.458468649886e-04  4.542246790350e-11
04  2009 01 30 00 00  0.000000  2   -3.176765824224e-04  2.733827659950e-11
05  2009 01 30 00 00  0.000000  2   -6.126657874204e-04  3.269050090460e-11

任何人都可以提供帮助。 此致

4 个答案:

答案 0 :(得分:3)

假设您需要在C ++中执行此操作(awk会更容易),那么您需要了解iostreams。

#include <iostream>
#include <sstream>
#include <fstream>

int main()
{
  std::ifstream input("file.txt");
  std::stringstream sstr;
  std::string line;

  while(getline(input,line)) {
     if (line.length() > 4) {
         std::cout << line.substr(4);  // Print from the 4th character to the end.
     }
  }
}

默认情况下,getline会读取输入,直到它到达行尾。你也可以让它读取输入,直到它获得一个特定的字符,例如空格或逗号与getline(流,字符串,分隔符)。通过这种方式,您可以一次读取一行,并处理各个值。

PS。什么时候才能获得智能感知?

答案 1 :(得分:1)

逐行读取文件,并用空字符串替换“AS G”。很常见,如果你自己尝试这样做会更有趣(不要提到你会以这种方式学到更多)。

例如代码和您需要的基础知识,请查看at this discussiondocumentation of string replace

答案 2 :(得分:1)

你需要使用C ++吗?如果没有,那么Perl或任何其他类似的工具/语言会更容易(我是一名C ++开发人员)

答案 3 :(得分:1)

我更喜欢上面的“mgb”答案 但只是为了好玩:

#include <fstream>
#include <iostream>
#include <iterator>
#include <algorithm>

struct Line
{
    std::string line;
};
std::ostream& operator<<(std::ostream& str,Line const& data) {return str << data.line << "\n";}
std::istream& operator>>(std::istream& str,Line&       data) {return std::getline(str,data.line);}

template<std::string::size_type Start>
struct ShortLine: public Line
{
    ShortLine(Line const& value)
    {
        // Note you need to check Start is in the correct rangs.
        line    = value.line.substr(std::min(Start,value.line.size()));
    }
};

int main()
{
    std::fstream    file("Plop");

    std::copy(  std::istream_iterator<Line>(file),
                std::istream_iterator<Line>(),
                std::ostream_iterator<ShortLine<4> >(std::cout)
            );

}