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 fichier par caractère & strcmp


Sujet :

C

  1. #1
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut Lecture fichier par caractère & strcmp
    Bonjour, j'aimerais connaitre la méthode pour pouvoir lire un fichier caractère par caractère SVP
    Les contenus des fichiers qui seront chargés seront certains du binaire, et j'aimerais savoir comment, par exemple s'il y a un fichier erroné dont le contenu est ...00011010110111B001010, comment peut-il détecter ce B qui est là par erreur ?
    Quelles fonctions dois-je utiliser ?
    Je dois peut être utiliser une d'entre elles memcmp, strcmp, strcoll, strncmp ? Mais pour lire chaque caractère pour le comparer je ne vois pas
    Merci

  2. #2
    Membre confirmé Avatar de Topeur
    Profil pro
    Inscrit en
    Février 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 91
    Par défaut Lecture fichier
    Quand on lit dans un fichier, il faut stocker quelque part ce que tu lis. que ca soit avec fgets ou fwrite, tu dois lui donner un tableau dans lequel il pourra écrire.

    Ce tableau, qui est en fait un char*, tu peux le parcourir ensuite a l'aide d'une boucle pour vérifier son contenu.
    Apparemment, si tu a un fichier binaire, tu dois avoir que des 0 et des 1, donc si tu obtiens quelque chose de différent alors il y aura une erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char tab[100] = "01101B01";
    int i=0;
     
    while(i!='\0')
    {
       if(tab[i]=='0' || tab[i]=='1')
       {
         // cas d'une erreur
       }
    }
    Quelque chose de ce style devrait fonctionner je pense


    Par contre, tes fonctions tel que strcmp et autre ne peuvent fonctionner car elle testent des chaines de caractères or, il faut que tu fasses ton trainement morceau par morceau!

    J'espère ne pas mettre tromper

  3. #3
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par Topeur Voir le message
    Ce tableau, qui est en fait un char*, tu peux le parcourir ensuite a l'aide d'une boucle pour vérifier son contenu.
    Non, un tableau de caractère n'est PAS un pointeur sur char! Lorsque l'identificateur d'un tableau est utilisé au sein d'une expression, il y a certes conversion implicite du tableau en un pointeur sur son premier élément, mais tableaux et pointeurs sont deux choses bien distinctes.

    De plus, un fichier binaire n'est PAS un fichier texte contenant un suite de '1' et de '0', comme tu sembles le supposer das ton code plus haut. Il est possible de lire un fichier binaire byte par byte à l'aide de la fonction fread(), déclarée dans le fichier d'en-tête standard stdio.h, et de stocker le résultat de cette lecture dans un tableau de unsigned char. L'information contenue dans ce tableau n'a pas de signification en soit, à moins que tu possèdes la spécification du format utilisé par le fichier. Tu pourras ainsi décoder les informations stockées dans ton tableau.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  4. #4
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Merci à vous deux, pour ces réponses très complètes, je vais travailler ça et je reviendrai.

    Merci encore

  5. #5
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Et je voulais vous demander, dois-je procéder de la même manière pour faire la même chose mais dans le cas ou c'est un fichier texte contenant une suite de 0 et de 1 justement ?

  6. #6
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par YASIR Voir le message
    Et je voulais vous demander, dois-je procéder de la même manière pour faire la même chose mais dans le cas ou c'est un fichier texte contenant une suite de 0 et de 1 justement ?
    Quel intérêt d'avoir un tel fichier? Pour un fichier texte, tu peux faire une lecture ligne par ligne avec fgets() ou caractère par caractère avec fgetc().

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Je travaille pour un projet à la fac qui consiste à créer un programme capable de crypter et décrypter à l'aide de l'algorithme du sac a dos avec chiffrement asymétrique à deux clés.
    Et les phrases a crypter doivent d'abord être converties en binaire à l'aide de la table ASCII.
    Puis chaque bit ( 0 ou 1 ) est multiplié à la clé publique de chiffrement qui est représentée par une suite de sac à dos général (quant à la clée privée qui déchiffre, c'est une suite supercroissante avec deux entiers W et M premiers).
    Puis on obtient la somme générale des XiBi (X: bits B:clé publique) qui donne un entier que l'on envoie au recepteur qui décode ensuite à l'aide de la clé privée.
    Voilà, d'ou ma question.

  8. #8
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par YASIR Voir le message
    Je travaille pour un projet à la fac qui consiste à créer un programme capable de crypter et décrypter à l'aide de l'algorithme du sac a dos avec chiffrement asymétrique à deux clés.
    Et les phrases a crypter doivent d'abord être converties en binaire à l'aide de la table ASCII.
    Puis chaque bit ( 0 ou 1 ) est multiplié à la clé publique de chiffrement qui est représentée par une suite de sac à dos général (quant à la clée privée qui déchiffre, c'est une suite supercroissante avec deux entiers W et M premiers).
    Puis on obtient la somme générale des XiBi (X: bits B:clé publique) qui donne un entier que l'on envoie au recepteur qui décode ensuite à l'aide de la clé privée.
    Voilà, d'ou ma question.
    Mais ici, le fichier crypté est un fichier binaire et non pas un fichier texte.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par YASIR Voir le message
    Je travaille pour un projet à la fac qui consiste à créer un programme capable de crypter et décrypter à l'aide de l'algorithme du sac a dos avec chiffrement asymétrique à deux clés.
    Et les phrases a crypter doivent d'abord être converties en binaire à l'aide de la table ASCII.
    Puis chaque bit ( 0 ou 1 ) est multiplié à la clé publique de chiffrement qui est représentée par une suite de sac à dos général (quant à la clée privée qui déchiffre, c'est une suite supercroissante avec deux entiers W et M premiers).
    Puis on obtient la somme générale des XiBi (X: bits B:clé publique) qui donne un entier que l'on envoie au recepteur qui décode ensuite à l'aide de la clé privée.
    Voilà, d'ou ma question.
    Je pense que tous les intervenants comprendront parfaitement que tu pouvais avoir besoin de travailler en binaire... mais toi tu n'as pas compris la question de Thierry.
    En fait, sa question ne porte pas sur l'intérêt que t'as de travailler avec du binaire, mais sur la raison que t'as de le stocker ainsi dans un fichier.
    Je m'explique
    Imaginons que tu doives travailler et stocker la chaine "123". Cette chaine s'écrit en binaire [0010 0101] [0010 0110] [0010 0111] ou plus simplement 0x49, 0x50 et 0x51.
    Est-ce que tu vas stocker dans ton fichier les caractères '0', '0', '1', '0', '0', '0', '1', '0', '1' (soit 8 caractères donc 8 octets rien que pour le premier chiffre "1" de "123") ou bien tu vas être plus fin et ne stocker que le caractère 0x49 (soit un seul octet) ?
    En fait, il ne faut pas confondre "stockage" et "utilisation" des données. Tu peux très bien travailler en binaire et aussi stocker tes valeurs en binaire. En fait, la seule raison qui explique que tu stockes tes valeurs en ascii dans ton fichier c'est que tu pourrais avoir envie d'ouvrir ensuite ton fichier avec un éditeur quelconque (pour y rajouter des trucs ou simplement vérifier).
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Ah oui, merci Sve@r et Thierry, j'avais effectivement mal compris plusieurs choses. Et tu m'as éclairé sur le stockage des données.

    Et je crois que ce n'est pas clair mais c'est quoi précisément un fichier binaire, même en cherchant sur google je n'ai pas bien capté.

    Moi j'ai besoin, par exemple de convertir " Bonjour c'est moi " qui se trouve dans un fichier texte, j'ai besoin de convertir les caractères en binaire.
    Ensuite stocker les "0" et les "1" sur le même fichier texte.
    Et vous me proposez plutot de stocker les valeurs ASCII, c'est ca ?

  11. #11
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Thierry pourrais-tu m'expliquer STP

  12. #12
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut Lecture par ligne
    Si on a un fichier txt avec comme contenu
    11010001
    11000101
    10010010
    00101010
    ...
    et une suite par exemple {5, 14, 27, 59, 60, 81, 75, 100} {a1,a2,...,a8}

    j'aimerais demander au programme de faire les opérations suivantes :

    pour chaque ligne (et donc bloc de 8 bits), il faut calculer
    bit1*a1+bit2*a2+bit3*a3...
    pour la 1ere ligne cela donnerait, 1*5 + 1*14 + 0*27 + 1*59 + 0*60 + 0*81...
    et ainsi on obtient un nombre C pour chaque bloc de 8bits


    je n'arrive pas à spécifier au programme qu'il faut le faire pour chaque ligne pour obtenir une sorte de suite {C1,C2,C3...Cn}

    Auriez vous une petite piste svp

  13. #13
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Citation Envoyé par YASIR Voir le message
    Si on a un fichier txt avec comme contenu
    11010001
    11000101
    10010010
    00101010
    ...
    et une suite par exemple {5, 14, 27, 59, 60, 81, 75, 100} {a1,a2,...,a8}

    j'aimerais demander au programme de faire les opérations suivantes :

    pour chaque ligne (et donc bloc de 8 bits), il faut calculer
    bit1*a1+bit2*a2+bit3*a3...
    pour la 1ere ligne cela donnerait, 1*5 + 1*14 + 0*27 + 1*59 + 0*60 + 0*81...
    et ainsi on obtient un nombre C pour chaque bloc de 8bits


    je n'arrive pas à spécifier au programme qu'il faut le faire pour chaque ligne pour obtenir une sorte de suite {C1,C2,C3...Cn}

    Auriez vous une petite piste svp
    Poste le code que tu as déjà écrit et dis-nous sur quoi tu bloques

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  14. #14
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Alors voilà le morceau de code que j'ai fait mais ne me donne pas du tout ce que je souhaite, c'est un problème de tableau ou de boucle , je ne sais pas

    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
     
        fp = fopen ("fichiertest.txt", "rt"); // r en lecture
        fscanf(fp,"%d",&a);
        if(fp == NULL){
          printf("Impossible d'ouvrir le fichier fichiertest.txt\n\n");
          exit(1);
                    }
                    printf("--------Ouverture du fichier fichiertest.txt-------\n\n"); 
     
                    //afficher le fichier ligne par ligne 
     
                    while(fgets(ligne_lue, 512, fp) != NULL){
                      printf("\t%s\n", ligne_lue);
                    }
                    if(fclose(fp) == EOF){
                      printf("Probleme de fermeture du fichier fichiertest.txt");
                      exit(1);
                    }
                    printf("-------Fermeture du fichier fichiertest.txt-------\n\n\n");
     
                    for (i=1;i<=8;i++){
                        printf("Entrer l'élément %d de la suite à utiliser : ",i);
                        scanf("%d",&C[i]);                    
                        }
                        for (i=1;i<=8;i++){
                        printf("numéro %d = %d ",i,C[i]);
                        }
                    for (i=1;i<=8;i++){
     
                                 res[i]=ligne_lue[i]*C[i];
     
     
                                 printf("%d\n\n",res[i]);
     
                                 }

  15. #15
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Ca me donne deux gros entiers sur les deux premières lignes puis que des 0 sur les suivantes alors que pour chaque ligne il devrait m'afficher la somme :

    Ci = B(i) * X(i)
    ((avec X(i) valant 0 ou 1 suivant les lignes du fichier texte
    et B(i) la suite entrée par l'utilisateur ou même chargée depuis un fichier texte.txt dont le contenu se composent d'int et se présente de la forme B1 B2 B3... séparé par des espaces))

  16. #16
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Aurais-tu un code compilable? C'est plus facile pour tester et voir ce qui ne va pas.

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  17. #17
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Oui voila désolé

    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
    52
    53
    54
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void){
     
            int fin=0, option=0, a,i;
        FILE *fp;  
        char ligne_lue[512];
        int res[i];
        int C[i];
     
     
                    printf("vous avez choisi \"charger\"\n\n\n");
                    option = 0;
                    fp = fopen ("fichiertest.txt", "rt"); // r en lecture
                    fscanf(fp,"%d",&a);
                    if(fp == NULL){
                      printf("Impossible d'ouvrir le fichier fichiertest.txt\n\n");
                      exit(1);
                    }
                    printf("--------Ouverture du fichier fichiertest.txt-------\n\n"); 
     
                    //afficher le fichier ligne par ligne 
     
                    while(fgets(ligne_lue, 512, fp) != NULL){
                      printf("\t%s\n", ligne_lue);
                    }
                    if(fclose(fp) == EOF){
                      printf("Probleme de fermeture du fichier fichiertest.txt");
                      exit(1);
                    }
                    printf("-------Fermeture du fichier fichiertest.txt-------\n\n\n");
     
                    for (i=1;i<=8;i++){
                        printf("Entrer l'élément %d de la suite à utiliser : ",i);
                        scanf("%d",&C[i]);                    
                        }
                        for (i=1;i<=8;i++){
                        printf("numéro %d = %d ",i,C[i]);
                        }
                    for (i=1;i<=8;i++){
     
                                 res[i]=ligne_lue[i]*C[i];
     
     
                                 printf("%d\n\n",res[i]);
     
                                 }
     
                    system("PAUSE");
     
     
    }

  18. #18
    Membre éprouvé Avatar de bobmidou
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 121
    Par défaut
    Salut

    Voici un exemple classique qui marche pour une seule ligne , regarde si ça peut t'aider
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    int main(void){
     
            int fin = 0, option = 0, i = 0;
        FILE *fp;  
        char ligne_lue[512];
    	char *chaque_ligne[20]; // contient chaque ligne (maximum 20 lignes)
        int res[8];
        int C[8];
    	int nombre_de_ligne = 0;
    	int nombre_d_operation = 0;
    	int j = 0; // indicateur de ligne;
     
     
     
        if ((fp = fopen ("fichiertest.txt", "rt")) == NULL)
    	{
    		printf("Impossible d'ouvrir le fichier fichiertest.txt\n\n");
    		exit(1);
    	}
    			// r en lecture
     
    	else 
    	{
    			printf("vous avez choisi \"charger\"\n\n\n");
     
    		while(fgets(ligne_lue, sizeof(ligne_lue), fp) != NULL)
    		{
    			chaque_ligne[i] = ligne_lue;
    			printf("\t%s\n", ligne_lue);
    			nombre_de_ligne++;
    			i++;
    		}
    		printf("\n\n");
    		printf("Le fichier contient: %d  ligne(s)\n\n", nombre_de_ligne);
    		fclose(fp);
    		nombre_d_operation = nombre_de_ligne;
    	}
     
    	for (i = 0; i < 8 ; i++)
    	{
    		for (j = 0 ; j < nombre_d_operation ; j++)
    		{
                if ((chaque_ligne[j][i] != '0') && (chaque_ligne[j][i] != '1'))// on s'en fou de 0
    			{
    				printf("ton fichier contient des caractères differents de 0 et 1\n\n");
    				printf("Veuillez corriger ton fichier texte (voir plus haut)\n\n");
    				return 0;
    			}
    		}
    	}
     
    	j=0;
     
    	while (j < nombre_d_operation)
    	{
    		printf("#####  Calcul pour la ligne: %d  ######\n\n",j+1);
     
    		for (i = 0; i < 8; i++)
    		{
    			// lire les C[i]
    			printf("Entrer l'élément %d de la suite à utiliser : ",i);
    			scanf("%d",&C[i]);
    			if (chaque_ligne[j][i] == '1') // on s'en fou de 0
    			res[j] += C[i];
    		}
     
    		printf("\n\n");
    		printf("Résultat de la ligne  %d = %d \n\n",(j+1),res[j]);
    		j++;
     
    	}
    	printf("\n\n");
     
        system("PAUSE");
    	return 0;
    }
    Bonne chance

  19. #19
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par YASIR Voir le message
    Et je crois que ce n'est pas clair mais c'est quoi précisément un fichier binaire, même en cherchant sur google je n'ai pas bien capté.
    En fait, un fichier binaire c'est un fichier qui n'est pas "fichier texte". Donc pour bien comprendre ce qu'est un fichier binaire, faut juste comprendre ce qu'est un fichier texte.
    Un fichier texte est un fichier qui est compréhensible par un humain donc qui contient du texte. Ce texte est découpé en caractères et chaque caractère est codé en ascii.
    Donc un fichier qui s'affiche (via blocnote) ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Bonjour le monde
    Tout va bien
    Contient en fait la séquence suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'B', 'o', 'n', 'j', 'o', 'u', 'r', ' ', 'l', 'e', ' ', 'm', 'o', 'n', 'd', 'e', '\n', 'T', 'o', 'u', 't', ' ', 'v', 'a', ' ', 'b', 'i', 'e', 'n', '\n'
    Chaque caractère 'x' étant codé sur un caractère (donc 8 bits en ascii)

    Donc l'avantage c'est que tu peux ouvrir ce fichier avec le blocnote, rajouter des infos et le refermer. L'inconvénient c'est que tu perds de la place.

    De l'autre coté t'as les fichiers binaires qui regroupent tout ce qui n'est exploitable que par des programmes. On trouve en vrac des films mpeg ou avi, des sons wav ou mp3, des images jpeg ou gif, des documents doc ou xls. Chaque fichier contient en vrac des octets qui, pris un à un ne représentent rien mais doivent être récupérés par le programme associé qui ira en prendre par exemple 5 puis 12 puis 3 mais pour lui, ces 20 octets s'intègrent dans la structure qui va bien pour reformer un son.

    Citation Envoyé par YASIR Voir le message
    Ensuite stocker les "0" et les "1" sur le même fichier texte.
    Et vous me proposez plutot de stocker les valeurs ASCII, c'est ca ?
    Donc là tu te trouves dans une phase de choix. Tu as en effet la possibilité de
    1)
    - transformer ton binaire en texte (chaque bit 0/1 devient un caractère '0' ou '1' mais il se traduit alors par 00000000 ou 00000001 (soit 8 bits)
    - écrire ensuite ce caractère '0' ou '1' dans le fichier
    Et tu te retrouves avec un fichier qui, pour stocker l'octet 01100101 stockera '0', 1', '1', '0', '0', 0', 1', 0', '1'. Tu multiplies la taille par 8. Mais tu peux ouvrir ton fichier avec le blocnote et changer les 0 et les 1 si t'as besoin
    En retour il te faut ensuite lire 8 caractères et retransformer ces 8 caractères en bit pour pouvoir réutiliser ton fichier dans ton programme

    2)
    - rester en binaire. Tu as un octet à stocker, tu le stockes tel quel. Le fichier résultat ne sera pas visible avec le bloc note mais ton programme pourra le relire facilement pour s'en resservir
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  20. #20
    Membre confirmé Avatar de YASIR
    Profil pro
    Inscrit en
    Février 2008
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 101
    Par défaut
    Citation Envoyé par bobmidou Voir le message
    Salut

    Voici un exemple classique qui marche pour une seule ligne , regarde si ça peut t'aider
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    int main(void){
     
            int fin = 0, option = 0, i = 0;
        FILE *fp;  
        char ligne_lue[512];
    	char *chaque_ligne[20]; // contient chaque ligne (maximum 20 lignes)
        int res[8];
        int C[8];
    	int nombre_de_ligne = 0;
    	int nombre_d_operation = 0;
    	int j = 0; // indicateur de ligne;
     
     
     
        if ((fp = fopen ("fichiertest.txt", "rt")) == NULL)
    	{
    		printf("Impossible d'ouvrir le fichier fichiertest.txt\n\n");
    		exit(1);
    	}
    			// r en lecture
     
    	else 
    	{
    			printf("vous avez choisi \"charger\"\n\n\n");
     
    		while(fgets(ligne_lue, sizeof(ligne_lue), fp) != NULL)
    		{
    			chaque_ligne[i] = ligne_lue;
    			printf("\t%s\n", ligne_lue);
    			nombre_de_ligne++;
    			i++;
    		}
    		printf("\n\n");
    		printf("Le fichier contient: %d  ligne(s)\n\n", nombre_de_ligne);
    		fclose(fp);
    		nombre_d_operation = nombre_de_ligne;
    	}
     
    	for (i = 0; i < 8 ; i++)
    	{
    		for (j = 0 ; j < nombre_d_operation ; j++)
    		{
                if ((chaque_ligne[j][i] != '0') && (chaque_ligne[j][i] != '1'))// on s'en fou de 0
    			{
    				printf("ton fichier contient des caractères differents de 0 et 1\n\n");
    				printf("Veuillez corriger ton fichier texte (voir plus haut)\n\n");
    				return 0;
    			}
    		}
    	}
     
    	j=0;
     
    	while (j < nombre_d_operation)
    	{
    		printf("#####  Calcul pour la ligne: %d  ######\n\n",j+1);
     
    		for (i = 0; i < 8; i++)
    		{
    			// lire les C[i]
    			printf("Entrer l'élément %d de la suite à utiliser : ",i);
    			scanf("%d",&C[i]);
    			if (chaque_ligne[j][i] == '1') // on s'en fou de 0
    			res[j] += C[i];
    		}
     
    		printf("\n\n");
    		printf("Résultat de la ligne  %d = %d \n\n",(j+1),res[j]);
    		j++;
     
    	}
    	printf("\n\n");
     
        system("PAUSE");
    	return 0;
    }
    Bonne chance

    Merci pour ce code, à première vue il m'a l'air tres interessant et je pense qu'il m'aidera. Je vais l'analyser et le travailler. Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probleme lecture fichier par fichier
    Par sousou12 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 01/07/2013, 22h02
  2. Réponses: 20
    Dernier message: 09/02/2006, 09h45
  3. Réponses: 1
    Dernier message: 26/01/2006, 18h16
  4. [debutant]lecture fichier ligne par ligne
    Par Battosaiii dans le forum C
    Réponses: 2
    Dernier message: 13/11/2005, 19h02

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