Problema con la lettura dei dati

di il
18 risposte

Problema con la lettura dei dati

Salve, sto cercando di prendere da un file, una matrice di valori separati da un simbolo. ho pensato di fare la funzione token ma non mi caricare eventuali dati > 1. avete dei suggerimenti?
la vabile *str contiene la riga presente dal file
void set_MatriceA(char *str, unsigned int i) {
	unsigned int c = 0;

		//if (str[j] != '@' && str[j] != '\n' && str[j] != '\0'){
            printf("str: %s\n", str);
            char buffer[100];
        char *token;
        token = strtok(str, "@");
		printf("%s\n", token);
        setCellaA(i, 0, str[j]);
			//c++;
		//}


}




void setCellaA(unsigned int i,unsigned int j,char valore){

 matriceA[i][j]=valore;
}

18 Risposte

  • Re: Problema con la lettura dei dati

    Guarda bene come si usa strtok
    http://www.cplusplus.com/reference/cstring/strtok
    SetCellaA è assurda come funzione: non fai prima a scrivere direttamente il valore?
  • Re: Problema con la lettura dei dati

    Putroppo vuole che si opera con gli operatori leciti
  • Re: Problema con la lettura dei dati

    palladino.al ha scritto:


    Putroppo vuole che si opera con gli operatori leciti
    Cosa vuol dire questa frase? Non puoi usare il while? O ti riferivi ai caratteri?
  • Re: Problema con la lettura dei dati

    Che putroppo devo fare una funzione che li memorizza nella matrice. non so come leggere la riga e posizione le varie colonne seperati dal separatore
  • Re: Problema con la lettura dei dati

    Così ti prendi tutti i numeri dentro un'array. Vedi poi tu come manipolare ulteriormente per avere le matrici (una? più di una?)
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void) {  
        FILE *fp = fopen("file.txt", "r");  
        if(fp == NULL){
            printf("File non trovato!");
    	return -1; 
        }
        
        char buffer[1000];
        int i, length = 0, array[1000];
        
        while (fgets(buffer, sizeof(buffer), fp) != NULL){ 
            char *cp = strtok(buffer, ".,");
            while (cp != NULL && length < 1000){
                array[length++] = atoi(cp);
                cp = strtok(NULL, ".,");
            }
        }
        fclose(fp);
        
        for(i = 0; i < length; i++)
            printf ("%d\n", array[i]);
    
        return 0;
    }
    
    
    file.txt
    
    12.5,23.2,34.2,48.2
    
  • Re: Problema con la lettura dei dati

    Si, dovrei fare una matrice formata da RxC
  • Re: Problema con la lettura dei dati

    L ho provato ma non mi prende in considerazione i numeri 12.5 23.2 ecc
    rimangio quello che ho detto...ora provo a fare una matrice e ti dico
  • Re: Problema con la lettura dei dati

    Guarda che ti si sta cercando di dare una mano, ma non sei per niente chiaro.

    Vuoi gli int o i float? se vuoi i float ovviamentre strtok lo fai solo con "," e poi converti con atof

    Quindi vuoi solo un array? E il separatore delle matrici quale sarebbe allora?
  • Re: Problema con la lettura dei dati

    F18 Hai ragione, scusami e grazie. in questo caso il mio seperatore è ",". cmq si la dovrei farla in una matrice xo aimeh non ti voglio creare altri fastidi
  • Re: Problema con la lettura dei dati

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    
    int main(void) {  
        FILE *fp = fopen("file.txt", "r");  
        if(fp == NULL){
            printf("File non trovato!");
    	return -1; 
        }
        
        char buffer[1000];
        int length = 0;
        float array[1000];
        
        while (fgets(buffer, sizeof(buffer), fp) != NULL){ 
            char *cp = strtok(buffer, ",");
            while (cp != NULL && length < 1000){
                array[length++] = atof(cp);
                cp = strtok(NULL, ",");
            }
        }
        fclose(fp);
        
        if(length){
            int i, j, k = (int)sqrt(length);
            length = k * k;
            float M[k][k];
            for(i = 0; i < length; i++)
                M[i / k][i % k] = array[i];
            
            for(i = 0; i < k; i++){
                for(j = 0; j < k; j++)
                    printf ("%.1f ", M[i][j]);
                printf("\n");
            }
        }
        
        return 0;
    }
    
    
  • Re: Problema con la lettura dei dati

    Non era meglio farlo con array [] []? ti chiedo xk non ho mai visto in quella maniera
  • Re: Problema con la lettura dei dati

    Ho fatto in questa maniera ma a quanto pare il valore di i non viene caricato
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void) {
        FILE *fp = fopen("matrix.txt", "r");
        if(fp == NULL){
            printf("File non trovato!");
    	return -1;
        }
    
        char buffer[1000];
        int i=0;
        int  j=0;
        int  dim = 0;
        float array[5][5];
    
        while (fgets(buffer, sizeof(buffer), fp) != NULL){
            char *cp = strtok(buffer, ",");
            printf("%s ",cp);
            j=0;
            while (cp != NULL && dim < 1000){
    
                cp = strtok(NULL, ",");
                array[i][j] = atof(cp);
                j++;
                 //printf("%s-",cp);
                }
            i++;
            dim++;
        }
        printf("\n");
         //printf(" i presenti %d\n", i);
         //printf(" j presenti %d\n", j);
        fclose(fp);
    
        for(i = 0; i < 5; i++){
            for (j=0;j<5;j++){
                printf ("%.3f ", array[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    
    

    il file di input e cosi riempito
    12.5,23.2,34.2,48.2,48.25
    112.5,23.2,34.2,48.2,48.24
    212.5,23.2,34.2,48.2,48.211
    3312.5,23.2,34.2,48.2,48.233
    33212.5,233.2,34.21,48.21,48.33
    
    in stampa mi da
    
    12.5 23.2 34.2 48.2 48.25
    23.2 34.2 48.2 48.24
    23.2 34.2 48.2 48.211
    23.2 34.2 48.2 48.233
    233.2 34.21 48.21 48.33
  • Re: Problema con la lettura dei dati

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(void) {
        FILE *fp = fopen("matrix.txt", "r");
        if(fp == NULL){
            printf("File non trovato!");
    	return -1;
        }
    
        char buffer[1000];
        int i=0;
        int  j=0;
        int  dim = 0;
        float array[5][5];
    
        while (fgets(buffer, sizeof(buffer), fp) != NULL){
            char *cp = strtok(buffer, ",");
            //printf("%s ",cp);
    
            j=0;
    
            while (cp != NULL && dim <= 5){
                array[i][j] = atof(cp);
                cp = strtok(NULL, ",");
    
                j++;
                 //printf("%s-",cp);
                }
            i++;
            dim++;
        }
        printf("\n");
         //printf(" i presenti %d\n", i);
         //printf(" j presenti %d\n", j);
        fclose(fp);
    
        for(i = 0; i < 5; i++){
            for (j=0;j<5;j++){
                printf ("%.3f ", array[i][j]);
            }
            printf("\n");
        }
    
        return 0;
    }
    
    cmq ho risolto. ho provato a fare le stringhe e quando mi va a fare il ciclo for, mi crasha
  • Re: Problema con la lettura dei dati

    Hai risolto o hai un crash?
Devi accedere o registrarti per scrivere nel forum
18 risposte