ifstream & string

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Leo

    #1

    ifstream & string

    Privet/hello/salut/halo/hola!
    I have the following code:

    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <cstdlib>
    using namespace std;
    using namespace Finder;

    int main() {
    ifstream in( "1.dat" );
    Event *P = new Event( sphere );
    double px, py, pz;
    while( in>>px>>py>>pz ) {
    P->AddParticleRaw ( px, py, pz );
    }
    in.close();

    P->Normalize();
    cout << P->GetNumber() << " particles in the event." << endl;
    OJFRandom::SetS eed( 13 );
    double radius = 1.0; // R parameter of eq. (20) in reference [1]
    unsigned ntries = 3; // number of tries
    JetSearch* js = new JetSearch( P, radius, ntries );
    unsigned njets = js->FindJetsForOme gaCut(0.05);
    if( njets == 0 ) { cout << "Jets lost." << endl; exit(1); }
    Jets* Q = js->GetJets();
    cout << Q->GetNumber() << " jets found." << endl;
    cout << "Omega: " << Q->GetOmega() << ", "
    << "Y: " << Q->GetY() << ", "
    << "Esoft (normalized): " << Q->GetESoft() << "." << endl;
    cout << "The details of the jets (E px py pz):" << endl;
    Jet* jet = Q->GetFirst();
    while( jet ) {
    cout << setw( 10 ) << jet->GetE() << " "
    << setw( 10 ) << jet->GetPx() << " "
    << setw( 10 ) << jet->GetPy() << " "
    << setw( 10 ) << jet->GetPz() << endl;
    jet = jet->GetNext();
    }
    delete P;
    delete js;
    }

    My little practical question is about opening using "ifstream":

    How to make the program to open not just one file "1.dat", but to open
    the next file after compiling this one, for example beginning with
    "1.dat" and ending at "10.dat" compiling all of them, and making a
    final file with all the data obtained?
    I made this code to do that, but unfortunately it doesn't work...

    string name[6]
    for (i=o; i<h;i++);
    name = "i+.dat";
    --- trying to open "1.dat", runnig it, then open "2.dat" and so..


    but i'm not sure if the second/third line is all right,
    any idea of how making it work?

  • John Harrison

    #2
    Re: ifstream &amp; string

    Leo wrote:
    Privet/hello/salut/halo/hola!
    I have the following code:
    >
    #include <iostream>
    #include <iomanip>
    #include <fstream>
    #include <cstdlib>
    using namespace std;
    using namespace Finder;
    >
    int main() {
    ifstream in( "1.dat" );
    Event *P = new Event( sphere );
    double px, py, pz;
    while( in>>px>>py>>pz ) {
    P->AddParticleRaw ( px, py, pz );
    }
    in.close();
    >
    P->Normalize();
    cout << P->GetNumber() << " particles in the event." << endl;
    OJFRandom::SetS eed( 13 );
    double radius = 1.0; // R parameter of eq. (20) in reference [1]
    unsigned ntries = 3; // number of tries
    JetSearch* js = new JetSearch( P, radius, ntries );
    unsigned njets = js->FindJetsForOme gaCut(0.05);
    if( njets == 0 ) { cout << "Jets lost." << endl; exit(1); }
    Jets* Q = js->GetJets();
    cout << Q->GetNumber() << " jets found." << endl;
    cout << "Omega: " << Q->GetOmega() << ", "
    << "Y: " << Q->GetY() << ", "
    << "Esoft (normalized): " << Q->GetESoft() << "." << endl;
    cout << "The details of the jets (E px py pz):" << endl;
    Jet* jet = Q->GetFirst();
    while( jet ) {
    cout << setw( 10 ) << jet->GetE() << " "
    << setw( 10 ) << jet->GetPx() << " "
    << setw( 10 ) << jet->GetPy() << " "
    << setw( 10 ) << jet->GetPz() << endl;
    jet = jet->GetNext();
    }
    delete P;
    delete js;
    }
    >
    My little practical question is about opening using "ifstream":
    >
    How to make the program to open not just one file "1.dat", but to open
    the next file after compiling this one, for example beginning with
    "1.dat" and ending at "10.dat" compiling all of them, and making a
    final file with all the data obtained?
    I made this code to do that, but unfortunately it doesn't work...
    >
    string name[6]
    for (i=o; i<h;i++);
    name = "i+.dat";
    --- trying to open "1.dat", runnig it, then open "2.dat" and so..
    >
    >
    but i'm not sure if the second/third line is all right,
    any idea of how making it work?
    >
    Here's one way using the C function sprintf

    for (i = 1; i < 10; i++)
    {
    char name[99];
    sprintf(name, "%d.dat", i);
    // do something with name
    ...
    }

    Hope this is something like what you need.

    john

    Comment

    • Leo

      #3
      Re: ifstream &amp; string

      Thanks! Will try that one!
      ouh.. a trouble, the program executes just the last opened file, and
      as i understand, rewrites all the previous results...
      hmmm

      Another little trouble: i don't know, but maybe is easier (what was
      trying to do now) just to open the directory where all my files
      "n.dat" (n=1,2...), and make c++ to run them one by one?

      Comment

      • Mike Wahler

        #4
        Re: ifstream &amp; string


        "Leo" <lserkin@gmail. comwrote in message
        news:1173249301 .421830.156370@ c51g2000cwc.goo glegroups.com.. .
        Privet/hello/salut/halo/hola!
        >
        How to make the program to open not just one file "1.dat", but to open
        the next file after compiling this one, for example beginning with
        "1.dat" and ending at "10.dat" compiling all of them, and making a
        final file with all the data obtained?
        I made this code to do that, but unfortunately it doesn't work...
        >
        string name[6]
        for (i=o; i<h;i++);
        {
        std::ostringstr eam oss;
        oss << i << ".dat";
        std::ifstream in(oss.str().c_ str());
        /* etc */
        }

        'std::ostringst ream' is declared by standard header <sstream>.

        -Mike
        name = "i+.dat";
        --- trying to open "1.dat", runnig it, then open "2.dat" and so..

        Comment

        Working...