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

Dane z pliku..

Ostatnio zmodyfikowano 2009-05-24 19:42
Autor Wiadomość
driver1995
Temat założony przez niniejszego użytkownika
Dane z pliku..
» 2009-05-24 13:26:52
Witam...
Mam pytanie... Powiedzmy, że robie sobie dokument txt w którym mam jakieś dane, np ceny jakichś produktów:

Nazwa        Cena        Ilosc

Chipsy       2.00          2
Ser          5.00          3
?Farrari :P  1500000.99    1


I pytanie brzmi: Jak to odczytać w programie (żeby móc np. obliczyć sumę cen, różnicę cen, różnicę ilości, sumę, wpisać nową cenę, nową ilość)... Tak ogółem mówiąc to z pliku tekstowego chcę zrobić tablicę i nie wiem jak się do tego zabrać ;/ ;/ ;/
P-7150
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-24 14:22:34
No mniej więcej o to... Tylko czy to jest jedyny sposób? Czy trzeba używać aż tylu bibliotek? No bo jakoś tak nie wszystko dokładnie rozumiem... I widziałem też gdzieś (nie pamiętam gdzie) kod gdzie właśnie było to wywoływane krócej i za pomocą 3 czy nawet 2 bibliotek... Tylko najgorsze że nie pamiętam ni krzty ;/ ;/ Proszę o kolejne propozycje;d
P-7151
pekfos
» 2009-05-24 14:50:11
daj fstream i getline(plik,str,' ') pobierasz teksty
kolejno do tablicy stringow (nazwa, cena, ilosc) i masz
to jako teksty. później konwertujesz sobie tekst na liczby
(cena i ilosc) (cena musi byc zapisana jako 120 a nie 1.20
(później podzielisz przez 100)) konwertujesz tak:
C/C++
int convert( string t ) {
    int l = 0;
    for( int a = 0; a < t.length(); a++ ) {
        if( t[ a ] >= 48 && t[ a ] <= 57 ) l = l * 10 +( int ) t[ a ] - 48;
       
    }
    return l;
}
kod wykonaj sam:)

//edit:

albo zrób tak:
C/C++
#include <fstream>
#include <iostream>

using namespace std;

int conv( string w ) {
    int l = 0;
    for( int a = 0; a < w.length(); a++ ) {
        if( w[ a ] >= 48 && w[ a ] <= 57 ) l = l * 10 +( int ) w[ a ] - 48;
       
    }
    return l;
}

class item {
    string nazwa;
    int cena, ilosc;
public:
    item();
    double dajCene();
    int dajIlosc();
    string dajNazwe();
    void dodajIlosc( int );
    void dodajCene( int );
    void dodajNazwe( string );
};

item::item() {
    cena = 0;
    ilosc = 0;
    nazwa = "";
}
double item::dajCene() {
    return cena / 100;
}
int item::dajIlosc() {
    return ilosc;
}
string item::dajNazwe() {
    return nazwa;
}
void item::dodajIlosc( int _ilosc ) {
    ilosc = _ilosc;
}
void item::dodajCene( int _cena ) {
    cena = _cena;
}
void item::dodajNazwe( string _nazwa ) {
    nazwa = _nazwa;
}

item * realloc( item * d, int size, int ilosc ) {
    item * data = new item[ ilosc ];
    for( int a = 0; a < size; a++ ) {
        data[ a ] = d[ a ];
    }
    return data;
}

enum ITEM_STATUS {
    IT_NAZWA,
    IT_CENA,
    IT_ILOSC
};

item parse_data( string d ) {
    item a;
    string * b = new string[ 3 ];
    ITEM_STATUS it = IT_NAZWA;
    for( int c = 0; c < d.length(); c++ ) {
        if( d[ c ] == ' ' && it == IT_NAZWA ) it = IT_CENA;
        else if( d[ c ] == ' ' && it == IT_CENA ) it = IT_ILOSC;
        else if( it == IT_NAZWA ) b[ 0 ] += d[ c ];
        else if( it == IT_CENA ) b[ 1 ] += d[ c ];
        else if( it == IT_ILOSC ) b[ 2 ] += d[ c ];
       
    }
    a.dodajNazwe( b[ 0 ] );
    a.dodajCene( conv( b[ 1 ] ) );
    a.dodajIlosc( conv( b[ 2 ] ) );
    delete[] b;
    return a;
}

