我无法将特定字符串与我已经上传的文件中的一行文字分开#34;在C ++中。
以下是我要按列解析的行。
2016/12/6 s"政府和大企业之间的乱伦关系在黑暗中茁壮成长。 〜杰克安德森[4]" 0 3 39蓝白色PATRICK BARDWELL
我需要在不同的变量中提供每条信息,起初我正在实现inFile>> var1>> var2>>等等;但是当我得到引用时,这个方法只接受引用的第一个字:""然后停下来。
有关如何将所有内容放入" "成一个字符串?我目前的代码如下。
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
#include <cstring>
using namespace std;
// int main
int main()
{
// Declare variables
string userFile;
string line;
string date;
char printMethod;
string message;
int numMedium;
int numLarge;
int numXL;
string shirtColor;
string inkColor;
string customerName;
string customerEmail;
string firstLine;
string delimiter = "\"";
// Prompt user to 'upload' file
cout << "Please input the name of your file:\n";
cin >> userFile;
fstream inFile;
inFile.open(userFile.c_str());
// Check if file open successful -- if so, process
if (inFile.is_open())
{
getline(inFile, firstLine); // get column headings out of the way
cout << firstLine << endl << endl;
while(inFile.good()) // while we are not at the end of the file, process
{
getline(inFile, line);
inFile >> date >> printMethod;
}
inFile.close();
}
// If file open failure, output error message, exit with return 0;
else
{
cout << "Error opening file";
}
return 0;
}
答案 0 :(得分:0)
您可以使用regex
模块在将字符串读入变量后解析字符串中的引用文本。请务必#include <regex>
。
在您的情况下,您将每行读入名为line
的变量。我们可以将变量line
传递给名为regex_search
的函数,该函数将提取引用的文本匹配并将其放入另一个变量中,在本例中为res
。 res[1]
保存我们感兴趣的匹配项,因此我们将其分配给名为quotedText
的变量。
string quotedText;
while(inFile.good()) // while we are not at the end of the file, process
{
getline(inFile, line);
regex exp(".*\"(.*)\""); // create a regex that will extract quoted text
smatch res; // will hold the search information
regex_search(line, res, exp); // performs the regex search
quotedText = res[1]; // we grab the match that we're interested in- the quoted text
cout << "match: " << quotedText << "\n";
cout << "line: " << line << "\n";
}
然后,您可以使用quotedText
自由地执行任何操作。
正则表达式语法本身就是一个完整的主题。有关详细信息,请see the documentation。