Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
294 views
in Technique[技术] by (71.8m points)

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

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();
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...