2009-07-30 13 views
0

私は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

出力フォーマットの仕様は何ですか?空白、スペース、タブ? – Tim

+0

これは宿題によく似ています。 – JohnFx

答えて

1

ファイルを1行ずつ読み込み、 "AS G"を空の文字列に置き換えてください。一般的に、自分でやろうとするともっと楽しくなります(このようにもっと学ぶことは言及していません)。

例コードとこれに必要な基本情報は、at this discussiondocumentation of string replaceです。

+0

私はOPが基本入出力を行う方法を知っているとは思わない。 –

1

C++を使用する必要がありますか?もしそうでなければ、Perlや他の同様のツール/言語がもっと簡単になります(そして私はC++開発者です)。

+0

Perlはこの解決策+1には良いですが、C++はもっと楽しいことができます:-) –

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(stream、string、delimiter)でスペースやカンマなどの特定の文字を取得するまで、入力を読み取らせることもできます。このようにして、一度に1行ずつ単語を読み取り、個々の値を処理することができます。

ps。いつそれがインテリセンスを得るつもりですか?

+0

「入力>> sstr」では1行ではなく1つのフィールドが得られますか? –

+0

おっと、申し訳ありませんがgetlineを使って例を変更していました –

+0

はるかに良い、そして今非常に良い答えです。 –

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) 
      ); 

} 
関連する問題