2013-11-10 5 views
0

텍스트 파일에서 읽고 텍스트 파일에 쓰는 프로그램을 C++로 작성하려고합니다. 읽은 텍스트 파일은 첫 번째 줄에 일 수 (int)를 가지며, 세 번째 영업 사원이 다른 줄에있는 성과 이름을 갖습니다. 나는이 부분을 가지고C++ 이중 텍스트 파일에서 읽기

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 

세를 읽는 : 샘플 텍스트 파일은 아래와 같습니다 : 그런 다음 주에 주어진 번호에 대한 각 판매 사람을 위해 매일 판매를 제공하기 위해 데이터 (복식)의 충분한 라인이있을 것이다 영업 사원의 이름. 하지만 나는 각 라인의 다른 판매원과 일치하기 때문에 각 라인의 더블을 읽는 법을 모른다. 그래도 각 줄마다 합계가 필요합니다. 어떻게해야합니까? 다음 코드는 내가 지금까지 가지고있는 것이다. 누군가 제발 도와주세요!

#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

당신은 증가하지 않는'i' : 당신은 주까지 각 사람의 총 분할을 원하는 경우에 당신은 조금 다른 뭔가를해야 할 것이다. – 0x499602D2

답변

0

작은 덩어리로 문제를 해결하고 싶습니다. 이것에 관해서 얇은 것 :

  1. 나는 어떻게 사람의 이름을 얻습니까? (이미 알고있는 것처럼 들릴 수도 있습니다.)
  2. 각 사람마다 어떤 줄이 있는지 어떻게 알 수 있습니까?
  3. 어떻게 그 숫자 값 텍스트 (문자열)의 라인 (복식)
2
당신은 문자열로 한 줄을 읽어 '의 getline'를 사용할 수 있습니다

을 변환합니까 (간단한 패턴이있다) 이 문자열을 입력 스트림으로 사용하십시오. 다음은 3 줄의 double을 읽고 각 줄의 합계를 인쇄하는 샘플 코드입니다.

#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; 
} 
+0

나는 이것을했다 : 그러나 그것은 어떻게 든 0을 첫 번째 합계'string s; 위한 는 (나는이 주 <; I = 1 int로 난 ++) 용 { (INT의 J = 0; J <= 3 &&의 getline (1 N, S) J ++) { 의 getline (1 N, S); istringstream sin (s); while (cin >> 판매) { total + = 판매; } cout << total << endl; } }'총계 및 판매액이 루프 전에 0으로 초기화되었습니다. – pdhimal1

0

루프를 이와 같이 전환하면 좋을 것입니다. 이것은 각 개인의 총합을 원한다고 가정합니다. 루프 내에서

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