C ++在文本文件

时间:2017-02-27 05:41:34

标签: c++ string file fstream substring

我无法将特定字符串与我已经上传的文件中的一行文字分开#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;

}

1 个答案:

答案 0 :(得分:0)

您可以使用regex模块在​​将字符串读入变量后解析字符串中的引用文本。请务必#include <regex>

在您的情况下,您将每行读入名为line的变量。我们可以将变量line传递给名为regex_search的函数,该函数将提取引用的文本匹配并将其放入另一个变量中,在本例中为resres[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