Problème Fichiers - C - Programmation
Marsh Posté le 26-06-2007 à 14:38:46
Atlanted a écrit : Bonjour,
|
Bon, je pige rien à ce que tu dis. T'écris 100 200 quand z vaut 1, etc... je pige que dalle.
La base d'un traitement d'un fichier est celle-ci:
Détail: C'est pas terrible de boucler de 1 à 9 sur un tableau et de traiter "i - 1". Autant boucler directement de 0 à <9...
Marsh Posté le 26-06-2007 à 14:52:18
En faite je chercher à faire la comparaison de 2 tableaux. Dans mon code je chercher à comparer le contenu de tabc avec un autre tableau pour effectuer un traitement par la suite (que je n'ai pas mis ici)..
Lorsque z vaut 1 je compare le contenu de tabc avec un autre tableau (que l'on ne voit pas ici), cela fonctionne correctement.
Mais quand z vaut 2 ca ne fonctionne pas, je ne pense pas que ce soit due à un fichier binaire ou non. Je cherche juste à récuperer le contenu du fichier valeur par valeur (qui sont séparées par un espace) pour les stocker dans un tableau (tabc ici) à l'aide de fscanf (ou une autre fonction que je connais pas au pire).
Re Détail : Si je boucle de 1 à 9 c'est parceque ca m'arrange à l'affichage d'avoir l'indice qui commence à 1 plutot qu'à 0
Marsh Posté le 26-06-2007 à 16:04:20
Atlanted a écrit : En faite je chercher à faire la comparaison de 2 tableaux. Dans mon code je chercher à comparer le contenu de tabc avec un autre tableau pour effectuer un traitement par la suite (que je n'ai pas mis ici).. |
La comparaison de deux tableaux se fait élément par élément. Tu considères par défaut que tes deux tableaux sont identiques et dès que tu trouves un élément qui diffère, ils sont différents.
Atlanted a écrit : Lorsque z vaut 1 je compare le contenu de tabc avec un autre tableau (que l'on ne voit pas ici), cela fonctionne correctement. |
Oui mais tu ne peux utliser fscanf() que si ton fichier est un fichier texte. fscanf analyse le texte pris dans le fichier et rempli la variable correspondante. Si ton fichier est binaire, tu stockeras les octets binaires dans ta variable !!!
Pour bien te rendre compte, pas de secret. Faut afficher les valeurs que tu récupères...
Atlanted a écrit : Re Détail : Si je boucle de 1 à 9 c'est parceque ca m'arrange à l'affichage d'avoir l'indice qui commence à 1 plutot qu'à 0 |
Je sais. C'est l'habitude des débutants en C. Ils ont du mal à se rendre compte que aller de 0 à <9 est aussi clair que d'aller de 1 à 9 (pourquoi ne pas aller de 3 à 11 tant qu'à faire) mais que c'est plus rapide
1) plus rapide de tester "inférieur pur" que "inférieur ou égal"
2) plus rapide de travailler sur "elem[i]" que "elem[i - 1]"
Marsh Posté le 26-06-2007 à 16:35:07
Citation : |
Très bonne suggestion que d'afficher pour vérifier (j'y ai même pas pensé..). Pour fscanf je ne savais pas que c'était pour un fichier texte mais alors quelle fonction utiliser pour un fichier binaire ?
Citation : |
Bien deviné je débute
Je vais essayer de creuser un peu tout ça pour voir comment récuperer les données des fichiers binaires. Merci
Marsh Posté le 26-06-2007 à 21:11:51
Atlanted a écrit : Très bonne suggestion que d'afficher pour vérifier (j'y ai même pas pensé..). Pour fscanf je ne savais pas que c'était pour un fichier texte mais alors quelle fonction utiliser pour un fichier binaire ? |
J'ai parlé de fichier texte et binaire pour simplifier, mais un fichier quel qu'il soit ne contient que de l'octet.
Si le fichier est écrit comme on écrit dans le bloc note, alors si t'écris 100 ça stockera les caractères '1', '0', '0' et '\n' soit les codes ascii hexadécimaux 48, 49, 49 et 0a
Si le fichier est écrit "au plus serré", alors si t'écris la valeur 100, ça stockera cette valeur codée en hexa soit 64. Mais si tu relis cette valeur (via un fread par exemple), alors ça te mettra ce code 64 dans ton int qui sera retraduit en "100" via l'interprétation que fait le système avec les int
Exemples simples d'écriture
Fichier texte
int main() |
Fichier binaire
int main() |
Et la lecture
Fichier texte
int main() |
Fichier binaire
int main() |
Marsh Posté le 26-06-2007 à 21:14:47
ReplyMarsh Posté le 26-06-2007 à 21:28:54
Trap D a écrit : Sve@r >> Pense quand même a vérifier la réussite de l'ouverture des fichiers. |
Ben j'ai tapé l'exemple minimaliste pour illustrer la notion. Mais effectivement, en programmation "opérationnelle", il est PRIMORDIAL de tester que "fp" ne vaut pas NULL juste après le fopen() avant d'aller plus loin (tu remarqueras d'ailleurs que j'écris directement à la racine de "C:" alors que jamais je ferais ça avec un vrai programme de travail)...
Marsh Posté le 26-06-2007 à 11:25:09
Bonjour,
J'ai un souci avec les fichiers, j'aimerais récuperer le contenu d'un fichier et le stocké dans un tableau cependant ca ne fonctionne pas et j'ai du mal à saisir pourquoi. J'écris les données dans un fichier puis, lorsque je le lis via fread, il me renvoie les bonnes valeurs. Ici, j'aimerais récuperer mes données avec fscanf pour stocker les données dans un tableau puis les réécrire à nouveau dans un fichier (faire de la modification en somme).
Concrètement, quand j'ai z qui vaut 1 j'écris dans mon fichier des données (100 200 ....)
et quand z vaut 2 j'écris des valeurs que j'ai modifié au préalable et qui valent par exemple (200 500 640...). Avec les valeurs non modifié (quand z == 1 ca fonctionne mais quand z vaut 2 non).
En faite, je souhaite récuperer les données avec fscanf des valeurs modifiés pour les comparer avec un autre tableau mais ça ne fonctionne pas et les valeurs lu via fread des valeurs modifiés que j'ai écrite dans le fichier ne sont pas les bonnes. Je pense donc avoir un souci au niveau de fscanf.
Si quelqu'un saurait me débloquer.. Merci
Voici le bout de code qui pose problème :