Oppure

Loading
27/07/09 14:18
tommyprojects
si da il caso che sia la stessa persona che lo chiede... :)

comunque...

Adesso avrei questo piccolo.. quid visto che sno riuscito a caricare tutto il file senza blocchi o errori...

Adesso avrei bisogno di usare la classe regex.h

ma non so come includerla nel mio piccolo file progetto o meglio visto che penso non sia inclusa nel devc++ che sto usando come editor compilatore (nelle directory include non c'e'..) e con un cerca idem...

non so dove procurarmelo... e nè se sia gratisse o meno...

Grazie 1000

:)
aaa
27/07/09 15:23
theprogrammer
Postato originariamente da tommyprojects:

si da il caso che sia la stessa persona che lo chiede... :)


Lo so.

regex


Mi sa che la regex non ti serve proprio ... Dove hai caricato i valori che devi confrontare?
aaa
27/07/09 16:45
tommyprojects
Credo di averli caricati in una stringa che poi con un comando specifico che ora non ricordo ho riportato per intero a video... :-|
aaa
27/07/09 18:15
theprogrammer
Postato originariamente da tommyprojects:

Credo ...


non ricordo ...


Così non si va molto lontano ...

Scusa ... e a che dovevi applicare la regex? Ma qual e' il codice completo che hai scritto per caricare i dati?

E comunque, la regex non serve ... dopo aver caricato i dati di una sola linea, li confronti con quelle 4500 circa leggendo queste una per una ...

aaa
27/07/09 19:11
tommyprojects
#include <iostream>
#include <regex.h> (che non ho su c: ) ??? nel caso dove la potrei ricavare?


using namespace std;
int main (int argc, char *argv[])
{
//SPAZIO PER LETTURA FILE...

FILE * pFile;
char string [1000];

pFile = fopen ("estrazioni.txt" , "r";);
if (pFile == NULL) perror ("Errore";);

else {
while(!feof(pFile))
{
fgets(string , 100 , pFile);


//-------prova espressione regolare

const char *reg_espr = "[ ,.\t\n;:]" ; // Elenco dei caratteri separatori.
// NOTA: l'apparato delle espressioni regolari considera il [[backslash]] come il
// compilatore C++, quindi, ad esempio, il carattere '\n' va indicato con "\n".

regex rgx(reg_esp) ; // 'regex' è un'istanza della classe template
// 'basic_regex' con argomento di tipo 'char'.
cmatch match ; // 'cmatch' è un'istanza (predefinita) del templete
// 'match_results' con argomento di tipo 'const char *'.
const char *target = "BA" ;

// Identifica tutte le parole di 'target' delimitate dai caratteri di 'reg_espr'.
if( regex_search( target, match, rgx ) == true )
{
// Se sono presenti delle parole separate dai caratteri specificati.

for( int a = 0 ; a < match.size() ; a++ )
{
string str( matches[a].first, matches[a].second ) ;
cout << str << "\n" ;
}
}


//----------------------------------



puts (string);
}
}
//--------------------------

cout << "Press ENTER to continue..." << endl;
cin.get();
return 0;
}

ecco dove sono arrivato perora... :om:


"E comunque, la regex non serve ... dopo aver caricato i dati di una sola linea, li confronti con quelle 4500 circa leggendo queste una per una ... " non ho capito l'alternativa... anche se mi piacerebbe molto approfondire il discorso anche da questo secondo punto di vista... :D
Ultima modifica effettuata da tommyprojects 27/07/09 19:14
aaa
27/07/09 19:17
theprogrammer
1) stai programmando in C o in C++ ? Hai usato le funzioni fopen, fgets ... del C e non le classi del C++ ...

2) una volta che hai letto la stringa nella variabile string, cosa intendi fare con la regular expression, perche' non l'ho capito

3) fai un esempio di contenuto del file che stai leggendo (il contenuto di qualche riga ...)
aaa
27/07/09 19:32
tommyprojects
[1] Non saprei... la differenza tra C e C++ le funzioni che ho preso qua e là per studiare e per costruirmi praticamente il mio programmino... erano sotto le voci c++ e non c...


[3]Un esempio del contenuto del file estrazioni è questo:

1939/01/07 BA 58 22 47 49 69
1939/01/07 FI 27 57 81 43 61
1939/01/07 MI 40 38 57 67 7
1939/01/07 NA 85 44 48 88 55
1939/01/07 PA 73 80 39 38 57
1939/01/07 RM 73 24 4 39 22
1939/01/07 TO 19 43 10 31 27
1939/01/07 VE 9 43 61 14 75
1939/01/14 BA 18 77 33 62 19
1939/01/14 FI 31 47 12 7 80
1939/01/14 MI 35 24 52 90 41
1939/01/14 NA 4 10 36 63 35
1939/01/14 PA 10 77 43 37 35
1939/01/14 RM 4 86 61 84 58
1939/01/14 TO 82 7 15 88 34
1939/01/14 VE 85 21 45 65 56
1939/01/21 BA 68 65 41 28 67
1939/01/21 FI 37 82 69 9 67
1939/01/21 MI 37 23 12 19 27
1939/01/21 NA 15 76 82 11 55
1939/01/21 PA 29 8 44 69 28
1939/01/21 RM 36 74 7 70 76
1939/01/21 TO 36 41 43 35 40
1939/01/21 VE 76 85 50 42 22
1939/01/28 BA 76 55 48 85 71
1939/01/28 FI 24 40 12 77 30
1939/01/28 MI 47 85 18 38 50
1939/01/28 NA 73 34 8 39 17
1939/01/28 PA 52 25 63 84 60
1939/01/28 RM 56 87 82 90 53
1939/01/28 TO 27 48 40 33 67
1939/01/28 VE 58 84 13 51 32

da cui vorrei estrapolare con la regular expression [2] solo...

1939/01/07 BA 58 22 47 49 69
1939/01/14 BA 18 77 33 62 19
1939/01/21 BA 68 65 41 28 67
1939/01/28 BA 76 55 48 85 71

ovvero solo quelle righe contenenti "BA" appunto... [2]



8-|
Ultima modifica effettuata da tommyprojects 27/07/09 19:35
aaa
27/07/09 19:36
theprogrammer
Quindi niente regex perche' basterebbe una semplice

if(string[11]=='B' && string[12]=='A')
{
   // quello che vuoi ...
}
aaa