rrriav
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый вечер! Написала программу по обработке данных из файла в VC++ 6.0. Все работает, но мне нужно сделать такую обработку сделать не для одного единственного файла, а для нескольких. Дописав в программе задание на обработку следующего файла после текущего, получила ошибку, с которой никак не могу разобраться. При нажатии "прервать" выдает следующее как я поняла, не открывается второй файл, хотя первый файл я вроде закрыла. Прилагаю основную часть кода: Код: #include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <math.h> #include <cstdlib> #include <stdio.h> using namespace std; std::ofstream out02("C:\\statistica1\\chislo trigg.txt"); std::ofstream out03("C:\\statistica1\\event_vv.txt"); int numb[10001]; double px[1000],py[1000],pz[1000],pL[1000], pLas[1000], v2[1000], phiplus[1000],phiminus[1000], ptrig[1000], passoc[1000], vtwo,v2two, pLold,pLmax,pLasold,pLasmax, vv; int type[1000]; int Ntrig=0; int Nassoc=0; int NN=0; double pLmaxx=0; double pLasmaxx=0; int Nujnii[860]; int kolichestvo =32; int dN[10000]; int dNabs[100000]; int dNas[10000]; int dNasabs[100000]; const double PI = 3.141592653589793; std::ifstream in; int chislosobitiy; //количество событий //********************** 2+. Процедура выделения события в файле ********************** int sobitiya(char *address) { FILE * pFile1; pFile1 = fopen (address,"r"); char ch; int N=0; // число строк int k=0, k_old=0, k_new=0; int number=0; // количество событий int num[100000]; std::ofstream out444("C:\\statistica1\\num.txt"); // открытие файла, в который будет записан набор номеров строк начала событий for (int o=0; o<100000; o++) num[o]=0; while ((ch = fgetc(pFile1)) != EOF) { k_old=k_new; k++; //putchar(ch); if (ch=='\n') { N++; k_new=k; k=0; if (k_new<k_old) { // при определении нового события число слов в новой строке меньше чем в предыдущей num[number]=N; //номер строки, соответствующей новому событию number++;//увеличиваем количество событий на 1 out444<<N<<" ";//запись номера в соответсвующий файл std::cout<<N<<"\n"; } } } out444<<(N+2);// запись в файл кочества строк out444.close(); // pFile1.flush(); fclose (pFile1); chislosobitiy=number+1; //количество событий*/ return 0; } //****************2. ВЫДЕЛЕНИЕ СОБЫТИЙ В ФАЙЛЕ************************ void vstuplenie(char *address) { in.open(address,ios::beg); if(!in) std::cout << "Error open file\n"; string s1; sobitiya(address);// процедура выделения событий double rrr; std::ofstream out21("C:\\statistica1\\event_n_in_the_events.txt"); std::ifstream num("C:\\statistica1\\num.txt"); //-------считывание номеров строк, соответсующих новому событию------- for(int il=0; il<chislosobitiy; il++) { num>>numb[il]; } num.close(); //-------------------------------------------------------------------- int n0; n0=numb[1]-numb[0]-1;// число частиц в событии out21<<n0<<"\n"; getline(in, s1); getline(in, s1); getline(in, s1); getline(in, s1); run(n0,0); // переход к процедуре считывания данных одного события for(int o=2; o<chislosobitiy; o++) { in>>rrr>>rrr>>rrr>>rrr; n0=numb[o]-numb[o-1]-1; // число частиц в событии out21<<n0<<"\n"; run(n0,o); // переход к процедуре считывания данных одного события } in.close(); out21.close(); } //*****************1. НАЧАЛО ПРОГРАММЫ********************** void main() { for(int ze=0; ze<kolichestvo; ze++) dN[ze]=0; for(int ze2=0; ze2<1000; ze2++) v2[ze2]=0; vtwo=0; v2two=0; char *ssilka, *ssilka2; //--------------исходный файл----------------- ssilka="C:\\statistica\\EPOS130-2-pp-14000-5-1000.data"; vstuplenie(ssilka); // переход к процедуре выделения событий в файле ssilka2="C:\\statistica1\\EPOS130-1-pp-14000-22-1000.data"; vstuplenie(ssilka2); //-------------------------------------------- //-------------Файлы, куда записываются результ. распределения-------------- std::ofstream out11("C:\\statistica1\\event_dN_dfi.txt"); std::ofstream out12("C:\\statistica1\\event_vv.txt"); //out11<<"{"; for(int zel=0; zel<kolichestvo; zel++) out11<<dN[zel]<<"\n "; out11<<"\nЧисло пар = \n "<<Ntrig; out11<<"\nСредний эллиптический поток пар = \n "<<vtwo/NN; out11.close(); out02.close(); out03.close(); std::cout<<"It's ok"<<"\n"; } | помогите пожалуйста решить эту проблему. | Всего записей: 8 | Зарегистр. 21-05-2007 | Отправлено: 18:34 16-12-2008 | Исправлено: rrriav, 20:18 16-12-2008 |
|