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

Operacje na pliku, wektor.

Ostatnio zmodyfikowano 2011-03-28 17:04
Autor Wiadomość
xrtwo
Temat założony przez niniejszego użytkownika
Operacje na pliku, wektor.
» 2011-03-28 12:00:44
Mam przykładowy plik:

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

Muszę pobrać z niego kazda kolumne  gdzie sa liczby (do pozniejszych dzialan na nich) i z pierwszą kolumna sobie poradzilem ale nie wiem jak dostac sie tylko do drugiej kolumny.

C/C++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>


using namespace std;

int main() {
    double liczba;
    ifstream plik;
    vector < double > wektor;
    plik.open( "C:\\Qt\\qtcreator-2.0.1\\test.data", ios::in );
   
    if( plik.is_open() == false )
    {
        cerr << "Nie mozna otworzyc pliku." << endl;
        return 1;
    }
   
    cout << "Plik otwarty." << endl;
   
   
    while( plik.good() )
    {
        plik >> liczba;
        string linia;
        getline( plik, linia );
        wektor.push_back( liczba );
    }
   
    //wypisanie
    for( int i = 0; i < wektor.size() - 1; i++ )
    {
        cout << "Wektor nr " << i << ": " << wektor[ i ] << '\n';
    }
   
    cout << wektor[ 0 ] + wektor[ 1 ];
   
    plik.close();
    return 0;
}
P-29871
DejaVu
» 2011-03-28 14:40:41
C/C++
plik >> liczba1;
plik >> liczba2;
plik >> liczba3;
plik >> liczba4;
getline( plik, linia );
P-29875
xrtwo
Temat założony przez niniejszego użytkownika
» 2011-03-28 16:27:55
Nadal nie działa, program kompiluje sie ale wypisuje tylko pierwsza pozycje wektora dla liczba1.

C/C++
#include <iostream>
#include <fstream>
#include <vector>
#include <string>


using namespace std;

int main() {
    double liczba1, liczba2, liczba3, liczba4;
    ifstream plik;
    vector < double > wektor;
    plik.open( "C:\\Qt\\qtcreator-2.0.1\\test.data", ios::in );
   
    if( plik.is_open() == false )
    {
        cerr << "Nie mozna otworzyc pliku." << endl;
        return 1;
    }
   
    cout << "Plik otwarty." << endl;
   
   
    while( plik.good() )
    {
        plik >> liczba1;
        plik >> liczba2;
        plik >> liczba3;
        plik >> liczba4;
        string linia;
        getline( plik, linia );
        wektor.push_back( liczba1 );
    }
   
    //wypisanie
    for( int i = 0; i < wektor.size() - 1; i++ )
    {
        cout << "Wektor nr " << i << ": " << wektor[ i ] << '\n';
    }
   
    cout << wektor[ 0 ] + wektor[ 1 ];
   
    plik.close();
    return 0;
}
P-29882
malan
» 2011-03-28 16:44:17
Przecież do vectora dodajesz jedną liczbę -
wektor.push_back( liczba );

Poza tym, ja bym Ci radził zrobić do tego strukturę:
C/C++
struct Car
{
    double num1,
    double num2,
    double num3,
    double num4,
    std::string str
};

int main()
{
    std::vector < Car > cars;
    //...
    double num1, double num2, double num3, double num4, std::string str;
   
    while( file >> num1 >> num2 >> num3 >> num4 >> str; )
    {
        cars.push_back( Car( num1, num2, num3, num4, str ) );
    }
}

Proponuję również usunąć te przecinki pomiędzy poszczególnymi liczbami, czyli:
5.1 3.5 1.4 0.2 honda
P-29884
DejaVu
» 2011-03-28 16:48:57
C/C++
char znak;
plik >> liczba1 >> znak;
plik >> liczba2 >> znak;
plik >> liczba3 >> znak;
plik >> liczba4 >> znak;
getline( plik, linia );
P-29885
malan
» 2011-03-28 16:54:32
@DejaVu: Tak też można, ale po co robić sobie dodatkową robotę? ;) Przecież w tej sytuacji ważne jest, żeby to komputer dane zrozumiał, a nie człowiek ;p.
P-29889
xrtwo
Temat założony przez niniejszego użytkownika
» 2011-03-28 17:04:36
@malan
ale ja rowniez chcialbym zrozumiec ;p

@DejaVu
Dziala, dziekuje. Tylko nie rozumiem w jakim celu została zastosowana ta dodatkowa zmienna?

Juz kumam chodzi o ten przecinek ;p
P-29890
« 1 »
  Strona 1 z 1