2016-10-12 10 views
0

編集コードに分割する行(列)と私は複数の文字列に文字列(.txtファイルから読み取る行を)分割したい以上の文字列

質問:

1 REP615624/1 BYZ12345 90 12.516 20.709

iは20.709がwihtがn \とOTがある終了する(ようにY でXに回転 バイツ90にREPxxx partNumberも に位置 で 20xxxを 12xxxをBYZxxx 1を入れて、したいです彼女のライン)

C++では、私はQTでそれを変換したい

std::ifstream leggiROF(nomeFileTxt.c_str()); // apre in lettura il file ROF.txt 
while(!leggiROF.eof())       // finché non raggiunge la fine del file 
{ 
    getline(leggiROF, posizione, ' ');   // legge la riga fino allo spazio e mette contenuto in posizione 
    getline(leggiROF, partNumber, ' ');   // legge la riga fino allo spazio e mette contenuto in part number 
    getline(leggiROF, byz, ' ');    // legge la riga fino allo spazio e mette contenuto in byz 
    getline(leggiROF, rotazione, ' ');   // legge la riga fino allo spazio e mette contenuto in rotazione 
    getline(leggiROF, x, ' ');     // legge la riga fino allo spazio e mette contenuto in coordinata x 
    getline(leggiROF, y, '\n');     // legge la riga fino allo '\n' e mette contenuto in coordinata y 
} // end while 

leggiROF.close(); 

を使用。私は

void fileTxt::setContaRigheFileTxt(Ui::Dialog *ui) 
{ 
    fileName = QFileDialog::getOpenFileName(0, QObject::tr("Apri File"), 
               "C:\\Users\\Massimo Di Natale\\Documents\\Programmi C++ 11\\Programmi_QT\\Ericsson", 
               QObject::tr("File ROF (R*.txt)") 
if (!fileName.isEmpty())      // se non è vuoto 
    { 
     QFile file(fileName); 
     if (!file.open(QIODevice::ReadOnly)) 
     { 
       QMessageBox::critical(0, QObject::tr("Errore"), QObject::tr("Non posso aprire questo file")); 
       return; 
     } // end if 
     QTextStream in(&file);      // legge il file .txt 
     while(!in.atEnd())       // finchè non raggiunge la fine del file 
     { 
       ui->textEdit->append(in.readLine()); 

       /* WANT TO PUT each part before ' ' in a different string */ 
       // pos=..... 
       // pNumb=... 
       // ecc... 
       /*              */ 

     } // end while 
     file.close();        // chiude il file aperto per la lettura 
    } // end if 
} 

をしようとしているが、どのようにそれを

+1

_ "が、動作しません" _ひどいですエラーの説明、より正確にお願いします。 –

+0

['QString :: split()'](http://doc.qt.io/qt-5/qstring.html#split)は 'QStringList'を返しますので、それを反復処理する必要があります。 'operator []'を使うだけでリストのメンバーにアクセスすることもできます。 –

+0

Qt固有ではありませんが、関連しています:[C++の文字列を分割](http://stackoverflow.com/questions/236129/split-a-string-in-c)。 – dfri

答えて

0

解決修正するときにループ

while(!in.atEnd())       // finchè non raggiunge la fine del file 
    { 
     //ui->textEdit->append(in.readLine() + "elab TXT"); 
     QString line=in.readLine(); 
     QStringList list=line.split(" "); 

     posizione=list[0];   // legge la riga fino allo spazio e mette contenuto in posizione 
     partNumber=list[1];   // legge la riga fino allo spazio e mette contenuto in part number 
     byz=list[2];    // legge la riga fino allo spazio e mette contenuto in byz 
     rotazione=list[3];   // legge la riga fino allo spazio e mette contenuto in rotazione 
     x=list[4];     // legge la riga fino allo spazio e mette contenuto in coordinata x 
     y=list[5];     // legge la riga fino allo '\n' e mette contenuto in coordinata y 
    } // end while 
0

を行うには、ループの右シフト演算子(>>)を使用することができません。これが答えた場合

fstream file("file.txt"); 
string position, partNumber, byz, rotation, x, y; 
while (file >> position >> partNumber >> byz >> rotation >> x >> y) { 
    // do work 
} 
3

わかりませんあなたの質問には、それは私がC + +で文字列を分割するために使用された分割関数だ:

//Split string -- reusable 
vector<string> splitString(string str, string delimiter) 
{ 
    vector<string>v; 
    string token; 
    size_t pos = 0; 

    while((pos = str.find(delimiter)) != string::npos) 
    { 
     token = str.substr(0, pos); 
     v.push_back(token); 
     str.erase(0, str.find(delimiter) + delimiter.length()); 
    } 
    v.push_back(str); 
    return v; 
} 
0

分割のusin GA istringstream(C++ 11以降)

vector<string> split(const string & s) 
{ 
    vector<string> tokens, t; 
    istringstream in {s}; 
    while (in >> t) { 
     tokens.push_back(t); 
    } 
    return tokens; 
} 

またはブーストから何かを使用 http://www.cplusplus.com/faq/sequences/strings/split/

関連する問題