VasquezPL 0 Junior Poster

Ok...
Here is the problem..
Void extract_data is used to choose number of paramets I want to extract from Active directory...
For exmaple...I choose SAMID, Telephone Number, Manager name...But number of functions may vary...from one to all shown in the menu...

Void extract_data2() is used to use all data gathered at void extract_data
It uses system() statement to run dsget command to get the data we have choosen at extract_data menu...
so if we choose Telephone,manager,samid,display name...dsget DOS command will return 4 files...extract_data2 will ask us for name of file with input data(user names), will process it multiple times with dsget command and return us 4 files telephone.txt manager.txt samid.txt and display_name.txt
Ofcourse the number of files may also vary...It depends on how many options you choose at menu...if I choose 10 functions, extract_data2 will return 10 files with corresponding names..and it works really fine...
but I need now to merge all generated files into one csv files..
So if i choose Telephone,manager,samid,display name and then get 4 result filestelephone.txt manager.txt samid.txt and display_name.txt -> i need to merge them into one CSV. which sould look like that.

1st line from telepone.txt,1st line from manager.txt,1st line from samid.txt,1st line from display_name.txt...
2nd line,2nd line,2nd line,2nd line..
.
.
.
until EOF..

So whats the problem?
I dont know how to open diffrent number of files at once (depending on number of options choosen in menu)...and then to merge all into csv...
I know how to do that when i know the number of files...
for exqample:

