基本C ++程序,getline()/解析文件 [英] Basic C++ program, getline()/parsing a file

查看:135
本文介绍了基本C ++程序,getline()/解析文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的任务是创建一个小程序,通过一个文本文件进行解析,并从中获取必要的信息。该文件是这样布局的

I've been tasked with creating a small program that is to parse through a text file and grab necessary info from it. The file is laid out as such

Tuesday*Info5051*10:00*11:00*M3039*Info5064*12:00*3:00*G1001;

基本上应该将每个字符串存储在一个结构体中,以便以后可以检索它, m无法让我的程序工作(我有一个学习障碍,所以事情往往变得困难)。这里是我的代码到目前为止。 (我知道这是一个简单的程序,但我倾向于反思/拧紧的东西。)我的大问题,我打到目前为止,它不会打开文件开始。我已经将文件保存到bin->调试以及程序的主文件夹。我确定我使用getline方法错误。

Basically it's supposed to store each string in a struct so that I can later retrieve it, but I'm unable to get my program to work (I have a learning disability so things tend to get difficult). Here's my code so far. (I know it's a simple program but I tend to overthink/screw up stuff.) My big problem I've hit so far is that it won't open the file to start. I've saved the file to the bin->debug as well as the main folder of the program. I'm sure I'm using the getline method wrong.

struct Course
{
    string _sDay;
    string _sName;
    string _sCode;
    string _iStart;
    string _iDuration;
    string _sRoom;
};

int main()
{
    ifstream fileIn;
    fileIn.open("courseLoad.txt");

    vector<Course> vCourse;
    string str="*";
    string line;

    if (!fileIn)
    {
        cout<<"A error has occured, please contact support.";
    }

    while(!fileIn.eof())
    {
        for(int i=0; i!= fileIn.eof();i++)
        {
            //file.getline(entry.part_num, 6, '-');
            getline(fileIn,line,'*');
            vCourse[i]._sDay =line;
            getline(fileIn,line,'*');
            vCourse[i]._sName =line;
            getline(fileIn,line,'*');
            vCourse[i]._sCode = line;
            getline(fileIn,line,'*');
            vCourse[i]._iStart =line;
            getline(fileIn,line,'*');
            vCourse[i]._iDuration = line;
            getline(fileIn,line,'*');
            vCourse[i]._sRoom =line;

            cout<<vCourse[i];
        }//end for
    }
--output to screen here--


推荐答案

此代码有几个问题:

1)代码缺少return语句或else语句以防止程序在无法打开文件的情况下继续执行:

1) That code is missing a return statement or an else statement to prevent the program from continuing its execution in case it cannot open the file:

if (!fileIn)
{
    cout<<"A error has occured, please contact support.";
    return -1;
}

2)您的getline都在同一个输入流上操作。你想读入一行,然后解析该行。例如:

2) Your getline all operate on the same input stream. You want to read in a line, then parse that line. For example:

// Read in a line
while (getline(fileIn,line))
{
    string item;
    std::stringstream sstr(line);

    // Read in an item
    while (getline(sstr, item, "*"))
    {
        std::cout << item << std::endl;
    }
}

3)vCourse大小为0, []运算符;但您可以使用push_back扩展向量的大小,并在向量的后面插入一个元素:

3) vCourse size is 0, so you cannot use the [] operator; but you can use push_back to expand the size of the vector and insert an element at the back of the vector:

// Read in a line
while (getline(fileIn,line))
{
    string item;

    // Default course construction
    Course c;

    std::stringstream sstr(line);

    // Read in an item
    getline(sstr,item,'*');
    c._sDay = item;
    getline(sstr,item,'*');
    c._sName = item;
    getline(sstr,item,'*');
    c._sCode = item;
    getline(sstr,item,'*');
    c._iStart = item;
    getline(sstr,item,'*');
    c._iDuration = item;
    getline(sstr,item,'*');
    c._sRoom = item;

    // Save the course into the vector
    vCourse.push_back(c);
}

您还可以在上面添加一些错误检查缺少行)。

You could also add some more error checking in the above (in case some elements are missing from the line).

这篇关于基本C ++程序,getline()/解析文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