Accueil > Forum > > > > caractères/entiers: comment les différencier?
caractères/entiers: comment les différencier?
vendredi 9 décembre 2005 à 11:49:09 |
caractères/entiers: comment les différencier?

badboy38
|
Bonjour,
Débutant en C, je programme sous linux. Je suis en train de créer un
programme qui doit aller chercher des données numériques dans un
fichier. Jusque là c'est simple, j'utilise la fonction fscanf, mais
lorsque je rajoute des commentaires dans le fichier texte, le programme
perd les pédales et lit x fois de suite le même nombre.
Comment faire pour que le programme ignore les commentaires et continue la lecture des nombres dans l'ordre?
Merci pour vos réponsesBadBoy38
--==OPEN.SOURCES.FREE.FR==-- site d'open source VB, VB.NET et TI!!!<
|
|
vendredi 9 décembre 2005 à 12:06:58 |
Re : caactères/entiers: comment les différencier?

MoDDiB
|
Mets tes commentaires entre 2 balises ( @ ou # par exemple ) et ignore tout simplment tout ce qu'il y a entre ces 2 balises..
|
|
vendredi 9 décembre 2005 à 12:15:52 |
Re : caactères/entiers: comment les différencier?

badboy38
|
C'est une bonne idée, mais le problème reste quand même... Comment,
dans ces cas là, vérifier que les nombres qui sont utiles au programme
ne sont pas remplacés par des lettres? BadBoy38
--==OPEN.SOURCES.FREE.FR==-- site d'open source VB, VB.NET et TI!!!<
|
|
vendredi 9 décembre 2005 à 15:09:08 |
Re : caactères/entiers: comment les différencier?

vdust
|
Pour pouvoir ignorer les commentaires, on peut s'y prendre en 2 étapes :
Tout d'abord, récupérer le contenu du fichier dans un buffer.
Ensuite, supprimer les commentaires en recherchant les balises.
Puis traiter la chaîne nettoyée avec sscanf
-- Virtual Dust --
|
|
vendredi 9 décembre 2005 à 15:35:36 |
Re : caactères/entiers: comment les différencier?

vecchio56
|
En fait ce n'est pas un problème si simple, ca revient à écrire un parser. Par exemple, si les commentaires sont les caractères suivant //, il faut faire attention qu'on n'est pas dans une chaine de caractères
Par contre, je ne comprends pas le problème de différencier des entiers et des caractères
|
|
lundi 12 décembre 2005 à 19:10:11 |
Re : caractères/entiers: comment les différencier?

badboy38
|
Bonsoir,
D'abord, merci pour vos réponses même si elles ne correspondent pas
tout à fait à ce que j'attends. Un exemple du fichier à traiter:
-----------Début du fichier----------
2=>taille matrice
Matrice A
5 8
4 6
Matrice B
8 -4
3 9
-----------Fin du fichier--------------
Les questions sont: 1) comment ne "voir" que les nombres?
2) comment éviter une lettre à la place d'un des nombres?
MerciBadBoy38
--==OPEN.SOURCES.FREE.FR==-- site d'open source VB et TI!!!
|
|
mardi 13 décembre 2005 à 01:58:35 |
Re : caractères/entiers: comment les différencier?

