如何从一个文件中提取信息并将信息拆分为另外四个文件?

时间:2013-10-15 01:01:43

标签: c++

我正在尝试从单个文件中提取信息,并使用一条信息(在此参考中它将是某些主要信息)我想将信息导向其他四个文件(根据专业)。对不起,如果这对您来说很明显,但我真的很尴尬。以下是我到目前为止的情况:

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main()
{
    double studNum;
    float GPA;
    string nameL;
    string nameF;
    char initM;
    char majorCode;
    ifstream inCisDegree;
    ofstream outAppmajor;
    ofstream outNetmajor;
    ofstream outProgmajor;
    ofstream outWebmajor;

    inCisDegree.open("cisdegree.txt");
    if (inCisDegree.fail())
{
    cout << "Error opening input file.\n";
    exit(1);
}
    outAppmajor.open("appmajors.txt");
    outNetmajor.open("netmajors.txt");
    outProgmajor.open("progmajors.txt");
    outWebmajor.open("webmajors.txt");

    while (inCisDegree >> studNum >> GPA >> nameL >> nameF >> initM >> GPA >> majorCode);

    inCisDegree >> studNum >> nameL >> nameF >> initM >> GPA >> majorCode;
    cout.setf(ios::fixed); 
    cout.setf(ios::showpoint);
    cout.precision(2);

这基本上就我而言。我还有一点,但它只是告诉我它是否有效。似乎studNum(文件中的学生编号)确实能够正常工作,但是,其他一切似乎都无法正常工作。我在确定如何将信息正确地放入四个文件之一时也遇到了问题。谢谢你的帮助。我已经花了好几个小时才能让这个工作起来,但我的思绪一直在拉动空白。

编辑:输入文件中的信息如下:10168822 Thompson Martha W 3.15 A

转换为:studNum,nameL,nameF,initM,GPA,majorCode

1 个答案:

答案 0 :(得分:0)

看行

while(inCisDegree >> studNum >> GPA >> nameL >> nameF >> initM >> GPA >> majorCode);

因为你最后有一个分号,这不会是一个循环(假设它只是这种方式进行测试,但我认为无论如何都会提到它。)

然而,此行的主要问题是您已将文本文件指定为

格式
studNum, nameL, nameF, initM, GPA, majorCode

你在这里尝试阅读

studNum, GPA, nameL, nameF, initM, GPA, majorCode

除了两次读取值之外,GPA的第一次读入是尝试将string读入float,这可能会在<iostream>内部抛出异常(i不确切知道行为是什么,但它不起作用)。这会破坏您的读取,其余的变量将不会从文件读入。

这段代码应该做你想要完成的事情。

我已将studNumdouble更改为long,因为您似乎没有任何理由可以使用double,并且在所有可能情况下您可以使用unsigned int,因为8位数字不会溢出2^32

#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <cstdlib>

using namespace std;

int main() {
    long studNum;
    float GPA;
    string nameL;
    string nameF;
    char initM;
    char majorCode;

    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(2);

    ifstream inCisDegree;
    ofstream outAppmajor;
    ofstream outNetmajor;
    ofstream outProgmajor;
    ofstream outWebmajor;

    inCisDegree.open("cisdegree.txt");
    if (inCisDegree.fail()) {
        cout << "Error opening input file.\n";
        exit(1);
    }

    outAppmajor.open("appmajors.txt");
    outNetmajor.open("netmajors.txt");
    outProgmajor.open("progmajors.txt");
    outWebmajor.open("webmajors.txt");

    while (inCisDegree.good()) {
        string line;
        getline(inCisDegree, line);
        istringstream sLine(line);

        sLine >> studNum >> nameL >> nameF >> initM >> GPA >> majorCode;

        cout << studNum << " " << nameL << " " << nameF << " " << initM << " " << GPA << " " << majorCode << endl;
        // this line is just so we can see what we've read in to the variables
    }
}