Pobranie konkretnych danych z pliku
Ostatnio zmodyfikowano 2011-04-15 19:01
xrtwo Temat założony przez niniejszego użytkownika |
Pobranie konkretnych danych z pliku » 2011-04-11 08:33:07 Przykładowy plik do wczytania: 5.1, 3.5, 1.4, 0.2, honda 4.9, 3.0, 1.4, 0.2, honda 6.4, 3.2, 4.5, 1.5, mazda 6.9, 3.1, 4.9, 1.5, mazda 6.2, 3.4, 5.4, 2.3, nissan 5.9, 3.0, 5.1, 1.8, nissan
Teraz chciałbym umożliwić sobie dokonanie obliczeń tylko na kolumnach które dotyczą konkretnej marki, a nie całej kolumny i szczerze mówiąc nie wiem jak się do tego zabrać. Kod programu: #include <iostream> #include <fstream> #include <sstream> #include <vector> #include <string> #include <cmath> #include <algorithm>
using namespace std;
int main( int argc, char * argv[] ) { double kolumna1, kolumna2, kolumna3, kolumna4; string kol1; fstream plik; int kolumna; char nazwa[ 20 ]; vector < double > wektor; vector < string > wektorS; cout << "Podaj nazwe pliku: "; cin >> nazwa; plik.open( nazwa, ios::in ); if( plik.is_open() == false ) { cerr << "Nie mozna otworzyc pliku." << endl; return 1; } cout << "Plik otwarty." << '\n'; cout << "Podaj kolumne: "; cin >> kolumna; while( plik.good() ) { char znak; plik >> kolumna1 >> znak; plik >> kolumna2 >> znak; plik >> kolumna3 >> znak; plik >> kolumna4 >> znak; plik >> kol1 >> znak; string linia; getline( plik, linia ); if( argc == 1 ) wektor.push_back( kolumna1 ); else if( argc == 2 ) wektor.push_back( kolumna2 ); else if( argc == 3 ) wektor.push_back( kolumna3 ); else if( argc == 4 ) wektor.push_back( kolumna4 ); } cout << "TEST" << '\n'; for( int i = 0; i < n; i++ ) { cout << "Wektor nr " << i << ": " << wektor[ i ] << '\n'; } return 0; }
|
|
DejaVu |
» 2011-04-11 14:12:37 1. Przejechanie pętlą for po całej tablicy.
2. Wewnątrz bloku instrukcji if sprawdzający czy to jest marka, która Ciebie interesuje.
|
|
malan |
» 2011-04-11 22:11:57 |
|
xrtwo Temat założony przez niniejszego użytkownika |
» 2011-04-15 19:01:23 Zrobiłem to tak: cout << "Podaj klase dla ktorej chcesz dokonac obliczen: " << '\n'; cout << "1. honda" << '\n'; cout << "2. mazda" << '\n'; cout << "3. nissan" << '\n'; cout << "4. Wszystkie" << '\n'; cin >> marka;
while( plik.good() ) { if( marka == 1 ) { pomocniczy = "honda"; getline( plik, linia2 ); if( pomocniczy.compare( 0, 5, linia2, 20, 5 ) == 0 ) { cout << "Marka sie zgadza" << '\n'; } else { cout << "Blad porownania z plikiem!" << '\n'; } } else { cout << "Bledny wybor"; return 0; }
Tylko teraz nie moge poprawnie wpisać danych do wektora. Wiaze sie to z tym, ze gdy przekaze strumien(kolumne) z wiersza do zmiennej plik >> kolumna1 >> znak; to automatycznie wiersz jest ucinany o to co zostalo przekazane i w nastepnym przejsciu petli funkcja compare nie moze poprawnie porownac stringow. Prosze o podpowiedzi. |
|
« 1 » |