begin process at 2012 05 30 06:39:26
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Base de données

 > 

Autre

 > 

Récupérer une matrice à partir d'un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Récupérer une matrice à partir d'un fichier

jeudi 23 juillet 2009 à 14:44:12 | Récupérer une matrice à partir d'un fichier

neone

Bonjour,
je chercher a récupérer une matrice a partir d'un fichier.
1- la taille est variable (nombre de lignes et colonnes)
2- les données sont organisé de la manière suivante:
401 402 405
302 154 142
145 145 152
Bien sur la taille est variable, le souci vient surtout du nombre de colonnes et pas les lignes(car c simple la lecture par ligne) c surtout récupéré tout les données d'une ligne.
Je suis ouvert a tout: JAVA/FORTRAN/CPP.
Merci d'avance

jeudi 23 juillet 2009 à 15:05:54 | Re : Récupérer une matrice à partir d'un fichier

MoH008

Salut,
Quelques questions:
Dans un fichier, tu peux avoir 2,3,...etc de colonnes?
Le nombre de colonnes varient d'une ligne à l'autre ?




The possible meet the impossible to become the possimpible !!

jeudi 23 juillet 2009 à 15:15:29 | Re : Récupérer une matrice à partir d'un fichier

neone

Salut,
merci pour ta réponse et pour l'intérêt. dans mon cas ya toujours le même nombre de colonnes.
C'est une matrice normal.
merci

jeudi 23 juillet 2009 à 15:38:44 | Re : Récupérer une matrice à partir d'un fichier

MoH008

D'accord, donc nous avons le même nombre de colonnes dans un fichier. Maintenant ce nombre peut varier d'un fichier à un autre, exact?

Tu as la possibilité d'utiliser les "list" en JAVA ou les tableaux dynamiques (allocation dynamique = malloc... )en C/C++.

The possible meet the impossible to become the possimpible !!

jeudi 23 juillet 2009 à 17:50:21 | Re : Récupérer une matrice à partir d'un fichier

rt15

Membre Club Administrateur CodeS-SourceS

Salut,

JAVA/FORTRAN/CPP ?

Et le C, ça marche aussi ?

Voilà deux fonctions très lentes à l'exécution permettent de récupérer le nombre de ligne et de colonnes.

En Maths, M[I, J] = valeur à la ième ligne de la jième colonne.
Donc M est un tableau de pointeurs de la taille du nombre de ligne.
Et chaque M[I] est un tableau d'entier de la taille du nombre de colonne.

Pour allouer la matrice, il est courant de voir un malloc puis une boucle sur des malloc. C'est nul (Du moins tant que la matrice n'est pas trop grande).

Il vaut mieux faire un seul malloc (malloc, c'est lent). On va donc essayer de s'inspirer du snippet de SAKingdom.

Assez obscure son histoire... On va essayer de rendre ça un peu plus lisible, bien qu'on perdra certainement en vitesse.

Pareil, pour la lecture depuis le fichier, j'ai pas optimisé non plus...

Très lent tout ça ! Mais bon :
1) Charger tout le fichier en mémoire -> pas top si le fichier est gros
2 Faire des accès disques avec des jolis tampons, ça prend pas deux minutes à coder...

Code C/C++ :
#include <stdio.h>

#include <stdlib.h>

/**
* Renvoie le nombre de colonnes dans la première ligne
*
* Les colonnes sont séparées par des espaces. Il peut y avoir des
* espaces avant et après les colonnes. Le nombre d'espaces n'a pas
* d'importance. Ne gère pas les tabulations.
*/

int CountColumns(FILE* lpFile)
{
int nChar;
long nPreviousPos;
int bTokenFound;
int nResult;

nResult = 0;
bTokenFound = 0;
nPreviousPos = ftell(lpFile);
do
{
nChar = fgetc(lpFile);
if (nChar == ' ')
{
if (bTokenFound)
{
nResult++;
bTokenFound = 0;
}
}
else if ((nChar != EOF) && (nChar != '\n'))
bTokenFound = 1;
}
while ((nChar != EOF) && (nChar != '\n'));
if (bTokenFound) nResult++;

fseek(lpFile, nPreviousPos, SEEK_SET);
return nResult;
}

/**
* Compte le nombre de lignes d'un fichier
*
* Ne compte pas l'éventuelle ligne vide en fin de fichier.
*/

int CountLines(FILE* lpFile)
{
int nChar;
long nPreviousPos;
int nPreviousChar;
int nResult;

nResult = 0;
nChar = -1;
nPreviousPos = ftell(lpFile);
do
{
nPreviousChar = nChar;
nChar = fgetc(lpFile);
if (nChar == '\n') nResult++;
}
while (nChar != EOF);
if ((nPreviousChar != '\n') && (nPreviousChar != -1))
nResult++;

fseek(lpFile, nPreviousPos, SEEK_SET);
return nResult;
}

