Lire valeur entiere d'un fichier puis les stocker dans un tableau (c) (forum)

5/5 (12 avis)

Vue 21 037 fois - Téléchargée 883 fois

Description

Suite a une question sur le forum j'ai fait cette petite source.
Le principe est simple.
Un fichier se compose de valeur entiere separées par un espaces : 1 2 3 ...
Le but est de lire ce fichier et de stocker ces valeurs dans un tableau a 2 dimensions pour pouvoir ensuite les traiter.
Le code a été entierement fait en C et ne comporte aucune difficulté apparente.
Les commentaires ne manque pas!

Le projet a été réalisé sous VC++ 6 sans MFC.
Un zip a été joint ; il comporte les fichiers du projet ainsi que le fichier texte dotn je me suis servi pour faire les testes.

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;
	int		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] = atoi(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
	for(int x=0;x<i;x++)
	{
		for(int y=0;y<j;y++)
		{
			printf("%i\t",Tab[x][y]);
		}
		printf("\n");
	}

	return 0;

}

Codes Sources

A voir également

Ajouter un commentaire Commentaires
HI9IMOMO Messages postés 1 Date d'inscription lundi 19 novembre 2012 Statut Membre Dernière intervention 4 décembre 2012
4 déc. 2012 à 23:11
merci pour ton code source mais j'ai un autre problème j'arrive a faire mon programme qui m'aide a faire la résolution d'une matrice avec méthode de gausse en mode saisir mais le problème c'est que j'arrive pas a faire le avec le fichier texte s'il existe un programme qui nous aide a
lire le fichier texte
faire des opération sur ce programme
packarddell Messages postés 1 Date d'inscription mardi 16 février 2010 Statut Membre Dernière intervention 9 juillet 2011
9 juil. 2011 à 01:14
bravo c super :)
pouvez vous m'aider à afficher les données du fichiers comme ( A11 A02 154 BA12 ....)
merci d'avance .
asmaaassmmaa Messages postés 7 Date d'inscription dimanche 15 août 2010 Statut Membre Dernière intervention 14 avril 2011
14 avril 2011 à 15:01
Bonjour
J'ai rencontré un pb avec ton programme
C'est le fait que mon fichier soit grand et contient beaucoup de lignes!!!
il ne lit pas toute les lignes!!!

y'en a-t-il pas une solution? et merci
asmaaassmmaa Messages postés 7 Date d'inscription dimanche 15 août 2010 Statut Membre Dernière intervention 14 avril 2011
13 avril 2011 à 12:03
Oups je me suis trompée
I mean Merci DeAtHCrAsH !!
asmaaassmmaa Messages postés 7 Date d'inscription dimanche 15 août 2010 Statut Membre Dernière intervention 14 avril 2011
13 avril 2011 à 12:02
Merci infiniment xarier
et c trés bien commenté en plus!
Mercii
Afficher les 12 commentaires

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.