while (! superv.eof() & ! nazwiska.eof())
                                              {
                                              getline (superv,line1);
                                              getline (nazwiska,line2);
                                              result << line1 << "," << line2 << endl;

but how to do that when number of files is always diffret,and number of getlines is diffrent to?

Please help!

Codes below:

void extract_data()
{

     char * opcje1[] = {"DN","NAME","SID","DISPLAY NAME","DESCRIPTION","OFFICE","TELEPHONE","EMAIL","MOBILE PHONE","IP PHONE","MANAGER","TITLE","DEPARTAMENT","HOME DIR","REMOVE","DONE","BACK"};
     string zmienna1;
     char input[ 45 ];
     i=0;
     bool wyjscie;
     wyjscie=0;
     system ("cls");
     gotoxy(1,15); cout << "Choose";
     while (wyjscie !=1)
     {
     system ("cls");
     gotoxy(1,1); cout << "to extract: ";
     //wyswietla opcje
     wyswietl(i);
     // koniec wyswietlania
     switch ( menu(opcje1, 17))
     {
                case 1: // DN
                i++;
                flag[i]="dn";
                option[i]="DN";
                break;

                case 2: // NAME
                i++;
                flag[i]="samid";
                option[i]="NAME";
                break;

                case 3: // SID
                i++;
                flag[i]="sid";
                option[i]="SID";
                break;
                
                case 4: // DISPLAY NAME
                i++;
                flag[i]="display";
                option[i]="DISPLAY_NAME";
                break;
                
                case 5: // DESCRIPTION
                i++;
                flag[i]="desc";
                option[i]="DESCRIPTION";
                break;
                
                case 6: // OFFICE
                i++;
                flag[i]="office";
                option[i]="OFFICE";
                break;
                
                case 7: // TELEPHONE
                i++;
                flag[i]="tel";
                option[i]="TELEPHONE";
                break;
                
                case 8: // EMAIL
                i++;
                flag[i]="email";
                option[i]="EMAIL";
                break;
                
                case 9: // MOBILE PHONE
                i++;
                flag[i]="mobile";
                option[i]="MOBILE_PHONE";
                break;
                
                case 10: // IP PHONE
                i++;
                flag[i]="iptel";
                option[i]="IP_PHONE";
                break;
                
                case 11: // MANAGER
                i++;
                flag[i]="mgr";
                option[i]="MANAGER";
                break;
                
                case 12: // TITLE
                i++;
                flag[i]="title";
                option[i]="TITLE";
                break;
                
                case 13: // DEPARTAMENT
                i++;
                flag[i]="dept";
                option[i]="DEPARTAMENT";
                break;
                
                case 14: // HOME DIR
                i++;
                flag[i]="hmdir";
                option[i]="HOMEDIR";
                break;
                
                case 15: // REMOVE
                i--;
                flag[i].empty();
                break;
                
                case 16: // DONE
                wyjscie=1;
                extract_data2();
                
                case 17: // BACK
                wyjscie=1;
                break;
                
                default:
                Beep(1000, 200);
            }
            }
}
void extract_data2()
{
    temp_delete();
    system("cls");
    string line,filename,filename1,c0,c1,c2,c3,c4,c5,c6;
    string opcje[30];
    string token;
    string filename_token;
    int n,h;
    h=0;
    cout << "Please enter filename: ";
    cin >> filename;
    ofstream wynik ("raport.csv");
    for(n=1; n<i+1 ; n++)
             {
             wynik << option[n] << ";";
             }
    wynik << endl << endl;
    ifstream plik_wejsciowy (filename.c_str());
    if (plik_wejsciowy.is_open())
             {
             cout << "\nProccesing file...\n";
             while (! plik_wejsciowy.eof() )
                      { // jedzie po linijce i wywala loginy z spacjami do loginy.txt
                      getline (plik_wejsciowy,line);
                      if (line == "") continue; // to ma niby puste linie spacje omijac
                      c1="@dsquery user -name ";
                      c2=" | dsget user -samid | findstr /v samid | findstr /v dsget>>loginy.txt";
                      c0=c1+'"'+line+'"'+c2;
                      system(c0.c_str());
                      } // koniec wywalania do loginy.txt
             ifstream loginy ("loginy.txt");
             ofstream bezspacji ("temp1.txt");
             while (! loginy.eof() )
                   {
                   getline (loginy,line);
                   if (line == "") continue; // to ma niby puste linie spacje omijac
                   trim2(line); //tutaj wycina spacje
                   bezspacji << line << endl;  //zapisuje do pliku grupy bez spacji
                   }
                   bezspacji.close();
                   ifstream loginy_bezspacji ("temp1.txt");
                   while (! loginy_bezspacji.eof())
                                          {
                                          getline (loginy_bezspacji,line);
                                          if (line == "") continue; // to ma niby puste linie spacje omijac
                                          c1="@dsquery user -samid ";
                                          c2=">>logins_loc.txt";
                                          c0=c1+'"'+line+'"'+c2; //wyciagamy lokacje
                                          system(c0.c_str());
                                          } // koniec wywalania do logins_loc.txt
                      loginy_bezspacji.close();
                      ifstream lokacje("logins_loc.txt");
                      while (! lokacje.eof())
                                          { //extract all chosen options and gives corresponding txt file with data we need.
                                          getline (lokacje,line);
                                          if (line == "") continue; // to ma niby puste linie spacje omijac
                                          for(n=1; n<i+1 ; n++)
                                                    {
                                                    c0="dsget user "+line+" -"+flag[n]+" | findstr /v dsget | findstr /v "+flag[n]+">>"+option[n]+".txt";
                                                    system(c0.c_str());
                                                    }
                                          } //
                      lokacje.close();
// THERE SHOULD BE FUNCTION TO MERGE ALL INFO UP TO 1 CSV FILE..MINE DOESNT WORK
                      ifstream plik_wejsciowy (filename.c_str());

                                   for(n=1; n<i+1 ; n++)
                                            {
                                            filename1==option[n]+".txt";
                                            token==option[n];
                                            ifstream token (filename1.c_str()); //We open all files
                                            while (! token.eof())
                                                  {
                                                  getline (token,line);
                                                  wynik << line << ";";
                                                  cout << line << endl;
                                                  }
                                            }
                                   wynik << endl;
                      
                      loginy.close();
                      wynik.close();
                      done();
                      system ("raport.csv");
                      return;
                      }
                      else czerwony();
                      cout << "Unable to open file";
                      bialy();
                      Sleep(1400);
                      return;
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.