Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Pobranie konkretnych danych z pliku

Ostatnio zmodyfikowano 2011-04-15 19:01
Autor Wiadomość
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:

C/C++
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:
C/C++
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>

using namespace std;


// blok funkcji


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;
}
P-30596
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.
P-30603
malan
» 2011-04-11 22:11:57
P-30641
xrtwo
Temat założony przez niniejszego użytkownika
» 2011-04-15 19:01:23
Zrobiłem to tak:
C/C++
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 );
        //cout << linia2 << '\n';
        if( pomocniczy.compare( 0, 5, linia2, 20, 5 ) == 0 ) {
            cout << "Marka sie zgadza" << '\n';
            // wpisywanie kolumny do wektora
        } 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.
P-30813
« 1 »
  Strona 1 z 1