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 :

lecture de fichier texte


Sujet :

C

  1. #21
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    c'est quoi ce for tout moche ?

    un for c'est comme ça:

    for ( initialisation ; condition d'arrêt ; code éxécuté à chaque boucle)

    ici ta condition d'arrêt c'est une assignation !

    tu rajouteras un '=' pour que ça devienne une condition
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  2. #22
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    slt

    merci pour vos conseils, mais mon prog ne tourne tourjours pas.
    par contre il est compilé sans pbm.

    il s'arrete a la fin de la premiere boucle while. Meme le printf ("ok") ne passe pas, et je ne comprends pas vraiment pourquoi.

  3. #23
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    est ce que tu prends seulement la peine de lire les remarques faites ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  4. #24
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    je ne vois pas de quoi tu parles
    si tu parles de mon for tout pourri, cela fait longtemps que c'est corrigé
    et c'est bien pour cela que je ne pige pas pourqoui le programme ne tourne pas

  5. #25
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Citation Envoyé par ggnore
    J'ai l'impression d'être muet.

    Tu fais ton i ++ trop tôt !
    le premièr indice de tableau que tu utilises c'est 1, or il faut commencer à 0

    fais ton i++ en fin de boucle, pareil pour j++
    et ça ?

    Dans tous les cas, si ton code a évolué, comment veux tu que nous sachions dans quel sens ?
    Y a pas marqué madame irma.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  6. #26
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    vrai, tu ne peux pas deviner. autant pour moi

    cependant les tableaux commencent aussi a zero comme tu me l'avais deja dit.
    voila mon code
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    #include<stdio.h>
    #include<io.h>
    #include <string.h>
    #include <stdlib.h>
     
     
    int main()
    {
     	double a[50][50];
     	double tps[15];
     	double autre[15];
     	double vit[15];
     	FILE *file; int  i; int j; int k;
     	char ligne[50];
     	char line[50];
     	char *p; char *sep = "; ";
     
     	file = fopen("nb.txt", "r");
     	i=0;j=0;
     	while(fgets(ligne, sizeof(ligne),file)!= NULL){
         		printf("%s", ligne);
         		strcpy(line,ligne);
         		p = strtok(line, sep);
         		do{
           			printf("%s\n",p);
           			printf("%lf\n",atof(p));
           			a[i][j]=atof(p);  
           			printf("a[%d][%d] vaut %lf\n",i,j,a[i][j]);
           			p = strtok(NULL, sep);
    			j++;
         		}
         		while(p != NULL);
    		j=0;
    		i++;  \\jusqu'a la, tout marche
          	}
        fclose(file);
    	printf("ok");   \\ne marche plus, meme le printf ne s'affiche pas
     
     	for(k=0;k<=i;k++){
    		    tps[k]=a[k][0];
                autre[k]=a[k][1];
            	vit[k]=a[k][2];
    	}
     	printf("%lf, %lf, %lf", tps[0], vit[0], autre[0]);
        return 0;
     
     
    }

  7. #27
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    pour sep, je te conseille fortement de le déclarer ainsi:

    dans ton code, c'est uniquement un pointeur et tu lui mets 2 caractères dedans, la mémoire n'est pas allouée.

    fais un strcpy pour lui donner sa valeur, histoire qu'il y ait aussi un '\0' à la fin

    Par ailleurs si le printf("ok") n'apparaît pas c'est que tout ne marche pas
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  8. #28
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    ok pour sep
    j'ai ecrit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char sep[10];
             strcpy(sep, "; \0");
    pour le printf("ok"), si je le mets dans le boucle while. il apparait sur la console, alors que comme tu le vois sur le programme , il n'y apparait pas.
    la decomposition des differentes lignes du fichier nb.txt apparaisssent decoupees et chaque morceau est bien attribué a un A[][]

  9. #29
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    pas besoin de rajouter le \0, strcpy s'en charge pour toi (essaie de bien regarder les documentations propres au fonctions que tu utilises)

    je vais prendre ton code, l'utiliser chez moi et essayer de le debugger ... Je te promets pas de la faire tout de suite.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  10. #30
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    tu peux me filer ton nb.txt stp ?

    les commentaires c'est // pas \\
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  11. #31
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    ok merci . c'est vraiment sympa
    voila le nb.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          12.3;     5.5;    12.3;  
           4.3;     8.2;     9.3;
    merci pour ton aide
    le fichier nb.txt est normalemt bien plus gros (25000 lignes *5 colonnes), mais c pour le principe
    et il y a une ligne de texte au debut du fichier nb, genre date, identification

  12. #32
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    j'ai enlevé l'inclusion de io.h parceque je ne l'ai pas, et que je ne suis pas sûr du tout que ça ait un intérêt quelconque

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    #include<stdio.h>
    #include <string.h>
    #include <stdlib.h>
     
     
    int main()
    {
        double a[50][50];
        double tps[15];
        double autre[15];
        double vit[15];
        FILE *file; 
        int  i; int j; int k;
        char ligne[50];
        char line[50];
        char *p; 
        char sep[10];
     
        strcpy(sep,"; ");
     
    	if( (file = fopen("nb.txt", "r")) == NULL){printf("erreur ouverture fichier\n");exit(1);}
     
    	i=j=0;
    	while(fgets(ligne, sizeof(ligne),file)!= NULL){
    		printf("%s", ligne);
    		strcpy(line,ligne);
    		p = strtok(line, sep);
    		do{
    			printf("%s\n",p);
    			printf("%lf\n",atof(p));
    			a[i][j]=atof(p); 
    			printf("a[%d][%d] vaut %lf\n",i,j,a[i][j]);
    			p = strtok(NULL, sep);
    			j++;
    		}while(p != NULL);
    		j=0;
    		i++;  //jusqu'a la, tout marche
    	}
    	fclose(file);
     
    	printf("\nok\n");   //ne marche plus, meme le printf ne s'affiche pas
     
    	for(k=0;k<=i;k++){
    		tps[k]=a[k][0];
    		autre[k]=a[k][1];
    		vit[k]=a[k][2];
    	}
    	printf("\n%lf, %lf, %lf\n", tps[0], vit[0], autre[0]);
    	return 0;
     
    }
    j'obtiens ça comme résultat :
    [ atelier]# ./readtxt
    12.3; 5.5; 12.3;
    12.3
    12.300000
    a[0][0] vaut 12.300000
    5.5
    5.500000
    a[0][1] vaut 5.500000
    12.3
    12.300000
    a[0][2] vaut 12.300000


    0.000000
    a[0][3] vaut 0.000000
    4.3; 8.2; 9.3;
    4.3
    4.300000
    a[1][0] vaut 4.300000
    8.2
    8.200000
    a[1][1] vaut 8.200000
    9.3
    9.300000
    a[1][2] vaut 9.300000


    0.000000
    a[1][3] vaut 0.000000

    ok

    12.300000, 12.300000, 5.500000
    ce qui m'a l'air convenable même si certaines cases sont remplies alors que ça n'apporte rien.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  13. #33
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    c t bien ce que je pensais.
    chez le programme tourne, mais pas chez moi, etla je t'avoue que ca me laisse perplexe......

    merci pour ton aide.

  14. #34
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut
    Tu as essayé de copier coller ton programme à partir du message que j'ai envoyé ?

    si ça se trouve j'ai fait une modification tout petite (dont je me souviens pas)qui change tout
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  15. #35
    Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 17
    Points : 2
    Points
    2
    Par défaut
    c bon, je viens de trouver
    dans le fichier textre, j'avais un entre a la fin de la derniere ligne
    du coup il m'affichait NULL et ne voulais pas continuer

    merci beaucoup pour ton aide et pour ton temps. C'est vraiment sympa de ta part.
    a bientot sur le forum (dsl...je suis un bon debutant en info)

  16. #36
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Points : 4 029
    Points
    4 029
    Par défaut

    c'est rien ça me fait plaisir.

    Tu dois faire un maximum de contrôles d'erreur dans tes programmes. Même si la gestion de certaines erreurs paraît absurde, on est bien content d'avoir un message clair quand ça plante.

    N'oublie pas de cliquer sur le bouton Résolu en bas à gauche de la page.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  17. #37
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par ggnore
    pour sep, je te conseille fortement de le déclarer ainsi:

    dans ton code, c'est uniquement un pointeur et tu lui mets 2 caractères dedans, la mémoire n'est pas allouée.

    fais un strcpy pour lui donner sa valeur, histoire qu'il y ait aussi un '\0' à la fin
    non char* sep="; " est tout a fait correct. Tu cree un pointeur sur char nomme sep qui contient l'adresse de la chaine constante "; ". La seule contrainte est que la chaine est constante et ne devra donc pas etre modifier

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [FSO][VBA]Lecture de fichier texte actif
    Par Marco_SAP dans le forum Access
    Réponses: 10
    Dernier message: 12/12/2006, 15h46
  2. Réponses: 2
    Dernier message: 08/11/2006, 20h57
  3. [C#]Lecture gros fichier texte
    Par kekesilo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 20/05/2006, 13h58
  4. Lecture d´un fichier texte .
    Par pilouface dans le forum C
    Réponses: 5
    Dernier message: 20/01/2006, 23h48
  5. [AS2] Lecture Ecriture Fichier Texte
    Par cpr0 dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 13/09/2005, 11h22

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