2017-12-13 35 views
0

これは私のコードです。クラスに保存しなければならない行を読み込んでいて、次の行の値を格納しています。コードの誤り。それを修正するのを手伝ってください。タスクは、文を持つ行をスキップし、データを持つ行を読み込み、それをクラス変数に格納することです。ファイルを読み込んでいるときにエラーが発生しました。代替データを格納している間にエラーが発生しました。

#include <stdio.h> 
#include <iostream> 
#include <fstream> 
#include <sstream> 
#include <stack> 
#include <string> 

using namespace std; 

class data_Read 
{ 
public: 
    /* timestamp */ 
    double time; 

    /*state of the signal 1 or 2*/ 
    unsigned int state; 

    /*ID in hexadecimal and converted to decimal*/ 
    std::string ID; 

    /* Received or transmitted message */ 
    std::string status; 

    /* Message type */ 
    std::string type; 

    /* byte length */ 
    unsigned int byte_lent; 

    /* CAN Message */ 
    std::string message_1; 
    std::string message_2; 
    std::string message_3; 
    std::string message_4; 
    std::string message_5; 
    std::string message_6; 
    std::string message_7; 
    std::string message_8; 

    std::string type1; 
    std::string type2; 
    std::string type3; 
    std::string type4; 
    std::string type5; 
    std::string type6; 
    std::string type7; 
    std::string type8; 
    std::string type9; 

}; 

int main() 
{ 

    std::ifstream ifs("datatrace.txt"); 
    data_Read data; 
    std::string line; 

    while (!ifs.eof()) 
    { 

    start: 
     std::getline(ifs, line); 

     std::cout << line << std::endl; 


     if (!isspace(line[0])) 
     { 
      goto start; 
     } 
     std::size_t space = line.find(" ", 0); 
     if (space == 0) 
     { 
      int i; 
      for (i = 0; i <= 15; i++) 
      { 
       if (isalpha(line[i])) 
       { 
        goto start; 
       } 
      } 


        ifs >> data.time >> data.state >> data.ID >> data.status >> data.type >> data.byte_lent >> data.CAN_message_1 >> data.CAN_message_2 >> data.CAN_message_3 >> data.CAN_message_4 >> data.CAN_message_5 >> data.CAN_message_6; 
    ifs >> data.CAN_message_7 >> data.CAN_message_8 >> data.type1 >> data.type2 >> data.type3 >> data.type4 >> data.type5 >> data.type6 >> data.type7>> data.type8 >> data.type9; 
    cout << data.time << "\t" << data.state << "\t" << data.ID << "\t" << data.status << "\t" << data.type << "\t" << data.byte_lent << "\t" << data.CAN_message_1 << "\t" << data.CAN_message_2 << "\t" << data.CAN_message_3 << "\t"; 
    cout << data.CAN_message_4 << "\t"<< data.CAN_message_5 << "\t"<< data.CAN_message_6 << "\t" << data.CAN_message_7 << "\t"<< data.CAN_message_8 << "\t"<< data.type1 << "\t"<< data.type2 << "\t"<< data.type3 << "\t"<< data.type4 << "\t"<< data.type5 << "\t" << data.type6 << "\t"<< data.type7 << "\t"<< data.type8 << "\t"<< data.type9 << endl;   
     } 
    } 
    ifs.close(); 
    return 0; 
} 

やテキストファイル `while`ループ内goto`

date Fri Sep 1 02:11:40.195 pm 2017 
base hex timestamps absolute 
internal events logged 
// version 9.0.0 
Begin Triggerblock Fri Sep 1 02:11:40.195 pm 2017 
    0.000000 Start of measurement 
    0.002893 1 201    Rx d 8 06 0D 00 B0 89 00 0D E7 Length = 227925 BitCount = 118 ID = 513 
    0.003133 1 280    Rx d 8 1B 0C 7C F1 E8 75 39 67 Length = 221910 BitCount = 115 ID = 640 
    0.006981 CAN 1 Status:chip status error active 
    0.006981 CAN 2 Status:chip status error active 
    0.007123 1 244    Rx d 8 7B 01 00 08 80 80 C0 00 Length = 233925 BitCount = 121 ID = 580 
    0.007148 2 B2    Rx d 8 C0 13 9A 13 D8 13 C0 13 Length = 221910 BitCount = 115 ID = 178 
    0.007359 1 246    Rx d 8 55 01 00 49 50 B6 7A 89 Length = 217925 BitCount = 113 ID = 582 
    0.007394 2 86    Rx d 8 62 00 2A 20 01 84 02 00 Length = 225925 BitCount = 117 ID = 134 
+0

'を含んでトラブルを求めています。一見すると、あなたの 'std :: getline'は' start'識別子の前にあるべきで、そうでなければ次の行が読み込まれると思います。 – acraig5075

+0

私は開始前に置いた場合、次の行をフェッチしません。 – varsha

+0

各goto文の前にline.clear()を使用しましたが、まだ動作しません。 – varsha

答えて

0
the final answer 

while (std::getline(file, line)) 
    { 
     std::istringstream iss(line); 

     std::size_t space = line.find(" ", 0); 
     if (!isspace(line[0])) 
     { 
      iss.clear(); 
     } 
     else 
     { 
      int i; 
      for (i = 0; i <= 12; i++) 
      { 
       if (isalpha(line[i])) 
       { 
        iss.clear(); 
        goto start; 
       } 
      } 

      iss >> data.time >> data.state >> data.ID >> data.status >> data.type >> data.byte_lent >> data.CAN_message_1 >> data.CAN_message_2 >> data.CAN_message_3 >> data.CAN_message_4 >> data.CAN_message_5 >> data.CAN_message_6; 
      iss >> data.CAN_message_7 >> data.CAN_message_8 >> data.type1 >> data.type2 >> data.type3 >> data.type4 >> data.type5 >> data.type6 >> data.type7 >> data.type8 >> data.type9; 
関連する問題