Oppure

Loading
12/09/09 0:07
HeDo
ottimo :k:
aaa
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
12/09/09 18:07
HeDo
Postato originariamente da TheKaneB:

mh... non l'avrei mai detto, strano che i parametri non vengano splittati in corrispondenza degli spazi, comunque ok!


confermo, gli spazi fanno splittare le stringhe negli argomenti di main...

non ci avevo pensato cmq la soluzione di TheWorm è buona :)
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