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

Put data from a text file into a variable

本文关键字:变量 数据 文本 文件      更新时间:2023-10-16

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

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;

    }
}

所以我的问题是,如何从文本文件中读取数据并将其放入变量中?此外,我如何收集所有变量,如二手车总价,并将其相加?我觉得我把这件事做得比需要的更复杂了。

这里处理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。这就是为什么我检查"Condition"字符串是否从文件中接收到任何数据。