czytanie LICZB z pliku tekstowego

0

Witam - mam z pliku (dane oddzielone TAB):

plec	wiek	wykszt	miejsce	czest
k	34	podstawowe	<50	rzadziej
k	16	podstawowe	<50	codziennie lub prawie codziennie
m	37	podstawowe	<50	rzadziej
k	44	średnie	50-500	rzadziej
m	29	średnie	50-500	codziennie lub prawie codziennie
k	58	średnie	50-500	codziennie lub prawie codziennie
m	15	podstawowe	50-500	codziennie lub prawie codziennie
m	18	podstawowe	<50	codziennie lub prawie codziennie
m	23	średnie	<50	rzadziej
m	55	podstawowe	50-500	rzadziej
m	20	średnie	50-500	codziennie lub prawie codziennie
k	43	średnie	50-500	codziennie lub prawie codziennie
k	31	wyższe	50-500	codziennie lub prawie codziennie
...

przeczytać tylko wartości z kolumny WIEK i zapisać do tablicy, jednakże:

fstream plik;

plik.open("zad1_pop.txt",ios::in);
  if(plik.good())
  {
    char napis[256];
    while(!plik.eof())
    {
      plik>>napis;
      if ((atoi(napis)>0)) 
      {
           x[i]= atoi (napis);
           i++;
      }
    }
    plik.close();

nie pomaga, gdyż do tablicy lądują również wartości "50-500".

0

To chyba logiczne, skoro kazałes wczytywać mu wszystkie liczby...
Wczytuj całą linię za pomocą string::getline() a potem wyciągaj z tego stringa pierwszą występującą liczbę (przyda sie string::find() i istringstream)

0

to ma byc cos w tym stylu:

std::string linia;
int nrLinii = 0;
while(std::getline(plik,linia) {
     ++nrLinii;
     std::string wykszt, miejsce, czest;
     char plec;
     int wiek;

     std::istringstream liniaStream(linia);

     if(! liniaStream >> plec) {
          std::cerr << "zly format linii (kolumna plec) nr: " << nrLinii;
          continue;
     }

     if(! liniaStream >> wiek) {
          std::cerr << "zly format linii (kolumna wiek) nr: " << nrLinii;
          continue;
     }

     // itd
     ....
}// while
0

Możesz skorzystać z kontenera vector, który ma cechy tablicy. Na pewno można to napisać lepiej, ale podam co naprędce skleciłem:

#include <iostream> 
#include <fstream>
#include <conio.h>
#include <vector>
using namespace std;
int main() 
{ 
 string st,sp;
 vector<int>wiek;
 int liczba; 
 const char* t ;
 bool yes;  
   ifstream plik("d:\\1.txt");
    while (!plik.eof() )
    {
      getline(plik,st);
      sp="";
      yes=true;
       for(int i=0;i<st.length();i++)
        {
          if(!isdigit(st[i]))continue;
          if(yes==false)break;
           else
           {
             sp=sp+st[i];
             if(!isdigit(st[i+1]))
             {             
              t=sp.c_str();
              liczba=atoi(t); 
              wiek.push_back(liczba);                      
              yes=false;break;
              }      
           }
        }
    }
      vector<int>::iterator iter;
     cout<<"wiek wpisany do kontenera (tablicy)"<<endl; 
     for( iter = wiek.begin(); iter != wiek.end(); iter++ ) 
      {
        cout << *iter <<" ";
      } 

 plik.close();   
 getch();
 return 0;   
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1