Accueil > Forum > > > > Récupérer une matrice à partir d'un fichier
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
|
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
|
Cette discussion est classée dans : fichier, récupérer, taille, partir, matrice
Répondre à ce message
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Forum
MATLAB PROGRAMME MATLAB PROGRAMME par wahab1087
Cliquez pour lire la suite par wahab1087 RGB2GRAYRGB2GRAY par musa18
Cliquez pour lire la suite par musa18
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|