12/09/09 7:27
TheKaneB
attento, che se il file xml contiene anche solo uno spazio, ti sballa completamente tutto.
Prova invece a passare il nome del file e ad aprirlo e leggerlo internamente così:
(attenzione, uso alcune estensioni C99, Gcc non dovrebbe avere problemi a compilarlo)
//...
int main(int argc, char** argv)
{
if (argc != 3) return 1;
const char *pFileName = argv[1];
const char *pField = argv[2];
FILE *in = fopen(pFileName, "rb"); // Apro il file in modalità binaria (XML potrebbe contenere caratteri unicode o altro)
if (in == NULL) return 1;
stat_t fileStat;
stat(pFileName, &fileStat);
size_t fileSize = fileStat.st_size;
// Alloco un buffer della dimensione cercata e vi carico dentro il file
char *pContent= malloc(fileSize);
if (pContent== NULL) return 1;
if (fread(in, pContent, 1, fileSize) != fileSize) return 1;
// Chiudo il file
fclose(in);
// Eseguo il parser
char value[64];
int ret = GetField(pContent, pField, value, sizeof(value));
//... fai qui il resto...
//... [ cut ] ...
// Dealloco la memoria
free(pContent);
}
//...
PS: L'ho scritto "a occhio" quindi potrebbe contenere qualche piccolo errore, ma al 99% dovrebbe essere corretto così
Ultima modifica effettuata da TheKaneB 12/09/09 7:31
aaa
12/09/09 11:18
Grazie mille, però il codice che ho postato a me non sembra dia alcun errore, anche con spazi..
12/09/09 15:22
TheKaneB
mh... non l'avrei mai detto, strano che i parametri non vengano splittati in corrispondenza degli spazi, comunque ok!
aaa
13/09/09 12:49
TheKaneB
si, infatti è una buona soluzione, si può ad esempio effettuare un escaping degli spazi, magari tramite "sed", in modo da creare un'unica stringa evitando lo splitting, oppure aprire il file internamente come suggerivo io. Sono entrambe soluzioni buone e adatte ciascuna a diverti tipi di utilizzo. Ad esempio la soluzione di prima si presta benissimo per costruire "filtri" in stile Unix, la mia si presta meglio per il parsing di grossi file.
:-)
aaa