item * getItemsFromFile( const char * _f ) {
    fstream plik;
    plik.open( _f, ios::in );
    string buffer;
    int size = 1;
    item * data = new item[ size ];
    getline( plik, buffer );
    data[ size - 1 ] = parse_data( buffer );
    while( !plik.eof() ) {
        size++;
        data = realloc( data, size - 1, size );
        getline( plik, buffer );
        data[ size - 1 ] = parse_data( buffer );
    }
    return data;
}

int main()
{
    item * data = getItemsFromFile( "przedmioty.txt" );
    for( int a = 0; a < 3; a++ )
         cout << data[ a ].dajNazwe() << endl << data[ a ].dajCene() << endl << data[ a ].dajIlosc() << endl << endl;
   
    getchar();
    return 0;
}

skoro nie chcesz STL
tylko iostream i fstream:)
P-7152
pixelmaster
» 2009-05-24 18:23:49
można coś takiego
C/C++
#include <stdio.h>
//-----------
FILE * plik;
char nazwa[ 250 ];
double cena;
int ilosc;
//-----------
// Otwieramy plik jesli to mozliwe
if( !( plik = fopen( "plik.txt", "r" ) ) ) {
    printf( "Nie mozna otworzyc pliku!" );
    exit( 0 );
}
// Sczytujemy dane o ile są poprawne
if( !fscanf( plik, "%s %d %d", & nazwa, & cena, & ilosc ) || cena < 0 || ilosc < 0 ) {
    printf( "Niepoprawne dane w pliku!" );
    exit( 0 );
}

fclose( plik );
i sczytywanie w jakąś pętle for np.
P-7153
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-24 18:50:01
Redagując wszystkie propozycje najlepsza wydaje mi się pierwsza (manfreda)... Teoretycznie mógłbym skopiować cały kod i by poszło, ale wole go zrozumieć, w związku z tym mam parę pytań:
1. Do czego służą biblioteki <vector>, <iterator>, <algorithm> ???
2. Czemu "double cena;" jest brzydko???
3. Czemu przy linijce z istream..operator nie ma const a przy ostream jest (tam gdzie item)???
4. Co oznacza "/t" ??? (slash odwrotnie tylko nie chciał się napisać)
5. Tego nie rozumiem:
C/C++
vector < item > rzeczy;
item temp;
copy( istream_iterator < item >( plik ), istream_iterator < item >(), back_inserter( rzeczy ) );
//mamy odczytane, siedzi w tablicy rzeczy
//dostęp:
//rzeczy[x].nazwa to nazwa
//rzeczy[x].cena to cena
//rzeczy[x].ilosc to ilosc
//x to liczba całkowita dodatnia, MNIEJSZA NIŻ rzeczy.size()!
//wypiszemy wszystko na stdout
copy( rzeczy.begin(), rzeczy.end(), ostream_iterator < item >( cout, "\n" ) );
6. Czy to wszystko (ewentualnie z drobnymi przeróbkami) można zrobić w allegro???
P-7154
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-24 19:36:24
6. Chodzi mi o to, że chce to zrobić w allegro, i chodzi mi to to czy to będzie inaczej wyglądało.....

Do reszty nie mam pytań :P:P:P
P-7155
driver1995
Temat założony przez niniejszego użytkownika
» 2009-05-24 19:49:04
Wiem... Ale chodzi mi o to, że obok allegro i to użyte, czyli:
C/C++
#include<allegro.h>
#include<fstream>
//i inne //...
P-7156
DeBugger
» 2009-05-24 20:39:58
Mogą.
P-7157
« 1 » 2
  Strona 1 z 2 Następna strona