C++ Read from a text file, lines of double

孤街浪徒 提交于 2019-12-11 20:29:42

问题


I am trying to write a program in C++ which will read from a text file, and write to a text file. The read text file will have number of days (int) in the first line, followed by three sales persons first and last names on different lines. Then it will have enough lines of data (doubles) to provide daily sales for each sales person for the given numbers of week: The sample text file is given below:

2              // number of days, could change
sales person1 //first sales person's first and last name
sales person2
sales person3
11.45 30.23 34.56 37.84 45.96    //first day of sales for sales person1
20.45 33.0 22 11 26.87 90        //first day of sales for sales person2
33.57 40 20.87 23.9 45.8         //first day of sales for sales person3

56.6 75.8 39.0 23.3 10          //second day of sales for sales person1
40.34 54.2 12.4 43.5 23
23 45.6 75.34 27.45

I have got to the part to read three sales person's names. But i don't know how to read the doubles in each lines since they correspond to different sales person in each line. I only need total for each lines though. How should i proceed with this? Following code is what i have so far. Somebody help please!

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

void get_input(char input_file[]);
void get_output(char output_file[]);
void readFile(char name[]);
string getName(ifstream &in);
void writeFile(char output[]);

int main()
{
  ifstream in;
  char input_file[30];
  char output_file[30];   
  get_input(input_file);
  get_output(output_file);
  //int total = readFile(input_file);
  writeFile(output_file);  
}

void get_input(char input_file[])
{
   cout << "Enter name of the input file: ";
   cin >> input_file;
}

void get_output(char output_file[])
{
   cout << "Enter name of the output file: ";
   cin >> output_file;
}

void readFile(char fileName[])
{
  int weeks;  
  double total1 =0, sales1, total2 = 0, sales2, total3 = 0, sales3;

  ifstream in;  
  in.open(fileName);

  if(in.fail())
  {
    cout << " failed to open the input file" << endl;
     exit(-1);
  }

  in >> weeks; 
  cout << "Total weeks processed: " << weeks << endl;

  string name1 = getName(in);
  cout << name1 << endl;

  string name2 = getName(in);
    cout << name2 << endl;

  string name3 = getName(in);
    cout << name3 << endl;

  int i = 1;

  /*do         // this is where i want to process the sales and get the total
  {

    in >> sales1;
    total1 = total1 + sales1;

    in >> sales2;
    total2 = total2 + sales2;

    in >> sales3;
    total3 = total3 +sales3;

  } while(i <= 3);*/


  in.close();
}

string getName(ifstream &in)
{
   string first, last;   
   in >> first >> last;
   return first + " " + last;
}
void writeFile(char output[])
{
  ofstream out;
  out.open(output);
  out.close();
}

回答1:


You can use 'getline' to read one line into a string, then use the string as the input stream. Here is a sample code reading 3 lines of doubles and print the sum for each line.

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

int main() {
    ifstream fin("data.txt");
    string s;
    //read a line into 's' from 'fin' each time
    for(int i=0; i<3 && getline(fin,s); i++){
        //use the string 's' as input stream, the usage of 'sin' is just like 'cin'
           istringstream sin(s);
           double sum = 0.0, tmp;
           while(sin>>tmp){
               sum += tmp;
           }
           cout<<sum<<endl;
    }
    return 0;
}



回答2:


You will want to decompose the problem in to smaller chunks. Thin about it like this:

  1. How do I get the people's names? (sounds like you already figured this out)
  2. How do I know which line goes with each person? (there is a simple pattern)
  3. How do I convert the line of text (a string) to the numeric value (doubles)



回答3:


If you switch your loop to be something like this you should be good. This is assuming you want each person's grand total. If you want each person's total split up per week you'll have to do something a little different:

int totals[] = {0,0,0};
string line;

//for each week
for(int i = 0; i > weeks; i++)
{
   //for each person
   for(int j = 0; j >= 2; j++)
   {
      getline(in, line);
      totals[j] += getLineTotal(line);
   }

   //skip blank line. this will not be valid if the text file isn't formatted to have
   //lines that follow double, double, double, blank...
   getline(in, line);
}

...

double getLineTotal(string line)
{
   double sum, dubVal;

   sum = 0;
   while(line >> dubVal){
       sum += tmp;
   }
   return sum;
}


来源:https://stackoverflow.com/questions/19885481/c-read-from-a-text-file-lines-of-double

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!