vdust
|
Ce qu'il faut garder à l'esprit, c'est
que pour lite un fichier, il faut en connaître le format. Avec ton
exemple, j'en déduit que le format général de ton fichier est (et il
doit toujours être du même type) :
-----------Début du fichier-----------
tailleMatrice chaineAIgnorer
nomMatrice1
[matrice]
nomMatrice2
[matrice]
nomMatrice3
...
------------Fin du fichier------------
Maintenant, avec fcanf, le détail est simple : si la fonction ne trouve
pas l'entrée demandée dans le format, elle ne stoque rien dans la
variable associée et arrête de scanner le fichier. Par exemple, si mon
fichier contient "toto" et que je fais
j = -1;
i = fscanf(mon_fichier, "%d", j);
i contient la valeur 0 (le nombre de valeurs correctement lues) et j contient -1 (valeur par défaut).
En règle générale, comme un fichier a un format bien défini, lorsqu'une chaîne ne correspond pas à ce que l'on attend,
c'est qu'il y a une erreur de syntaxe (que l'on signale à
l'utilisateur). S'il y a un caractère non numérique alors que tu veux
un nombre, la fonction abandonne sans rien lire. C'est pour ça que ta
fonction boucle toujours sur la même valeur, si tu essaies de lire un
nombre alors qu'il y a autre chose. C'est pour ça aussi qu'il est
important de bien définir le format du fichier pour savoir à chaque
étape ce que l'on doit lire ensuite. Dans la structure précédente, tu
as une ligne qui identifie la matrice suivante ("Matrice A", "Matrice
B", ...). Tu dois donc la lire (= récupérer, même si tu ne t'en sers
pas) par une instruction du type suivant :
fscanf(fichier, "%s\n", temp);
où temp est un buffer de type char : char temp[256]; par exemple.
(Note : la première ligne peut-être de la même manière lue avec fscanf(fichier, "%d%s\n", n, temp); si tu souhaites récupérer la taille de la matrice dans une variable int n;)
Une fois cette ligne lue, tu sais ensuite que tu attends les valeurs de
la matrice. Attention ! Si jamais la ligne "nomMatriceN" n'est pas
présente, l'instruction donnée précédemment lira quand même la ligne.
D'où l'importance encore une fois d'un format fixe pour le fichier.
A chaque fois que tu exécute fscanf, je te conseille de vérifier
également sa valeur de retour qui est le nombre de valeurs lues et
stoquées dans les variables passées en arguments de fscanf. Si elle
vaut 0 ou est inférieure au nombre de valeurs souhaitées, c'est que le
format attendu ne correspondait pas à ce que contenait le fichier.
Enfin, la fonction retourne EOF si la fin du fichier est atteinte (dans
le cas seulement où aucune valeur n'a été lue).
J'espère que cela pourra t'aider.
Je te conseille aussi de lire attentivement la page du man concernant
fscanf pour en comprendre le fonctionnement plus en détaille.
-- Virtual Dust --
|
|
mardi 13 décembre 2005 à 12:30:38 |
Re : caractères/entiers: comment les différencier?

badboy38
|
Bonjour,
Merci pour vos réponses. J'ai trouvé une solution pas très propre à mon
problème, mais qui fonctionne: while(fgetc(fc)!='\n'){} pour lignes de
commentaires...
BadBoy38
--==OPEN.SOURCES.FREE.FR==-- site d'open source VB et TI!!!<
|
|
mardi 13 décembre 2005 à 18:21:37 |
Re : caractères/entiers: comment les différencier?

vdust
|
un fscanf(fc, "%s\n", temp); fait exactement la même chose, mais en plus propre :)
-- Virtual Dust --
|
|
Cette discussion est classée dans : fichier, entiers, programme, caractères, différencier
Répondre à ce message
Sujets en rapport avec ce message
probléme pour mon projet [ par nina89 ]
[color=red]bonjours tous[/color], Je suis débutant en Programmation et je veut créer en langage C 2 programme et j'y arrive pas[^^sad1] tous ce que
J’ai créé un fichier contenant des chaînes de caractères [ par enoitnaillal ]
Bonjour, J’ai créé un fichier contenant des chaînes de caractères, lorsque j’effectue une recherche et que la chaîne contient une lettre accentuée la
Aide pour écire un programme! [ par corkycouenne ]
bonjour! J'ai un tp d'informatique à préparer sauf que cette matière et moi font deux! XD J'aimerais bien des conseils des idées des exemples pour qu
[c]s'est possible un programme comme sa ? [ par CreateurDeBug ]
Bonjour, s'est possible un programme qu'ont luit poserais des questions et il ouvrirais le contenue d'un fichier texte en rapport avec se qu'on à dema
[DOS]Question .bat [ par lakeeee ]
Salut, Je voudrais créer un fichier .bat pour lancer un programme .exe qui s'exécute dans une fenêtre DOS. Mon programme se lance bien avec la comman
probleme pagefile et programme C [ par ar1du62 ]
Bonjour ! Voila my soucy ^^ <- qui me fais pas rire en fait : J'ai créé un programme qui tourne toute la journée sur une bécane windows xp et qui en
problème lors de la lecture d'un fichier [ par pagoda ]
Bonjour, j'ai un souci avec un programme que je dois faire dans le cadre d'un projet pour mon école d'ingé. Je dois en effet réaliser un programme q
[Programme en C] Gestion d'un fichier texte dans un programme en C [ par Azshari ]
Bonjour à tous Mon problème est le suivant, j'ai un fichier .FIL que j'aimerai exploiter. Voila ce qu'on peut trouver dans ce fichier lorsqu'on l'o
c++: compiler un programme avec de nombreux fichier et dossier en un seul exe [ par roryaerugino ]
Bonjour j'ai un programme contenant des dossiers et des fichiers. Je lance l'application par un .vbs Je souhaiterais compiler ce programme pour en fa
correction programme sous isis [ par freeidea ]
salut je demande aux programmeur du site de me corriger le probleme suivant vu sur schema sous isis: l'afficheur est programmé pour une marge de tempe
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|