将一行(字符串)分割成更多的字符串
Split a line (string) into more strings
编辑代码和问题
我想把一个字符串(从。txt文件中读取的行)分割成更多的字符串:
1 REP615624/1 BYZ12345 90 12.516 20.709
我想放1就位partNumber中的REPxxxbyz表示的BYZxxx旋转90度12xxx in x20xxx年以此类推(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. I'm try
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
}
但不知道怎么做
不知道这是否回答了你的问题,但这是一个split函数,我在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;
}
使用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/
可以在循环中使用右移操作符(>>
):
fstream file("file.txt");
string position, partNumber, byz, rotation, x, y;
while (file >> position >> partNumber >> byz >> rotation >> x >> y) {
// do work
}
解决修改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
相关文章:
- 将字符串存储到文件下一行的变量中
- 在 c++ 中将uint8_t数组转换为字符串以在一行中打印
- 如何从一行 C++ 中提取两个字符串
- 迭代一行(字符串)C++ 中的每个单词
- 在每个特定字符串之后插入下一行
- 在一行中输入具有其他输入类型的多个单词字符串
- cout 用于仅打印最后一行的 2D 字符串矢量
- 创建一个字符串变量,并在同一行上要求输入
- 带有新行的字符串仅保存在一行中
- 在同一行中读取混合输入(字符串/浮点数),并将其存储在数组中
- 是否可以遍历文本文件行并使用字符串流来解析每一行
- 在字符串中的一行中搜索大于0的数字
- gvim 换行应该结束当前字符串并在下一行开始一个新的字符串
- 从文件中读取一行并将其放入字符串中(使用 fstream)
- 从文件中读取一行,并在其中搜索字符串(c++)
- 获取一行字符串并转换为浮点列表
- 字符串迭代器与读取每一行不兼容
- 用c++将文件中的一行文本复制到字符串中
- 如何知道文本文件中的字符串是否在第一行?[C++ ]
- cout 字符串和向量在同一行中