A votre bon coeur, aidez moi a parser ca (resolu) [C] - C++ - Programmation
Marsh Posté le 20-08-2002 à 02:44:11
1. le retour à la ligne c'est #13#10 sous Windows (t'as pas précisé l'OS)
2. c'est quoi tes 64/71?
3. Et euh, si y a eu retour à la ligne (j'ai vraiment du mal a piger ton histoire), c'est que ton #13 a pas été mangé
Allez, racontes ;-)
Marsh Posté le 20-08-2002 à 02:45:22
Zion a écrit a écrit : 1. le retour à la ligne c'est #13#10 sous Windows (t'as pas précisé l'OS) 2. c'est quoi tes 64/71? 3. Et euh, si y a eu retour à la ligne (j'ai vraiment du mal a piger ton histoire), c'est que ton #13 a pas été mangé Allez, racontes ;-) |
1) Je ça empêche pas qu'ils sont pas dans son truc
2) 64/71 etc. c'est les codes ASCII des caractères
3) c pour ça que je lui propose une corde
Marsh Posté le 20-08-2002 à 03:07:38
physis a écrit a écrit : en gros dans le fichier ya "tata<CR>titi<CR>toto" ou <CR> est le retour de ligne (13 en decimal, 0d en hexa). |
tu ferais bien d'ouvrir ton fichier en mode binaire si tu veux faire joujou avec le codage des caracteres.
Le mode texte est la pour rendre le code C portable sous unix et windows, attention donc a ce qu'il ne te mange pas des caracteres.
LeGreg
Marsh Posté le 20-08-2002 à 03:49:19
MagicBuzz a écrit a écrit : 1) Je ça empêche pas qu'ils sont pas dans son truc 2) 64/71 etc. c'est les codes ASCII des caractères 3) c pour ça que je lui propose une corde |
Ah ouai merde, j'avais pas vu le %x
Marsh Posté le 20-08-2002 à 09:58:15
legreg a écrit a écrit : tu ferais bien d'ouvrir ton fichier en mode binaire si tu veux faire joujou avec le codage des caracteres. Le mode texte est la pour rendre le code C portable sous unix et windows, attention donc a ce qu'il ne te mange pas des caracteres. LeGreg |
le fichier est deja ouvert en binaire en faisant un fopen.
en fait je viens de decouvir que c'est mon compilateur delorie/gcc pour dos qui ne va pas; quant a savoir si c'est un bug, je vais un peu plus me renseigner (si qq peu le faire ici, ca m'aiderait pas mal).
je prends ce meme code source et je le compile avec lccwin32 ca marche bien (je vois bien a l'affichage le "0d" ), par contre avec gcc 3.1 ou 2.95 ca passe pas.
donc je cherche un autre compilateur sous dos (dos parce que j'ai des imperatifs) en free si possible.
Marsh Posté le 20-08-2002 à 11:41:52
physis a écrit a écrit : le fichier est deja ouvert en binaire en faisant un fopen. |
je ne vois pas de 'b' dans ta chaine de mode d'ouverture:
Code :
|
Au moins si tu mets le 'b', tu seras sur que le choix par défaut du compilateur sera le bon..
LeGreg
Marsh Posté le 20-08-2002 à 14:06:18
legreg a écrit a écrit : je ne vois pas de 'b' dans ta chaine de mode d'ouverture:
|
Je te remercie pour ton aide, maintenant ca a l'air de fonctionner correctement. Effectivement, il fallait "forcer" l'ouverture en binaire (chose qui a l'air d'etre faite avec lccwin32 ou gcc sous HP-UX).
Jusqu'a présent, je pensais (du moins ce que je faisais a la fac):
- open -> ouverture en ascii,
- fopen -> ouverture en binaire.
Marsh Posté le 20-08-2002 à 16:02:38
physis a écrit a écrit : Je te remercie pour ton aide, maintenant ca a l'air de fonctionner correctement. Effectivement, il fallait "forcer" l'ouverture en binaire (chose qui a l'air d'etre faite avec lccwin32 ou gcc sous HP-UX). |
Sous Unix (et peut-être aussi sous Windows), le flag "b" n'a aucune signification. Du coup, c'est vrai qu'on a tendance à l'oublier quand on travaille habituellement sous Unix.
Citation : Jusqu'a présent, je pensais (du moins ce que je faisais a la fac): |
Ça n'a rien à voir. L'appel open se contente de renvoyer un descripteur de fichier sous forme d'entier, alors que fopen renvoie un descripteur de flux (type FILE), qui permet de réaliser des opérations tamponnées (et donc plus rapides).
Marsh Posté le 20-08-2002 à 16:16:57
le 'b' est justement la pour la compatibilité unix/windows.
Mais bon, on vous en voudra pas de l'oublier..
Ceci dit:
fopen c'est la norme ANSI (qui peut egalement fonctionner en mode non tamponné)
open sous Unix ou _open sous windows c'est la norme OS.
LeGreg
Marsh Posté le 21-08-2002 à 01:30:06
C'est pas normal qu'ils soient mangés !
Les sauts de ligne du PC sont faits de 2 caractères: 13 & 10, soit 0D 0A en hexa, ou CR+LF.
Par défaut, les fichiers sont ouvert en mode texte, ce qui convertit ces sauts doubles en simple LF.
Si ton texte vient d'une machine étrangère, et qu'il n'a qu'un simple CR ou LF, c'est peut-être ça qui le mange.
Solution:
-soit ouvrir avec fopen(..., "rb" );
-soit mettre au niveau global _fmode= _O_BINARY ;
Et gérer soi-même ce fichu saut !
Marsh Posté le 21-08-2002 à 01:58:03
Reply
Marsh Posté le 19-08-2002 à 23:14:34
j'ai un fichier provenant d'un programme externe que je dois parser en C.
en gros dans le fichier ya "tata<CR>titi<CR>toto" ou <CR> est le retour de ligne (13 en decimal, 0d en hexa).
je fais en C ce code la:
a l'affichage j'ai mes <CR> qui sont manges et tu coup ca m'affiche ca:
Un peu d'aide ne serait pas de refus.
merci d'avance
Message édité par physis le 20-08-2002 à 14:06:53