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 da file
Forum - C/C++ - Split stringa da file

Avatar
ExSoax (Ex-Member)
Newbie


Messaggi: 4
Iscritto: 11/04/2009

Segnala al moderatore
Postato alle 11:58
Lunedì, 07/09/2009
Salve a tutti,
Sto realizzando un lettore musicale in c++, funziona alla perfezione se non per un problema. Dovrei prendere il contenuto del file che in pratica è strutturato in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. FREQUENZA.AMPIEZZA:FREQUENZA.AMPIEZZA:FREQUENZA.AMPIEZZA



e devo splittarlo per i due punti ( : ) e in seguito per il punto ( . ) dove frequenza e ampiezza sono numeri interi da convertire da stringa a int. Qualcuno può dirmi una funzione per splittare? Grazie anticipatamente...

Ultima modifica effettuata da ExSoax il 07/09/2009 alle 11:59
PM Quote
Avatar
totipianurese (Member)
Pro


Messaggi: 168
Iscritto: 24/06/2008

Segnala al moderatore
Postato alle 12:49
Lunedì, 07/09/2009
Testo quotato

Postato originariamente da ExSoax:

Salve a tutti,
Sto realizzando un lettore musicale in c++, funziona alla perfezione se non per un problema. Dovrei prendere il contenuto del file che in pratica è strutturato in questo modo:

Codice sorgente - presumibilmente Plain Text

  1. FREQUENZA.AMPIEZZA:FREQUENZA.AMPIEZZA:FREQUENZA.AMPIEZZA



e devo splittarlo per i due punti ( : ) e in seguito per il punto ( . ) dove frequenza e ampiezza sono numeri interi da convertire da stringa a int. Qualcuno può dirmi una funzione per splittare? Grazie anticipatamente...



Da come ho capito, devi mettere la frequenza e l'ampiezza in un intero.
Basta che usi la getline:

Codice sorgente - presumibilmente Plain Text

  1. getline(nome_flusso;nome_var_intera;':');



in questo modo ti dovrebbe mettere in nome_var_intera tutto quello che c'e' prima dei due punti :

Fammi sapere se ho risposto bene alla tua domanda

PM Quote
Avatar
ExSoax (Ex-Member)
Newbie


Messaggi: 4
Iscritto: 11/04/2009

Segnala al moderatore
Postato alle 12:54
Lunedì, 07/09/2009
forse nn mi soo spiegato bene LoL. Il file è cosi :

Codice sorgente - presumibilmente Plain Text

  1. 1.250:4.560:1.1:1000.3000



io devo splittare il testo per i due punti ( : ) in modo da ottenere un array con dentro i valori e poi estrarre l'array splittando in due attraverso il punto ( . ) in modo da interpretare il suono :

Codice sorgente - presumibilmente Plain Text

  1. _beep(1,250); _beep(4,560);



a me serve la funzione di split

Ultima modifica effettuata da ExSoax il 07/09/2009 alle 12:59
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 696
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 22:33
Lunedì, 07/09/2009
Testo quotato

Postato originariamente da ExSoax:

forse nn mi soo spiegato bene LoL. Il file è cosi :

Codice sorgente - presumibilmente Plain Text

  1. 1.250:4.560:1.1:1000.3000



io devo splittare il testo per i due punti ( : ) in modo da ottenere un array con dentro i valori e poi estrarre l'array splittando in due attraverso il punto ( . ) in modo da interpretare il suono :

Codice sorgente - presumibilmente Plain Text

  1. _beep(1,250); _beep(4,560);



a me serve la funzione di split



Salve,

non so se esiste gia', ma potresti costruirla tu usando la strchr per trovare la posizione del carattere che ti interessa, la strncpy per fare lo split vero e proprio, e la atoi per la traduzione stringa/intero.

Dovrebbe venire qualcosa del genere:

Codice sorgente - presumibilmente Delphi

  1. /*
  2. Supponi di avere una variabile linea di tipo stringa ( char* ) in cui hai letto una riga del file nel formato che hai detto tu;
  3. un' array arr1 di n stringhe dove farai il primo split
  4. un' array arr2 di nx2 interi dove farai il secondo split
  5. */
  6.  
  7. char *ptr1 = linea, *ptr2, *temp;
  8. int i = 0, j;
  9.  
  10. /************** ora inizia il primo split **************/
  11.  
  12. while (ptr2 = strchr(ptr1, ':')) {
  13.   strncpy(arr1[i], ptr1, ptr2 - ptr1);
  14.   ptr1 = ptr2;
  15.   i++;
  16. }
  17.  
  18. ptr2 = strchr(ptr1, 0)
  19. strncpy(arr1[i], ptr1, ptr2 - ptr1);
  20. i++;
  21.  
  22. /************* ora inizia il secondo split *************/
  23.  
  24. for (j = 0; j <= i; j++) {
  25.   ptr1 = arr1[j];
  26.   ptr2 = strchr(ptr1, '.');
  27.   strncpy(temp, ptr1, ptr2 - ptr1);
  28.   arr2[j][1] = atoi(temp);
  29.   ptr1 = ptr2;
  30.   ptr2 = strchr(ptr1, 0);
  31.   strncpy(temp, ptr1, ptr2 - ptr1);
  32.   arr2[j][2] = atoi(temp);
  33. }



Ciao. :k:

Luigi

PM Quote