Problema con la lettura dei dati

di palladino.al il
18 risposte
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

  • Putroppo vuole che si opera con gli operatori leciti
  • 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?
  • 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
  • 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
    
  • Si, dovrei fare una matrice formata da RxC
  • 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
  • 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?
  • 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
  • 
    #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;
    }
    
    
  • Non era meglio farlo con array [] []? ti chiedo xk non ho mai visto in quella maniera
  • 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
  • #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
  • Hai risolto o hai un crash?
Devi accedere o registrarti per scrivere nel forum
18 risposte