000
11.07.2005, 07:57 Uhr
~lilian
Gast
|
Hallo ich habe das folgende Code geschrieben um Dateien von der Größe zw. 10 und 200MB aber leider dauert sehr lange . wie kann ich es optimmieren oder gibt´s spezielle Func dafür?Danke
C++: |
//******************************************************************************** int readFile() { //-------------- Existenztest der Datei -------------------------- char szfile[50]; ifstream file; do { file.clear(); //clear status flags des Inputstreams "dat" cout<<"Dateiname inklusive Pfad eingeben: "; cin>>szfile; file.open(szfile,ios::in); // "dat" wird geöffnet zum Lesen if(file.fail()) // Fehlertest durchführen cout<<"Datei existiert nicht!"<<endl; cout<<"\ndatei is open\n"; }while(file.fail()); //------------------------------------------------------------------- const string str1="Rec "; const string str2= "time_record for";
do { string strline; int nrow; do { if(bheader==false) { getline(file,strline); if(strline!="") { string sub1 = strline.substr(0,15);
if (str2 == sub1) // wenn sub1 == "time_record for" { string sub2= strline.substr(16); v_header.push_back(sub2); } string sub3 = strline.substr(0,4); if (str1 == sub3) // wenn sub3 == "Rec " { getline(file,strline); for (nrow=0;nrow<6; ++nrow) // nur die zweite und die vierte Zeile lesen { getline(file,strline); if(nrow==1) { string x; std::stringstream str(strline); str>>x>>x>>x>>x>>x; v_header.push_back(x); } if(nrow==3) { string a, b, c, d, x, y; std::stringstream(strline)>>a>>b>>c>>d>>x>>y; v_header.push_back(y); bheader=true; }
} } } } }while(nrow!=6);
if (nrow==6) { int index=0; string s; do { getline(file,strline); for(int k=0;k<15;++k) { s.resize(k+1); s[k]=strline[k]; } if (s=="time_record for") { // printData(); string a, b, c; std::stringstream(strline)>>a>>b>>c; v_header.push_back(c);
nrow=0; bheader=false; chi++; continue; }
string a,b,c,d,e,f; std::stringstream str(strline); str>>a>>b>>c>>d>>e>>f; //if ( !str.empty() ) if (a!="" && b!=""&& c!=""&& d!=""&& e!=""&& f!="") { mat_data.resize(chi+1); mat_data[chi].resize(index+6); mat_data[chi][index] = a; mat_data[chi][index+1] = b; mat_data[chi][index+2] = c; mat_data[chi][index+3] = d; mat_data[chi][index+4] = e; mat_data[chi][index+5] = f; index=index+6; }
}while(s!="time_record for" && !file.eof()); }
}while(!file.eof()); file.close(); // printData();
return 0; }
//******************************************************************************** int readFile() { //-------------- Existenztest der Datei -------------------------- char szfile[50]; ifstream file; do { file.clear(); //clear status flags des Inputstreams "dat" cout<<"Dateiname inklusive Pfad eingeben: "; cin>>szfile; file.open(szfile,ios::in); // "dat" wird geöffnet zum Lesen if(file.fail()) // Fehlertest durchführen cout<<"Datei existiert nicht!"<<endl; cout<<"\ndatei is open\n"; }while(file.fail()); //------------------------------------------------------------------- const string str1="Rec "; const string str2= "time_record for";
do { string strline; int nrow; do { if(bheader==false) { getline(file,strline); if(strline!="") { string sub1 = strline.substr(0,15);
if (str2 == sub1) // wenn sub1 == "time_record for" { string sub2= strline.substr(16); v_header.push_back(sub2); } string sub3 = strline.substr(0,4); if (str1 == sub3) // wenn sub3 == "Rec " { getline(file,strline); for (nrow=0;nrow<6; ++nrow) // nur die zweite und die vierte Zeile lesen { getline(file,strline); if(nrow==1) { string x; std::stringstream str(strline); str>>x>>x>>x>>x>>x; v_header.push_back(x); } if(nrow==3) { string a, b, c, d, x, y; std::stringstream(strline)>>a>>b>>c>>d>>x>>y; v_header.push_back(y); bheader=true; }
} } } } }while(nrow!=6);
if (nrow==6) { int index=0; string s; do { getline(file,strline); for(int k=0;k<15;++k) { s.resize(k+1); s[k]=strline[k]; } if (s=="time_record for") { // printData(); string a, b, c; std::stringstream(strline)>>a>>b>>c; v_header.push_back(c);
nrow=0; bheader=false; chi++; continue; }
string a,b,c,d,e,f; std::stringstream str(strline); str>>a>>b>>c>>d>>e>>f; //if ( !str.empty() ) if (a!="" && b!=""&& c!=""&& d!=""&& e!=""&& f!="") { mat_data.resize(chi+1); mat_data[chi].resize(index+6); mat_data[chi][index] = a; mat_data[chi][index+1] = b; mat_data[chi][index+2] = c; mat_data[chi][index+3] = d; mat_data[chi][index+4] = e; mat_data[chi][index+5] = f; index=index+6; }
}while(s!="time_record for" && !file.eof()); }
}while(!file.eof()); file.close(); // printData();
return 0; }
|
Vielen Dank Dieser Post wurde am 11.07.2005 um 12:36 Uhr von Pablo editiert. |