Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: parsare  (Citit de 2858 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Andreid91
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 54



Vezi Profilul
« : Aprilie 23, 2010, 13:04:22 »

Salut.

Am vazut o problema unde se recomanda parsarea intregului fisier (aveam vreo 200000 linii cu cate 5 valori). Imi spune cineva ce functie pot folosi pt streamuri ca sa citesc intreg fisierul ?  Rolling Eyes
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #1 : Aprilie 23, 2010, 14:06:42 »

Poti folosii urmatoare functie de parsare
Cod:
//ideea e  sa citesti blocuri de lungime SIZE si sa prelucrezi datele din acel bloc si sa treci la urmatorul si tot asa :)
#define SIZE 8219
int idx;
char file[SIZE];
inline void read( int& x )
{
          int sign=1;
          while( file[idx] < '0'  || file[idx] > '9' )
          {
                 if( '-' == file[idx] )
                    sign=-1;
                 if( ++idx ==SIZE )
                 {
                        idx=0;
                        in.read( file, SIZE );
                  }
         }
         for( x=0; file[idx] >='0' && file[idx] <= '9';  )
         {
                   x=x*10+file[idx]-'0';
                   if( ++idx == SIZE )
                   {
                           idx=0;
                           in.read( file, SIZE );
                   }
         }
          x*=sign;
}
Sper ca n-am gresit  la implementare ....
Pentru a citi intreg fisierul poti folosi in.getline( sir, lungime, EOF ); sau in.read( sir, lugime ); numai ca trebuie sa ai suficienta memorie pentru asta Wink               
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #2 : Aprilie 23, 2010, 16:30:27 »

SIZE e mai bine sa fie 8192.  Tongue
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #3 : Aprilie 23, 2010, 16:31:24 »

SIZE e mai bine sa fie 8192.  Tongue
Am vazut ca merge la fel de bine  Think , exista un motiv special sa fie 8192 Very Happy ?
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #4 : Aprilie 23, 2010, 16:33:10 »

E putere a lui 2. ( 2^13 parca )
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #5 : Aprilie 24, 2010, 00:40:18 »

Asa si ? Pe compilatoarele noi merge mai incet cu putere a lui 2.
Memorat
Andreid91
Client obisnuit
**

Karma: 7
Deconectat Deconectat

Mesaje: 54



Vezi Profilul
« Răspunde #6 : Aprilie 26, 2010, 13:42:14 »

Aha..mersi. Deci parsez fiecare linie pana la urma...   Smile

Si daca tot am observat ca e putin infocata discutia Very Happy...are cineva o idee la pb-ma asta?? http://online-judge.uva.es/p/v107/10735.html   
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines