Διαχωρισμός αρχείου σε επιμέρους 2 τυχαίων γραμμών

Συζητήσεις για την γλώσσα C και C++

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Διαχωρισμός αρχείου σε επιμέρους 2 τυχαίων γραμμών

Δημοσίευση από katerinaaa » 10 Ιαν 2011 10:38

Γεια σας,
έχω ένα αρχείο το οποίο περιέχει δεδομένα.

Και θα ήθελα να χωρίσω τυχαία αυτά τα δεδομένα και να βάλω κάποιες γραμμές σε ένα αρχείο εξόδου και τις υπόλοιπες σε ένα δεύτερο αρχείο εξόδου.

Το πόσες θα είναι οι γραμμές αυτές θα θελα αν γίνεται να το καθορίσω με κάποιο ποσοστό.
Π.χ. αν έχω 60% (0.6 δηλαδή) και οι γραμμές είναι 300 θα πάρω 180 γραμμές στο ένα αρχείο και τις υπόλοιπες 120 στο άλλο.

Έχω αρχίσει να προσπαθώ να το φτιάξω σε C++ αλλά δε ξέρω πως ακριβώς να το κάνω με το ποσοστό.

Μπορεί κάποιος να με βοηθήσει ?

Ευχαριστώ εκ των προτέρων

Κώδικας: Επιλογή όλων

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>


using namespace std;


void readFile&#40;vector<string>& name_vec, string name_file&#41;;


int main&#40;&#41;
&#123;
       float p;
       int len;
       
       vector<string> lines;
       ifstream readLines;
       
       cout << "Fraction &#58; ";
       cin >> p;
       
       
       readFile&#40;lines, "in.txt"&#41;;
       len = lines.size&#40;&#41;;
       
       
       
       ofstream outfile1&#40;"1.txt"&#41;;
       ofstream outfile2&#40;"2.txt"&#41;;
       
       
       if &#40;!outfile1&#41; &#123;
        cerr << "Unable to write "  << endl;
        exit&#40;1&#41;;
      &#125;
      
      if &#40;!outfile2&#41; &#123;
        cerr << "Unable to write "  << endl;
        exit&#40;1&#41;;
      &#125;
    

    
      cout <<"No Lines&#58; "<< len << endl;
     
      cout<< lines&#91;rand&#40;&#41;&#93;;
     
     
     
       
       system&#40;"pause"&#41;;
       return 0;
&#125;




void readFile&#40;vector<string>& name_vec, string name_file&#41; 
&#123;
    ifstream infile;
    infile.open&#40;name_file.c_str&#40;&#41;&#41;;
    if &#40;!infile&#41; &#123;
        cerr << "Unable to read " <<  name_file << endl;
        exit&#40;1&#41;;
    &#125;
    for &#40;string someName; infile >> someName; &#41; &#123;
        name_vec.push_back&#40;someName&#41;;
    &#125;
    infile.close&#40;&#41;;
&#125;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Διαχωρισμός αρχείου σε επιμέρους 2 τυχαίων γραμμών

Δημοσίευση από virxen75 » 10 Ιαν 2011 21:27

δοκίμασε έτσι

Κώδικας: Επιλογή όλων

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>


using namespace std;
void readFile&#40;vector<string>& name_vec, string name_file&#41;;

int main&#40;&#41;&#123;
    srand&#40;time&#40;NULL&#41;&#41;;
       float p=0;
       int len,count=0;
       int records&#91;2&#93;;
       vector<string> lines;
       ifstream readLines;
       ofstream outfile&#91;2&#93;;
       while &#40;p<=0 || p>=1&#41;&#123;
            cout << "Fraction &#58; ";
            cin >> p;
       &#125;
       readFile&#40;lines, "c&#58;\\in.txt"&#41;;
       len = lines.size&#40;&#41;;
       cout <<"No Lines&#58; "<< len << endl;
       records&#91;0&#93;=&#40;int&#41; &#40;p*len&#41;;
       records&#91;1&#93;=len-records&#91;0&#93;;
       cout<<"records for 1.txt="<<records&#91;0&#93;<<endl;
       cout<<"records for 2.txt="<<records&#91;1&#93;<<endl;
       outfile&#91;0&#93;.open&#40;"c&#58;\\1.txt"&#41;;
       outfile&#91;1&#93;.open&#40;"c&#58;\\2.txt"&#41;;
       
       
       if &#40;!outfile&#91;0&#93;&#41; &#123;
        cerr << "Unable to write file 1"  << endl;
        exit&#40;1&#41;;
      &#125;
     
      if &#40;!outfile&#91;1&#93;&#41; &#123;
        cerr << "Unable to write file 2"  << endl;
        exit&#40;1&#41;;
      &#125;
      
       vector<string>&#58;&#58;iterator it;
       for &#40; it=lines.begin&#40;&#41; ; it < lines.end&#40;&#41;; it++ &#41;&#123;
            string linex=*it;
            int x=linex.length&#40;&#41;;
            
            //lines.pop_back&#40;&#41;;
            int a=rand&#40;&#41;%2;
            int b=!a;
            if &#40;records&#91;a&#93;>0&#41;&#123;
                records&#91;a&#93;--;
                outfile&#91;a&#93;.write&#40;linex.c_str&#40;&#41;,x&#41;;
                outfile&#91;a&#93;<<endl;
                cout<<"line in file="<<&#40;a+1&#41;<<"  "<<linex.c_str&#40;&#41;<<endl;
            &#125;else if &#40;records&#91;!a&#93;>0&#41;&#123;
                records&#91;!a&#93;--;
                outfile&#91;!a&#93;.write&#40;linex.c_str&#40;&#41;,x&#41;;
                outfile&#91;!a&#93;<<endl;
                cout<<"line in file="<<&#40;a+1&#41;<<"  "<<linex.c_str&#40;&#41;<<endl;
            &#125;
            count++;
      &#125;
        
   
      outfile&#91;0&#93;.close&#40;&#41;;
      outfile&#91;1&#93;.close&#40;&#41;;
   
      
     
      //cout<< lines&#91;rand&#40;&#41;&#93;;
     
     
     
       
       system&#40;"pause"&#41;;
       return 0;
&#125;




void readFile&#40;vector<string>& name_vec, string name_file&#41;
&#123;
    ifstream infile;
    infile.open&#40;name_file.c_str&#40;&#41;&#41;;
    if &#40;!infile&#41; &#123;
        cerr << "Unable to read " <<  name_file << endl;
        exit&#40;1&#41;;
    &#125;
    for &#40;string someName; getline&#40;infile,someName&#41;; &#41; &#123;
             name_vec.push_back&#40;someName&#41;;
    &#125;
    infile.close&#40;&#41;;
&#125; 



katerinaaa
Δημοσιεύσεις: 109
Εγγραφή: 28 Ιαν 2010 12:46

Διαχωρισμός αρχείου σε επιμέρους 2 τυχαίων γραμμών

Δημοσίευση από katerinaaa » 10 Ιαν 2011 21:40

Ευχαριστώ πάρα πολύ virxen

Απάντηση

Επιστροφή στο “C, C++”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες