begin process at 2010 02 10 10:10:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > LIRE VALEUR ENTIERE D'UN FICHIER PUIS LES STOCKER DANS UN TABLEAU (C) (FORUM)

LIRE VALEUR ENTIERE D'UN FICHIER PUIS LES STOCKER DANS UN TABLEAU (C) (FORUM)


 Information sur la source

Note :
8,43 / 10 - par 7 personnes
8,43 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Niveau :Débutant Date de création :14/05/2004 Date de mise à jour :27/05/2004 19:18:55 Vu / téléchargé :8 495 / 464

Auteur : DeAtHCrAsH

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 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

  • #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;
  • }
#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;

}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip DECOUPAGE CHEMIN FICHIER (FORUM)
Source avec Zip Source avec une capture PARAMETRAGE CARTES RESEAUX (VC++ SANS MFC) (FORUM)
Source avec Zip Source avec une capture DRAG AND DROP DE FICHIERS (MFC) (FORUM)
Source avec Zip TIMER (VC++ SANS MFC) (FORUM)
Source avec Zip Source avec une capture PROGRAME MULTI-DIALOG (VC++ SANS MFC) (FORUM)

 Sources de la même categorie

Source avec Zip Source avec une capture ID3 TAG COVER ALBUM IMAGE par nanonavich
FILEREADER par FrancoisGauthier
Source avec Zip CLASSE AVANCÉE DE LOG, THREAD SAFE ET DIVERSES SURCHARGES par sboli
Source avec Zip Source avec une capture Source .NET (Dotnet) INFILESEEKER par swonder
Source avec Zip Source avec une capture USB DETECTION par abandonware

Commentaires et avis

Commentaire de xarier le 14/05/2004 11:21:46

je l'ai pas essayer mais je c que c super 10/10

Commentaire de Kevin972 le 14/05/2004 17:51:00

salut Samir,
merci pour ton aide...sa va me permettre de bien avancer!

Commentaire de norton le 02/02/2005 14:59:17

Franchemment super
10/10
bravo.
Norton

Commentaire de macaco94 le 25/05/2005 06:28:34

Sur ma machine(Linux) ca ne marche pas et puis j'ai pas compris le coup du separateur car dans ton txt ya pas de ""
Merci de me repondre

Commentaire de macaco94 le 26/05/2005 02:09:42

oh pardon, j'avais pas fait gaffe que le SEP  est "espace".
Desole

Commentaire de jchor le 26/09/2005 11:48:38

Merci pour la source, elle m'a bien dépannée.

Commentaire de faasma le 04/12/2008 21:36:13

MERCI POUR VOTRE CODE JE L'AI COMPRIS ALORS QUE MON DEVC++ A REFUSé DE L'EXECUTER

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales