theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da tommyprojects:
si da il caso che sia la stessa persona che lo chiede... |
Lo so.
Mi sa che la regex non ti serve proprio ... Dove hai caricato i valori che devi confrontare? |
|
tommyprojects (Normal User)
Rookie
Messaggi: 29
Iscritto: 26/07/2009
|
Credo di averli caricati in una stringa che poi con un comando specifico che ora non ricordo ho riportato per intero a video...
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da tommyprojects:
Credo ... |
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 ...
|
|
tommyprojects (Normal User)
Rookie
Messaggi: 29
Iscritto: 26/07/2009
|
#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...
"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...
Ultima modifica effettuata da tommyprojects il 27/07/2009 alle 21:14 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
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 ...)
|
|
tommyprojects (Normal User)
Rookie
Messaggi: 29
Iscritto: 26/07/2009
|
[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]
Ultima modifica effettuata da tommyprojects il 27/07/2009 alle 21:35 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Quindi niente regex perche' basterebbe una semplice
Codice sorgente - presumibilmente Plain Text |
if(string[11]=='B' && string[12]=='A')
{
// quello che vuoi ...
}
|
|
|
tommyprojects (Normal User)
Rookie
Messaggi: 29
Iscritto: 26/07/2009
|
funzia alla grandissima! grazie!
Adesso però dovrei ripulire le stringhe estrapolate contenenti "BA":
come questa ad es:
1939/01/07 BA 58 22 47 49 69
in modo da avere solo un unico array contenente solo...
elementi stringhe costituite ciascuna dai soli 5 numeri separati da virgola di ogni comb. uscita ...come secondo l'esempio:
array = [0]->58,22,47,49,69 ecc...
Adesso devo per forza ricorrere a regex.h vero?
Ovviamente alla fine della storia per cercare di sdebitarmi un minimo se li vuoi ti do qualche numeretto buono
Ultima modifica effettuata da tommyprojects il 27/07/2009 alle 23:03 |
|