Anim Temat założony przez niniejszego użytkownika |
Wielokrotny zapis do pliku. » 2014-09-09 15:10:39 Witajcie. Mam taki problem. Otóż potrzebuję znaleźć metodę na tworzenie nowego pliku z każdą iteracją pętli. Mój kod : void zapiszKrok( int krok, const GAPopulation & pop ) { int i; ofstream file; file.open( "Kolejka.txt" ); string nazwa( "krok" ); for( i = 0; i <= pop.size() - 1; i++ ) { GAGenome & g = pop.individual( i ); GABin2DecGenome & genome =( GABin2DecGenome & ) g; float v = genome.phenotype( 0 ); cout << i << " " << v << " " << f( v ) << endl; file << v << " " << f( v ) << endl; } file.close(); }
Kod ten tworzy nowy plik "Kolejka" . Natomiast mi chodzi o to, aby po każdej iteracji powstawał nowy plik "Kolejka1", "Kolejka2",...,"Kolejka(i)" z dodatkowymi danymi (np. 20 iteracji to 20 plików -> potrzebne mi to jest do obrazowania na wykresie)... chciałem jakoś wrzucić to w pętle, ale nie mam pojęcia za bardzo jak... Pomożecie jakoś ^^ ? |
|
Monika90 |
» 2014-09-09 15:17:30 |
|
Anim Temat założony przez niniejszego użytkownika |
» 2014-09-09 15:30:46 hm. nie ukrywam ,że ta wskazówka nie za bardzo mi pomogła :) można prosić jaśniejsze wytłumaczenie ? Nie jestem biegły w C++. Raczej siadam do niego raz na pół roku - od projektu do projektu. Mea culpa :) |
|
Monika90 |
» 2014-09-09 15:41:37 Czy dobrze rozumiem, że chcesz by populacja zapisała się do pliku o nazwie "KolejkaNNN.txt" gdzie NNN to wartość zmiennej krok? To jest proste: file.open( "Kolejka" + std::to_string( krok ) + ".txt" );
Jeżeli tego nie da się skompilować to znaczy, że masz stary kompilator więc zrób sobie upgrade, albo wybierz inną metodę sposród tych podanych w artykule. |
|
michal11 |
» 2014-09-09 15:59:01 Albo: std::ostringstream oss; oss << "Kolejka" << krok << ".txt"; file.open( oss.str() );
I zarówno to co napisałem ja jak i Monika jest w linku który ona podała. |
|
Anim Temat założony przez niniejszego użytkownika |
» 2014-09-09 16:23:01 Nie do końca o to mi chodzi. Mam cały długi kod, w którym korzystam dalej z tego "string nazwa (krok)".
Teraz ten kod działa tak, że po skompilowaniu tworzy jeden plik w którym znajdują się dane związane z genami populacji, przy czym pętla powoduje, że w jednym pliku jest kilka różnych grup.
Mi natomiast chodzi o to , aby wraz z każdą iteracją pętli powstawał kolejny plik. Jeżeli zadam 20 iteracji to ma powstać 20 plików. Rozumiecie ?
Próbuję właśnie coś z funkcją sprintf()... coś mi nie idzie ^^
Ps: Dzięki za Waszą cierpliwość :)
|
|
michal11 |
» 2014-09-09 16:48:26 No ja właśnie nie do końca rozumiem, chodzi ci o to, że później jeszcze będziesz korzystał z nazw tych plików ? |
|
Anim Temat założony przez niniejszego użytkownika |
» 2014-09-10 10:03:53 Chodzi o wielokrotne tworzeni pliku z pętlą ;p nie wiem jak to wyjaśnić inaczej :) Złożyłem taki kod void zapiszKrok( int krok, const GAPopulation & pop ) { int i; char buffer[ 100 ]; int tekst; string nazwa( "krok" ); tekst = sprintf( buffer, "Kolejka_%d.txt", ngen ); for( i = 0; i <= ngen; i++ ) { ofstream file; file.open( tekst ); for( i = 0; i <= pop.size() - 1; i++ ) { GAGenome & g = pop.individual( i ); GABin2DecGenome & genome =( GABin2DecGenome & ) g; float v = genome.phenotype( 0 ); cout << i << " " << v << " " << f( v ) << endl; file << v << " " << f( v ) << endl; } file.close(); } }
Tylko teraz wyskakuje mi błąd "invalid conversion from int to char...", i kompilator zgłasza to w momencie rozpoczęcia drugiej pętli. Nie wiem jak rozwiązać ten błąd. Mogę liczyć na jakąś wskazówkę ? ^^ |
|
« 1 » 2 |