J'ai deja posté un code tres proche de celui ci a la seule différence qu'il ne marche que pour des valeurs entieres (1,2,30,40,500,...)
Cette version est effective pour des valeurs décimales(1.23,2.5,2.0,...)
Je poste cette source après avoir recu plusieurs demandes sur le forum concernant le traitement des valeurs décimales contenu dans un fichiers...
J'espere que ce code sera utile a certains ....
Source / Exemple :
#include <stdio.h> // fonction de base(printf, fgets,....)
#include <string.h> // strtok() -> decoupage de chaine de caracteres
#include <stdlib.h> // atoi -> convertir une chaine de caractere en un entier
#define CMAX 400 // Nombre de ligne maximum du tableau
#define LMAX 400 // Nombre de colonne maximum du tableau
#define MAX_CHAR_PER_LINE 1650 // Nombre de caratere maximum par ligne dans le fichier lu : 3*400+400+1 = 1601 mais j'ai mis 1650 pour arrondir
#define SEP " " // Séparateur utilisé dans le fichier
#define PATH "d:\\meteo.txt" // Mets l'emplacement de ton fichier contenant les valeurs
int main(int argc, char* argv[])
{
FILE* m_File;
int i = 0;
int j;
float Tab[LMAX][CMAX];
char szbuff[MAX_CHAR_PER_LINE];
char* token;
// On initialise le tableau a -1
for(i=0;i<LMAX;i++)
{
for(j=0;j<CMAX;j++)
{
Tab[i][j] = -1;
}
}
// On réinitialise le compteur de ligne car i;a été incrémenté lors de l'iniatialisation
i = 0;
// On ouvre le fichier en lecture seule et en mode texte
m_File = fopen(PATH,"rt");
// On vérifie qu'il n'y ai pas eu d'erreur pendant l'ouverture du fichier
if(!m_File) return 1;
// On lit le fichier ligne a ligne et on stocke les valeurs dans un tableau d'entier
// La boucle while a l'avantage de permettre la lecture d'un fichier sans connaitre son nombre de ligne exact
// et nous évite donc de faire bugger le programme
// Le "feof" veut "End Of File". On lit donc jusuqu'à la fin du fichier
while(!feof(m_File) && i < LMAX)
{
j = 0;
// On récupere la ligne courante du fichier
fgets(szbuff,MAX_CHAR_PER_LINE,m_File);
// On decoupe la ligne selon le charactere de séparation SEP (" ")
token = strtok(szbuff,SEP);
// On lit les éléments découpés un à un et on les stocke dans le tableau Tab
while(token != NULL && j < CMAX)
{
// On stocke la valeur lue dans le tableau
Tab[i][j] = atof(token);
// On lit l'element suivant retourner par strtok
token = strtok(NULL,SEP);
// On incremente le compteur des ordonnées
j++;
}
// On incrémente le compteur des abscisses
i++;
}
// On affiche le tableau pour etre sur que tout s'est bien passé... Le \t correspond au caractere tabulation
// Le 0.2f indique qu'on doit afficher un float avec 2 decimales après la virugle
for(int x=0;x<i;x++)
{
for(int y=0;y<j;y++)
{
printf("%0.2f\t",Tab[x][y]);
}
printf("\n");
}
return 0;
}
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.