Remplir un tableau à partir d'un fichier
alibm
Messages postés
100
Statut
Membre
-
alibm Messages postés 100 Statut Membre -
alibm Messages postés 100 Statut Membre -
Bonjour,
J'ai un fichier qui contient
>>
//commentaire
abba*
a b c e
9 2 << taille du tableau
2 2
2 1
1 2
2 2
2 3
4 5
5 1
4 7
8 6
1 3 4
<<
La 4ème ligne représente la taille du tableau
Le reste des lignes du ligne n°5 jusqu'à ligne n°13 sont
les valeurs à remplir dans le tableau :o
Je veux lire ces entiers et les mettre dans le tableau,
mais j'ai pas arriver et surtout mettre les bonnes boucles
convenablement pour cette opération, je crois que le programme
entre dans une boucle infini :euh: où l'exécution du corps des boucles entraîne
un erreur et l'arrêt de l'exécution :-°
J'ai un fichier qui contient
>>
//commentaire
abba*
a b c e
9 2 << taille du tableau
2 2
2 1
1 2
2 2
2 3
4 5
5 1
4 7
8 6
1 3 4
<<
La 4ème ligne représente la taille du tableau
Le reste des lignes du ligne n°5 jusqu'à ligne n°13 sont
les valeurs à remplir dans le tableau :o
Je veux lire ces entiers et les mettre dans le tableau,
mais j'ai pas arriver et surtout mettre les bonnes boucles
convenablement pour cette opération, je crois que le programme
entre dans une boucle infini :euh: où l'exécution du corps des boucles entraîne
un erreur et l'arrêt de l'exécution :-°
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fichier = NULL;
fichier = fopen("d:\\a.txt", "r");
if (fichier != NULL)
{
char ligne[32];
char space,un_char_de_ligne=' ';
int convertion,m=0,n=0,f=0,nb_line_tab,
nb_col_tab,nb_line_fichier = 0,i,
tab_t[nb_line_tab][nb_col_tab];
while(nb_line_fichier<4)
{
nb_line_fichier++;
/* lecture de la premiere ligne */
fgets (ligne, sizeof ligne, fichier);
/* Affichage de la premiere ligne */
}
nb_line_tab=ligne[0] - '0';
nb_col_tab=ligne[2] - '0';
int j;
// allocation dynamique de tab_t
tab_t = malloc(nb_line_tab* sizeof(int*));
for(j=0;j<nb_line_tab;j++)
tab_t[j]=malloc(nb_col_tab * sizeof(int));
printf("\nallocation tab des trans");
//fin allocation
printf("\ndimension de tab des trans [%d][%d] ", nb_line_tab,nb_col_tab);
//operation
puts("");
for(i=nb_line_fichier ;i<=3+nb_line_tab;i++)
{
fgets (ligne, sizeof ligne, fichier); // on lit une ligne à partir du ligne n°5
printf("trans %s", ligne);
while( f<(nb_col_tab+nb_col_tab/2) && n<nb_col_tab && m<nb_line_tab )
{
un_char_de_ligne=ligne[f];
if (un_char_de_ligne!=space) // si un char de ligne != " "
{
convertion=un_char_de_ligne - '0'; //char converti en int
tab_t[m][n]=convertion; // mettre le int ( char converti) dans le tab
n++; // ++ colonne
}
f++; // ++ dans ligne pour le char suiv
}
n=0; // revenir au colonne 0
m++; //passer au ligne suiv
}
fclose(fichier);
}
return 0;
}
A voir également:
- Remplir un tableau à partir d'un fichier
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Tableau word - Guide
- Fichier bin - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
2 réponses
je te conseille de mettre au forma xml
le fichier serait alors sous la forme
<parent_global>
<taille_tableau ligne="9" colonne="2"/>
<item premier="un_entier" deuxieme="un_entier"/> (autant que tu as de colonne)
.... (tu fais ça autant de fois qu'il y a de ligne)
</parent_global>
ensuite une simple regex te permet de récupérer ça fastoche
premièrement
tu dois enregistrer toutes les lignes de ton fichier (variable : $texte)
$nb_ligne=preg_replace("#.+<taille_tableau ligne=\"([0-9]+)\".+#",$1,$texte);
$nb_colonne=preg_replace("#.+colonne=\"([0-9]+)\".+#",$1,$texte);
et ensuite tu fais une boucle qui récupère toutes les occurences de "item" et de les ranger dans ton tableau
je te rappelle qu'une ligne est un item
qu'une collone est un entier de ton item
pour le reste d'autres auront surement plus simple que moi, puisqu'il est tout à fait possible que php ait des fonctions pour lire le xml, je t'encourage à faire des recherches sur ce points.
le fichier serait alors sous la forme
<parent_global>
<taille_tableau ligne="9" colonne="2"/>
<item premier="un_entier" deuxieme="un_entier"/> (autant que tu as de colonne)
.... (tu fais ça autant de fois qu'il y a de ligne)
</parent_global>
ensuite une simple regex te permet de récupérer ça fastoche
premièrement
tu dois enregistrer toutes les lignes de ton fichier (variable : $texte)
$nb_ligne=preg_replace("#.+<taille_tableau ligne=\"([0-9]+)\".+#",$1,$texte);
$nb_colonne=preg_replace("#.+colonne=\"([0-9]+)\".+#",$1,$texte);
et ensuite tu fais une boucle qui récupère toutes les occurences de "item" et de les ranger dans ton tableau
je te rappelle qu'une ligne est un item
qu'une collone est un entier de ton item
pour le reste d'autres auront surement plus simple que moi, puisqu'il est tout à fait possible que php ait des fonctions pour lire le xml, je t'encourage à faire des recherches sur ce points.