/**
* Alloue une matrice de la dimension spécifiée
*/

int **AllocMatrix(int nLines, int nColumns)
{
int** lpResult;
char* lpColumnsOffset;
int nI;

lpResult = (int**)malloc(nLines * sizeof(int*) + nLines * nColumns * sizeof(int));
lpColumnsOffset = (char*)lpResult + nLines * sizeof(int*);
for (nI = 0; nI < nLines; nI++)
lpResult[nI] = (int*)(lpColumnsOffset + nI * nColumns * sizeof(int));

return lpResult;
}

/**
* Charge la matrice dans le fichier dans la matrice en mémoire
*/

void LoadMatrix(FILE* lpFile, int **lpMatrix, int nLines, int nColumns)
{
int nI, nJ;

for (nI = 0; nI < nLines; nI++)
for (nJ = 0; nJ < nColumns; nJ++)
fscanf(lpFile, "%d", &lpMatrix[nI][nJ]);
}

/**
* Affiche la matrice
*/

void DisplayMatrix(int **lpMatrix, int nLines, int nColumns)
{
int nI, nJ;

for (nI = 0; nI < nLines; nI++)
{
for (nJ = 0; nJ < nColumns; nJ++)
printf("%d ", lpMatrix[nI][nJ]);
printf("\n");
}
}

int main()
{
int** lpMatrix;
int nColumns;
int nLines;
FILE* lpFile;
int nResult;

lpFile = fopen("test.txt", "r");
if (! lpFile)
{
printf("Impossible d'ouvrir le fichier\n");
nResult = 1;
}
else
{
nColumns = CountColumns(lpFile);
nLines = CountLines(lpFile);
printf("Nombre de colonnes : %d\n", nColumns);
printf("Nombre de lignes : %d\n", nLines);
lpMatrix = AllocMatrix(nLines, nColumns);
LoadMatrix(lpFile, lpMatrix, nLines, nColumns);
DisplayMatrix(lpMatrix, nLines, nColumns);
free(lpMatrix);
fclose(lpFile);
nResult = 0;
}
return nResult;
}

jeudi 23 juillet 2009 à 18:02:03 | Re : Récupérer une matrice à partir d'un fichier

neone

Merci mec,
g déja résolu mon prob. c'est a voir aussi. en tt cas merci c cool

jeudi 23 juillet 2009 à 18:13:36 | Re : Récupérer une matrice à partir d'un fichier

rt15

Membre Club Administrateur CodeS-SourceS

Pas de style SMS s'il te plait !

(Woah, c'est l'invasion en ce moment...)



Cette discussion est classée dans : fichier, récupérer, taille, partir, matrice


Répondre à ce message

Sujets en rapport avec ce message

Récupérer taille d'un méga fichier [ par Weedy_59 ] Enfin j'aurai peut-etre dus écrire en titre, avoir la taille d'un Giga fichier, lol. Oui mon problème c'est que je n'arrive pas à récupérer la taille Corrigez mon code? Comment récupérer la taille d'un fichier? [ par supergrey ] Bonjour j'utilise pour l'instant la fonction suivante pour récupérer la taille d'un fichier: DWORD TailleFichier(char* str_NomFichier){     HANDLE hFi Incrémentation d'une matrice à partir d'un fichier texte. [ par zoz_ju ] Bonjour je cherche un peu d'aide car je dèbute en langage C et je souhaite savoir commen faire pour coder une matrice apartir d'un fichier texte conte QWORD ? [ par Ziman ] Bonjour,j'aimerai récupérer la taille d'un fichier, j'utilise donc GetFileSize() après l'avoir ouvert avec CreateFile(). Pour les petits fichiers, ben Remplir Matrice à partir de données d'un fichier [ par macdam40 ] Bonjour, alors je vous explique mon problème. J'ai une matrice M d'une certaine taille (M[nbLignes][nbColonnes]) et je voudrais la remplir à partir Lecture d'un objet de taille variable à partir d'un fichier [ par chelheb ] Bonjour tout le monde !Je travaille actuellement sur un projet en MFC, et j'ai quelques problèmes en ce qui concerne la lecture à partir d'un fichier Récupérer le nom d'un fichier à partir de son path [ par guiltyspark ] Bonjour à tous :)J'ai un soucis pour lire le nom d'un fichier à partir de son path. Je m'explique, je suis en train de faire un petit programme qui co récupérer le contenu d'un fichier bitmap dans une matrice [ par ibrsoft ] salut tous je veux récupérer le contenu d'un fichier bitmap dans une matrice comment je doit procéder exemple: le fichier 1.bmp représente le chiffre


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
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 : 1,076 sec (3)

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