2016-08-26 9 views
0

タブ区切りテキストファイルを処理しています。 getlineを使用して各行を取得し、タブに従って解析し、後で操作できるように配列に配置します。たまには、テキストファイルにデータが入力されているため、空の行か、ASCII以外の行しかない行があります。そして、私は手動でファイルを修正することができますし、行うことができますが、行にタブが含まれているときにタブ区切りテキストファイルを処理する

私は自分のプログラムでデータを処理しようとしました。 substr.empty()を使用すると、空行を処理して、行を無視することができます。行のタブは行を空にしません。私はそれを取得し、substr.emptyにエラーを引き起こします。 substr.beginを使用すると、タブを持つことができますが、タブを使って行を無視することはできません。代わりに私はちょうどエラーを通過し、出力ファイルにエラーを出力して、エラーが発生していることを知らせます。

私は両方の機能を共存させることはできません。私は欠けている何か基本的なものがあると確信しています。私はこれを1ヶ月以上も使っていない(私は毎日プログラムしていません)と思っています。だから私はなぜ私はちょうどif文の空の関数を使って.beginまたはbooleanを投げることができないのか探しています。なぜ私はラインを無視するために.beginを得ることができないのですか?

は、ここに私のコードです:

ofstream file_; 
ifstream file2_("forecasttest.txt"); 
if (file2_.is_open()) 
while (file2_.good()) { 
    string substr; 
    getline(file2_, substr); 
    string::iterator substr2 = substr.begin(); 
    //if (*substr2 == '\t') { 
     // file_.open("chaz_file.txt"); 
     // if (file_.is_open()) 
     // file_ << "you have bad data - a line that starts with a tab" << endl; 
     // file_.close(); 
     // return 0; 
    //} 
    Input_Rows++; 
    if (substr.empty()) { //|| (*substr2 == '\t') 
     Input_Rows--; 
    } 
    else { 
     istringstream iss(substr); 
     cout << substr << endl; 
     string token; 
     while (getline(iss, token, '\t')){ 
      vec_Forecast_Data_.push_back(token); 
     } 
    } 
} 

答えて

0

あなたのコードのような何かを行うに(むしろ「言う」より)「欲しい」のようです:ラインのみ空やタブの場合

を、ログその行をスキップして入力を続ける

空白(空白/タブのみ)の検出は、次のような機能を持つ可能性があります。

bool checkAllSpacesLine(const std::string& s) { 
    size_t p, len=s.length(); // decrementing p will underflow to 
          // greater than len once it reaches 0 
    for(p=len-1; p<len && isspace(s[p]);p--); 
    return p>len; // p underflow, all chars were spaces 
} 
+0

はありがとうございます。私はこれを試してみましょう。昨夜、タブセクションをelse ifステートメントに入れるだけで、アプローチを少し変えました。 2つのステップのアプローチが働いた。私は私のアプローチを単純化しようとし続けます。 – wiseass

0

substrはどちらかである空またはタブのみが含まれているかどうかを確認するために使用、これを:

if (substr.find_first_not_of('\t') == std::string::npos) 
関連する問題