将文本文件中的数据放入变量中

时间:2015-11-15 04:00:09

标签: c++

我正在尝试从文本文件中提取数据以将其放入变量中。这就是文本文件的样子:

Cars.txt

1999 Ford Ranger 3000 156000 used
2000 Mazda Miata 4000 98000 used
2015 Jeep Wrangler 33000 250 new

我的输出应该是这样的:

Category| Number| Total Price| TotalMileage|
     New|      1|       33000|          250|
    Used|      2|        7000|       254000|

此函数应读取整个文件并编译统计信息。由于每个变量都是引用变量,如果在此处进行更改,则应该影响用于调用函数的变量。在读完整个文件后,您应该能够打印统计数据。

double newTotalPrice = 0;
    double newTotalMileage = 0;
    double usedTotalPrice = 0;
    double usedTotalMileage = 0;
    int numUsed = 0;
    int numNew = 0;
    std::ifstream fin;
    std::string filename = "cars.txt";
    bool isOpen = GetInputFileStream(&fin, filename);
    AnalyzeFile(fin,
                numUsed,
                numNew,
                newTotalPrice,
                newTotalMileage,
                usedTotalPrice,
                usedTotalMileage);
    PrintStatistics(std::cout,
        numUsed,
        numNew,
        newTotalPrice,
        newTotalMileage,
        usedTotalPrice,
        usedTotalMileage);

  std::cout << "Press ENTER to continue";
  std::cin.get();
}


void AnalyzeFile(std::istream & fin,
    int & numUsed,
    int & numNew,
    double & newTotalPrice,
    double & newTotalMileage,
    double & usedTotalPrice,
    double & usedTotalMileage)
{

 numUsed = 0;             
 numNew = 0;              
 newTotalPrice = 0;       
 newTotalMileage = 0;    
 usedTotalPrice = 0;      
 usedTotalMileage = 0;    
    while (!fin.eof())
    {


        fin >> numNew
        fin >> Price;
        fin >> Mileage;


    }

}

所以我的问题是,如何从文本文件中读取数据并将其放入变量中?另外,如何让它收集所有变量,如二手车的总价格并加起来?我觉得我让它变得比它需要的更复杂。

1 个答案:

答案 0 :(得分:1)

这里处理fstream有些棘手。这是编写AnalyzeFile()函数的一种简单方法:

void AnalyzeFile(std::istream & fin,
  int & numUsed,
  int & numNew,
  double & newTotalPrice,
  double & newTotalMileage,
  double & usedTotalPrice,
  double & usedTotalMileage)
{

    int modelYear, Price, Mileage;
    string Make, Model, Condition;

    numUsed = 0;
    numNew = 0;
    newTotalPrice = 0;
    newTotalMileage = 0;
    usedTotalPrice = 0;
    usedTotalMileage = 0;
    do
    {
        //read each field in a line
        Condition = "";
        fin>>modelYear>>Make>>Model>>Price>>Mileage>>Condition;

        if (Condition == "") break; //no valid data loaded

        if (Condition == "used")
        {
            numUsed++;
            usedTotalPrice += Price; //after all entries have been added usedTotalPrice will contain the sum of all the used car prices.
            usedTotalMileage += Mileage;

            //do other calculations
        }
        else if (Condition == "new")
        {
            //do updates for new condition
        }

    } while (!fin.eof() && !fin.bad());
}

请注意,此代码不包含任何错误检查,只是帮助您入门的大纲。一个棘手的事情:读完最后一个字符串fin.eof()将返回true,即使最后一行是有效的。这就是为什么我检查一下条件&#39; string已从文件中收到任何数据。