IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

ajouter le contenu d'un fichier dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Par défaut ajouter le contenu d'un fichier dans un tableau
    bonjour
    j ai un fic.txt qui contient cette ligne de commande 4 5 7 8 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main (){
    	FILE* fichier = NULL;
    	char chaine[TAILLE_MAX]="";
    	int n;
            n=atoi(chaine);
            fichier = fopen("fic.txt", "r");
    également j ai une fonction affichage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void affichage(int *tab, int sz){
    	int i;		
    	for(i=0;i<sz;i++){
    		printf("%d ",tab[i]);
    	}
    	printf("\n");
    }
    dans main j arrive pas a faire comme ca affichage(chaine,4);



    je voudrai le metre le contenu de fichier dans un tableau static pour que je puisse le trié

    merci

  2. #2
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    dans ton main tu dois faire les étapes suivantes(dans cette ordre là):

    1) Ouvrir le fichier.
    2) Lire la première ligne du fichier (indice: fgets)
    3) splitter la chaine pour n'obtenir que des chiffres.(indice: strtok)
    4) faire un atoi sur chaque chiffre pour les transformer en int et les stocker dans un tableau d'int.
    5) les trier
    6) Les afficher.
    7) Fermer le fichier.

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Par défaut
    Citation Envoyé par 6-MarViN Voir le message
    dans ton main tu dois faire les étapes suivantes(dans cette ordre là):

    1) Ouvrir le fichier.
    2) Lire la première ligne du fichier (indice: fgets)
    3) splitter la chaine pour n'obtenir que des chiffres.(indice: strtok)
    4) faire un atoi sur chaque chiffre pour les transformer en int et les stocker dans un tableau d'int.
    5) les trier
    6) Les afficher.
    7) Fermer le fichier.
    MERCI BIEN POUR L'INDICATION MAIS J AI RENCONTRÉ UN ERREUR DE SEGMENTAION
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    int main (){
    	int i=0;
    	FILE* fichier = NULL;
    	char chaine[TAILLE_MAX]="";
    	int *n;
            fichier = fopen("fic.txt", "r");
     
           if (fichier != NULL)
          {
     
            fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX 		caractères du fichier, on stocke le tout dans "chaine"
    	n[i]=atoi(chaine);
     
          //  printf("%s", chaine); // On affiche la chaîne
     	affichage(n,TAILLE_MAX);
            fclose(fichier);
          }

  4. #4
    Membre très actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 254
    Par défaut
    Commençons par une question: quelle est la valeur de ton ta macro TAILLE_MAX?

    Ensuite ta variable n est pointeur. Pour pouvoir être utilisé comme un tableau, tu dois allouer de la mémoire à l'aide de la fonction malloc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = malloc(la_taille_que_tu_veux);
    L'erreur de segmentation est lié au fait que tu essaye d'écrire dans un espace mémoire non alloué. Alloue ton pointeur n comme ci-dessus et ça devrait mieux aller.

    Ensuite, si j'ai bien compris, ton fichier contient des nombres séparé par des espaces. Pour pouvoir stocker chacun de ces nombres dans chaque case de ton tableau d'int, il faut que tu split ta chaine avec comme délimiteur le caractère "espace". (regarde du coté de la fonction strtok) et qu'ensuite tu fasse un atoi sur chaque nombres pour le transformer en int.

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 89
    Par défaut
    Citation Envoyé par 6-MarViN Voir le message
    Commençons par une question: quelle est la valeur de ton ta macro TAILLE_MAX?

    Ensuite ta variable n est pointeur. Pour pouvoir être utilisé comme un tableau, tu dois allouer de la mémoire à l'aide de la fonction malloc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    n = malloc(la_taille_que_tu_veux);
    L'erreur de segmentation est lié au fait que tu essaye d'écrire dans un espace mémoire non alloué. Alloue ton pointeur n comme ci-dessus et ça devrait mieux aller.

    Ensuite, si j'ai bien compris, ton fichier contient des nombres séparé par des espaces. Pour pouvoir stocker chacun de ces nombres dans chaque case de ton tableau d'int, il faut que tu split ta chaine avec comme délimiteur le caractère "espace". (regarde du coté de la fonction strtok) et qu'ensuite tu fasse un atoi sur chaque nombres pour le transformer en int.
    j ai suivi étape par étape
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    int main (){
    	int *tmp;
     
    	int i=0;
    	char *chifre;
    	FILE* fichier = NULL;
    	char chaine[TAILLE_MAX]="";
    	int *n;
            fichier = fopen("fic.txt", "r");
     
           if (fichier != NULL)
          {
     
            fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX 		caractères du fichier, on stocke le tout dans "chaine"
    	while(chifre!=NULL)
    	{
    	tmp=realloc(n,TAILLE_MAX * sizeof(int));
    	if ( tmp == NULL )
    	{
        	 fprintf(stderr,"Reallocation impossible");
         	free(n);
    	}
    	else
    	{
         	n = tmp;
    	}
    	chifre[i]=strtok(fichier," ");
    	n[i]=atoi(chifre[i]);
    	chifre[i]= strtok(NULL,"?");
    	}
          //  printf("%s", chaine); // On affiche la chaîne
     	affichage(n,TAILLE_MAX);
            fclose(fichier);
          }
    j ai toujours erreur de segmentation

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ...
    	int *n;
            fichier = fopen("fic.txt", "r");
     
           if (fichier != NULL)
          {
     
            fgets(chaine, TAILLE_MAX, fichier); // On lit maximum TAILLE_MAX 		caractères du fichier, on stocke le tout dans "chaine"
    	while(chifre!=NULL)
    	{
    	tmp=realloc(n,TAILLE_MAX * sizeof(int));.
    ...
    n n'a pas été initialisé à NULL avant le premier realloc()

    Accessoirement, appeler n un pointeur est une drôle d'idée !

Discussions similaires

  1. Ajout du contenu d'un fichier dans une ligne précise d'un autre fichier
    Par megayaya dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 09/10/2012, 09h28
  2. Réponses: 8
    Dernier message: 03/09/2007, 21h11
  3. Ajouter le contenu d'un fichier dans un autre
    Par persia dans le forum Langage
    Réponses: 3
    Dernier message: 12/03/2007, 09h37
  4. injecter le contenu d'un fichier dans un tableau
    Par rogerio dans le forum C++
    Réponses: 5
    Dernier message: 03/05/2006, 16h37
  5. Réponses: 4
    Dernier message: 26/01/2006, 14h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo