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

Zaczytywanie danych liczbowych z pliku i interpretowanie

Object Storage Arubacloud
0 głosów
213 wizyt
pytanie zadane 14 listopada 2022 w C i C++ przez tryhard Nowicjusz (120 p.)

Cześć,

przychodzę do was z prośbą ponieważ się trochę pogubiłem już chyba i nie wiem czy idę w dobrą stronę. Muszę napisać program który pobiera dane z pliku i na podstawie tych linijek robi konkretne zadania.

Linijki w pliku wyglądają następująco (Jest ich więcej ale na potrzeby zrozumienia wklejam kilka):

 15 58666890801020032
 40 63682870801030132
 17 32134160801043422
   6 67209900801062222
 25 63735100801063022

Linijka ma 21 znaków i teraz najważniejsze - Jeżeli linijka ma na początku 6, 17 lub 25 to dopiero wtedy się nią interesujemy.

Jeżeli znajdziemy linijkę o takim początku i w 20 znaku linijki (przedostatnim) jest "2" to dodajemy do zmiennej +1 a jeżeli jest znak "3" w 20 znaku linijki to -1. Po przeleceniu całego pliku ma wyświetlić zliczoną wartość.

 

Na tą chwilę skroiłem coś takiego, nie wiem czy w dobrym kierunku idę..

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <conio.h>
#include <cstdlib>

int tablica[21] = {0};
int linia;
int nr_linii=1;
int value = 0; // wartość do wyświetlenia

using namespace std;

int main()
{
   fstream plik;
   plik.open("ścieżka do pliku",ios::in);
   
   if(plik.good()==false)
   {
        cout << "Nie można odnaleźć pliku!";
        exit (0);
   }
    
   while(getline(plik,linia))
   {
        switch(nr_linii)
        {
            tablica[21] = linia;
        }
        
        nr_linii++;
   }
   
   plik.close();
   return 0;
}

Chciałbym dodać, że jestem trochę zielony w programowaniu i są to moje początki. Próbowałem tutaj coś z tablicą, ale kompletnie nie wiem czy dobrze tu pozapisywałem. Jeżeli dobrze wszystko zrobiłem to na tą chwilę jest zrobione aby z pliku pobierał linijkę i przypisywał do zmiennej tylko jak tu dalej?

Z góry dzięki za pomoc/podpowiedzi.

komentarz 14 listopada 2022 przez Oscar Nałogowiec (29,320 p.)
Skoro masz się zajmować poszczególnymi pozycjami (cyframi) to jepiej wczytuj dane jako stringi. Nawet jako tablice znakowe, skoro masz ustaloną długość każdej linijki. Ale to powinny być tablice znakowe a nie int.
komentarz 14 listopada 2022 przez TOWaD Mądrala (6,000 p.)
edycja 16 listopada 2022 przez TOWaD

nikt tego, by teraz, tak nie napisał  edit:: ->, bo i unsigned nie dodałem :(;

No i to co napisał Oskar, że tablice znakowe lub string, a nie int[tab], ale int i long longi możesz użyć.

edit2: A tu [gotowiec] na liczbach. 

 

1 odpowiedź

0 głosów
odpowiedź 14 listopada 2022 przez VBService Ekspert (253,340 p.)
edycja 14 listopada 2022 przez VBService

Możesz to zapisać np. tak jak zasugerował @Oscar; 

wczytuj dane jako stringi

wtedy możesz operować na indeksie takiego stringa np.

tym bardziej, że jest stała długość wpisanych danych w każdym wierszu

Linijka ma 21 znaków

 

Jeżeli linijka ma na początku 6, 17 lub 25 to dopiero wtedy się nią interesujemy.

...

20 znaku linijki (przedostatnim) jest "2" to dodajemy do zmiennej +1 a jeżeli jest znak "3" w 20 znaku linijki to -1

[ on-line ]

            // indeks liczony od 0 - pierwsza litera (znak)
            if ((linia[2]=='6') ||
                (linia[1]=='1' && linia[2]=='7') || // 17
                (linia[1]=='2' && linia[2]=='5'))   // 25
            {
                if (linia[19]=='2')
                    licznik++;
                else // w tym kontekście cyfra 3
                    licznik--;
            }

 

1
komentarz 14 listopada 2022 przez TOWaD Mądrala (6,000 p.)
edycja 14 listopada 2022 przez TOWaD
if (string(linia,0,3) =="  6" || string(linia,0,3)==" 17" || string(linia,0,3)==" 25") // może tak ifa

edit:: taki element z C++17

Podobne pytania

0 głosów
1 odpowiedź 167 wizyt
pytanie zadane 29 lipca 2019 w Mikrokontrolery przez niezalogowany
0 głosów
1 odpowiedź 301 wizyt
pytanie zadane 24 października 2017 w C i C++ przez Kifu Nowicjusz (160 p.)
+1 głos
1 odpowiedź 155 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...