• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Fstream odczyt pliku tekstowego mnozenie przez siebie poszczegolnych linii

0 głosów
88 wizyt
pytanie zadane 13 sierpnia w C i C++ przez Bulbi Nowicjusz (160 p.)

Napisałem prosty kod 

        cout << "Wyplate ktorego pracownika chcesz zobaczyc ? : " << endl;
        cin >> nazwa_p;
        nazwa_p+=".txt";

        int nr_linii=1;
        string pensja;
        string linia;
        fstream plik;
        plik.open(nazwa_p, ios::in);
        if(plik.good() == true)
        {
        while(!plik.eof())
        {
            getline(plik, linia);
            nr_linii = pensja; // już nie miałem pomysłu 
            nr_linii++;
        }
        plik.close();
        }

Chciałbym aby program pobrał pierwszą linie kodu ( która jest traktowana jako stawka godzinowa pracownika), zapamiętał ją sobie dodał do ciebie wszystkie pozostałe linie kodu (godziny pracownika), a potem wynik sumy liczb pomnożył przez tą pierwszą liczbę.Można też stworzyć jakąś alternatywe do tego niestety nie mam pomysłu na napisanie takiej pętli aby pobierała linie od 2 dodawała 2 z 3 itd a na końcu wymnożyła się z pierwszą linią pliku.txt. Chętnie zapoznam się z jakimikolwiek pomysłami, mogą być delikatne podpowiedzi, a jeśli ktoś poda gotowe rozwiąznie to z chęcią przyjme je z wyjaśnieniem. Z góry dzięki za pomoc :)

komentarz 13 sierpnia przez Wraith Gaduła (4,010 p.)
uzyj bazy danych
komentarz 13 sierpnia przez Bulbi Nowicjusz (160 p.)
Odeślesz do jakiegoś dobrego poradnika gdzie mogę o tym poczytać  (nie wiem dokładnie o jaki typ tych baz danych chodzi, nie przerabiałem tego jeszcze )? Dzięki za pomoc
komentarz 13 sierpnia przez Wraith Gaduła (4,010 p.)
Nie wiem czy to musi byc na sile plik czy mozesz uzyc bazy danych ja polecalby LiteSQL
komentarz 13 sierpnia przez Bulbi Nowicjusz (160 p.)
Z tego co widze to juz programowanie obiektowe nie ma na to innego sposobu ? Tak jak pisalem wyzej zeby dodawalo wszystkie godziny (czytajac od 2 linii kodu do samego konca ) a potem mnozylo przez pierwsza ?
komentarz 13 sierpnia przez j23 VIP (105,900 p.)

Proponowanie bazy danych to tego prostego zadania to nieporozumienie.

@Bulbi, pokaż, jak wygląda zawartość pliku. W jakiej formie jest stawka godzinowa i czas.

1 odpowiedź

0 głosów
odpowiedź 13 sierpnia przez tangarr Nałogowiec (29,940 p.)
Ważne: Po wczytaniu linii musisz przekonwertować ją na liczbę (http://www.cplusplus.com/reference/string/stoi/).
Algorytm:
1. Wczytujesz stawkę
2. Ustawiasz liczbę przepracowanych godzin na 0
3. Dopóki możesz wczytać linię dodawaj wczytaną wartość do liczby przepracowanych godzin
4. Przemnóż stawkę przez liczbę przepracowanych godzin i wyświetl wynik
komentarz 4 dni temu przez Bulbi Nowicjusz (160 p.)
edycja 4 dni temu przez Bulbi

Okay dzieki wielkie ostatnie pytanie jest takie, dlaczego jeśli w pliku txt pracownik ma np. 10 zl stawke na godzine i nastepnie ma

30h

40h

50h

to liczy tylko 10*30 = 300

nie dodaje sumy liczb 30+40+50= 120*10

Mam nadzieje ze ci to wytlumaczylem

edit Jeśli nie wpisywał byś

std::ifstream ifs(nazwa_p);

Tylko zwyczajne 

ifstream ifs(nazwa_p);

To byłby błąd ?

komentarz 3 dni temu przez j23 VIP (105,900 p.)

dlaczego (...) nie dodaje sumy liczb

Dlatego tak się dzieje, bo po liczbie jest litera h, a kod, który podałem, nastawiony jest na czytanie tylko liczb (próba odczytu litery jako liczby powoduje przejście strumienia w stan fail, co nie umożliwia dalszy odczyt z pliku). Wcześniej w komentarzu do pytania poprosiłem Cię o podanie (przykładowej) zawartości pliku, bo coś podejrzewałem, że w pliku nie będą same liczby. Nie zrobiłeś tego, a powinieneś.

Jak już musi być ta litera na końcu, to tak zrób:

while ((ifs >> hours).ignore())

 

To byłby błąd ?

Nie, jeśli dasz na początku using namespace std;

komentarz 3 dni temu przez Bulbi Nowicjusz (160 p.)

Dobra już wszystko rozumiem, wielkie dzięki za spędzony czas przy pomocy ! :D

10
10 Dodano Sun Aug 18 10:49:26 2019

15 Dodano Sun Aug 18 10:49:30 2019

To jest przykładowa zawartość pliku, dlatego ze w programie umieściłem jeszcze funkcje sprawdź godziny pracownika i chciałem dodać urozmaicenie w postaci wyświetlania daty dodanych godzin.Ale z tego co widzę to raczej nie można tego zamieścić w pliku tak aby program działałał. Jeszcze raz wielkie dzięki ! yessmiley

komentarz 3 dni temu przez Bulbi Nowicjusz (160 p.)
edycja 3 dni temu przez Bulbi
Obszedłem problem na około robiąc to w ten sposób, że gdy użytkownik dodaje pracownika tworzą się dwa pliki txt jeden o nazwie nazwa_p+=".txt" a drugi o nazwa_p+="_w.txt"

I w tym zwyklym dodaje to z "Dodano Sun Aug 18 10:49:26 2019" A drugi dodaje bez tego "Dodano Sun Aug 18 10:49:26 2019" i przy wyplacie czyta ten który jest bez liter i wszystko działa dzięki jeszcze raz ;) !

 

topic.close();
komentarz 3 dni temu przez j23 VIP (105,900 p.)

Słabe. Tak zrób:

    std::tm t = {};
    unsigned hours;
    
    while (ifs >> hours >> std::get_time(&t, "%a %b %d %H:%M:%S %Y")) {
        std::cout << hours << '\n'
            << "year:" << 1900 + t.tm_year << '\n'
            << "day: " << t.tm_mday << '\n'
            << "month: " << t.tm_mon << "\n\n";
    }

Przykładowy odczyt linii w formacie "10 Sun Aug 18 10:49:26 2019" (dziwny format). Wywaliłem słowo Dodano, bo jest ono kompletnie zbędne.

 

Jak nie chcesz odczytywać daty, to wystarczy tak:

while ((iss >> hours).ignore(std::numeric_limits<std::streamsize>::max(), '\n')) {
        ...
}

 

Podobne pytania

0 głosów
2 odpowiedzi 69 wizyt
pytanie zadane 22 maja 2018 w C i C++ przez kamila131 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 53 wizyt
0 głosów
1 odpowiedź 60 wizyt
Porady nie od parady
Publikując kody źródłowe korzystaj ze specjalnego bloczku koloryzującego składnię (przycisk z napisem code w edytorze). Nie zapomnij o ustawieniu odpowiedniego języka z rozwijanego menu oraz czytelnym formatowaniu kodu.Przycisk code

65,728 zapytań

112,369 odpowiedzi

237,231 komentarzy

46,688 pasjonatów

Przeglądających: 212
Pasjonatów: 9 Gości: 203

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...