Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Split stringa in C o Bash ?
Forum - C/C++ - Split stringa in C o Bash ? - Pagina 2

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 9:27
Sabato, 12/09/2009
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)
Codice sorgente - presumibilmente C#

  1. //...
  2. int main(int argc, char** argv)
  3. {
  4.   if (argc != 3) return 1;
  5.  
  6.   const char *pFileName = argv[1];
  7.   const char *pField = argv[2];
  8.  
  9.   FILE *in = fopen(pFileName, "rb"); // Apro il file in modalità binaria (XML potrebbe contenere caratteri unicode o altro)
  10.  
  11.   if (in == NULL) return 1;
  12.  
  13.   stat_t fileStat;
  14.  
  15.   stat(pFileName, &fileStat);
  16.  
  17.   size_t fileSize = fileStat.st_size;
  18.  
  19.   // Alloco un buffer della dimensione cercata e vi carico dentro il file
  20.   char *pContent= malloc(fileSize);
  21.  
  22.   if (pContent== NULL) return 1;
  23.  
  24.   if (fread(in, pContent, 1, fileSize) != fileSize) return 1;
  25.  
  26.   // Chiudo il file
  27.   fclose(in);
  28.  
  29.   // Eseguo il parser
  30.   char value[64];
  31.   int ret = GetField(pContent, pField, value, sizeof(value));
  32.  
  33.   //... fai qui il resto...
  34.  
  35.   //... [ cut ] ...
  36.  
  37.   // Dealloco la memoria
  38.   free(pContent);
  39. }
  40.  
  41.  
  42. //...



PS: L'ho scritto "a occhio" quindi potrebbe contenere qualche piccolo errore, ma al 99% dovrebbe essere corretto così ;)

Ultima modifica effettuata da TheKaneB il 12/09/2009 alle 9:31
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 13:18
Sabato, 12/09/2009
Grazie mille, però il codice che ho postato a me non sembra dia alcun errore, anche con spazi..

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 17:22
Sabato, 12/09/2009
mh... non l'avrei mai detto, strano che i parametri non vengano splittati in corrispondenza degli spazi, comunque ok!

PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 20:07
Sabato, 12/09/2009
Testo quotato

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 :)

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:49
Domenica, 13/09/2009
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.

:-)

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo