infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Ciocan Andrei din Aprilie 23, 2010, 13:04:22



Titlul: parsare
Scris de: Ciocan Andrei din 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 ?  :roll:


Titlul: Răspuns: parsare
Scris de: alexandru din 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 ); (http://www.cplusplus.com/reference/iostream/istream/getline/) sau in.read( sir, lugime ); (http://www.cplusplus.com/reference/iostream/istream/read/) numai ca trebuie sa ai suficienta memorie pentru asta ;)               


Titlul: Răspuns: parsare
Scris de: Florian Marcu din Aprilie 23, 2010, 16:30:27
SIZE e mai bine sa fie 8192.  :P


Titlul: Răspuns: parsare
Scris de: alexandru din Aprilie 23, 2010, 16:31:24
SIZE e mai bine sa fie 8192.  :P
Am vazut ca merge la fel de bine  :-k , exista un motiv special sa fie 8192 :D ?


Titlul: Răspuns: parsare
Scris de: Florian Marcu din Aprilie 23, 2010, 16:33:10
E putere a lui 2. ( 2^13 parca )


Titlul: Răspuns: parsare
Scris de: Pripoae Teodor Anton din Aprilie 24, 2010, 00:40:18
Asa si ? Pe compilatoarele noi merge mai incet cu putere a lui 2.


Titlul: Răspuns: parsare
Scris de: Ciocan Andrei din Aprilie 26, 2010, 13:42:14
Aha..mersi. Deci parsez fiecare linie pana la urma...   :)

Si daca tot am observat ca e putin infocata discutia :D...are cineva o idee la pb-ma asta?? http://online-judge.uva.es/p/v107/10735.html