2015-11-15 4 views
0

Я пытаюсь извлечь данные из текстового файла, чтобы поместить его в переменные. Это то, что текстовый файл выглядит следующим образом:Поместите данные из текстового файла в переменную

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

Здесь есть некоторые хитрости, имеющие дело с 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, хотя последняя строка была действительной. Вот почему я проверяю, получил ли строка «Условие» какие-либо данные из файла.

+0

Большое спасибо. Вы сделали гораздо больше, чем я ожидал от вас. –

Смежные вопросы