Remplir un tableau à partir d'un fichier

Fermé
alibm Messages postés 82 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 15 juin 2011 - 16 févr. 2010 à 19:37
alibm Messages postés 82 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 15 juin 2011 - 16 févr. 2010 à 21:17
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 :-°


#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:

2 réponses

alibm Messages postés 82 Date d'inscription jeudi 18 septembre 2008 Statut Membre Dernière intervention 15 juin 2011 6
16 févr. 2010 à 21:17
Excusez-moi, mais je vais mettre cette partie du code dans un programme!
Merci pour votre conseils
0
artragis Messages postés 481 Date d'inscription mardi 12 juin 2007 Statut Membre Dernière intervention 6 avril 2010 146
16 févr. 2010 à 20:04
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.
-1