将文本文件值放入链接列表中

时间:2015-01-08 18:21:35

标签: c++ windows visual-studio-2012 linked-list

我正在读取链接列表中的一些数据并且我想在某个点停止,文件列表会保留以下详细信息:ID名称姓氏和城镇,在这些之后都是通过那里的accoutn数字:数字余额,这是一个银行帐户列表,继承我的代码。我希望它在银行会计数字开始时停止,因为我打算将它们放入不同的链表中。

#include "list.h"   
#include "customer.h"
#include <iostream>             // cout
#include <fstream>      

#define FN  "file.txt"  // hardwired file name
#pragma once
using namespace std;

customerlist customerlist;  

int main () {

int data ;

ifstream in;
in.open(FN);
if (in.fail()) {
    cout << "unable to open " << FN << endl;
    getchar();  // type key to dismiss window
    return 0;
}

while (!in.eof()) {



    customer *ustomer = new customer();
    in >> ustomer->ID >> ustomer->name >> ustomer->lastname >> ustomer->town;
    cout << ustomer->ID<< " " << ustomer->name << "  " << ustomer->lastname<< "  "         <<     ustomer->town << endl ;
    customerlist.add(ustomer);

}
in.close();



  return 0;
}

输入数据样本:

80013484 ADAMS           Aiden           Clonakilty
80034596 ADAMS           Anna-Marie      Athlone

accoutn info:

90009074 80007964      11640
90000034 80007964      -6458

1 个答案:

答案 0 :(得分:0)

如果我理解正确的客户列表和帐户之间的交易列表都在文件file.txt中,那么您的问题似乎是:

“我的程序如何区分提供客户数据的输入文件中的行和提供交易数据的行?”

鉴于这个问题,这个问题有两种通用方法:

<强> 1。使输入文件易于解析

如果允许修改输入文件,最简单的方法是确保输入文件具有易于解析的格式。例如,我们可以更改输入文件,使其读取如下内容:

C 80013484 ADAMS           Aiden           Clonakilty
C 80034596 ADAMS           Anna-Marie      Athlone
T 90009074 80007964      11640
T 90000034 80007964      -6458

给定此输入文件,输入代码可以写为:

char flag;
in >> flag;
switch (flag)
    {
    case 'C':    customer *ustomer = new customer();
                 in >> ustomer->ID >> ustomer->name >> 
                     ustomer->lastname >> ustomer->town;
                     customerlist.add(ustomer);
                 break;
    case 'T':    transaction *ransaction = new transaction();
                 // etc.
                 break;
    }

或者,2。解析现有文件

如果我们无法更改现有文件的格式,我们需要找到一种方法来区分不同类型的记录与现有的上下文。在这种情况下,客户记录具有四个字段并且事务记录具有三个字段,或者客户记录具有非数字第二字段而事务记录具有数字第二字段的事实可以用于区分它们。

要计算字段,Split a string in C++?的第二个答案显示了一种简单的方法。

或者,我们最初可以假设每条记录都是一个事务记录,然后处理当我们尝试将第二个字段读入整数时将发生的错误。有关不同方法的详细讨论,请参阅How to catch invalid input in C++?

无论使用哪种方法,都需要为任何实际应用提供一些额外的错误检查代码。