我是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
任何人都可以提供帮助。 此致
答案 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 discussion和documentation 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)
);
}