编辑代码和问题
我想将一个字符串(从.txt文件读取的行)拆分为更多字符串:
1 REP615624 / 1 BYZ12345 90 12.516 20.709
我想放 1个位置 在partNumber中的REPxxx BYZxxx inz 90转 xxx中的12xxx 20xxx y 等等(20.709终止与\ n和其他行)在c ++我使用
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();
我想在QT中转换它。我正在尝试
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
}
但不要怎么做
答案 0 :(得分:3)
不知道这是否能解答您的问题,但它是我用于在C ++中拆分字符串的拆分函数:
def view_all
@entries = Entry.all.includes(:Content).order(created_at: :desc)
end
答案 1 :(得分:0)
您可以在循环中使用右移运算符(>>
):
fstream file("file.txt");
string position, partNumber, byz, rotation, x, y;
while (file >> position >> partNumber >> byz >> rotation >> x >> y) {
// do work
}
答案 2 :(得分:0)
使用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;
}
或者使用来自Boost的东西 http://www.cplusplus.com/faq/sequences/strings/split/
答案 3 :(得分:0)
解决修改while循环
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