CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Help parser de fichier

totodu91
totodu91
Niveau 8
12 juillet 2014 à 20:41:54

Bonjour,

J'essaie desesperement de codé un parser de fichier.
Les fichiers que je parse sont toujours de la meme forme

model
info valeur
end

object
type object
info valeur
info valeur
end

object
type object
info valeur
info valeur
end

Je voudrais recuperer si c'est un model ou un object et recuperer ensuite les valeur qui lui correspondent pour pouvoir creer l'objet dans mon code.
Jusqu'ici j'ai réussi a recuperer le contenu de mon fichier mais quand je detecte le mot objet je ne sais pas comment recuperer ce qui suit jusqu'a rencontrer le mot "end" et passer a l'objet suivant.

dark_drow
dark_drow
Niveau 15
12 juillet 2014 à 21:16:35

je pense que la mention de ton langage de programmation pourra aider :)

ranarama
ranarama
Niveau 7
12 juillet 2014 à 23:49:11

le mieux c'est de copier tout le contenu du fichier en mémoire dans un tableau, ensuite tu te déplace en modifiant l'index [i]. Mais attention au piège du(des) caractères de retour à la ligne :rire:

totodu91
totodu91
Niveau 8
13 juillet 2014 à 14:05:30

oui désolé, merci pour les réponses déja.
Je code en C++.
J'ai déja enregistré tous le contenu du fichier ligne par ligne dans un vector<string>.
Mais je ne sais pas comment gérer la structure de mon fichier.
Par exemple:

Object
Sphere 0.2 0.3 0.1
Color 0.2 0.3 0.1
spec_coeff 0.2
end

Ce genre de structure je dois récuperer les données et donc savoir que je vais devoir creer un objet de type sphere avec les coordonnées de son center, ensuite sa couleur avec les valeurs etc jusqu'a rencontrer le mot clé "end" et savoir que je vais passer a un autre objet.

ranarama
ranarama
Niveau 7
13 juillet 2014 à 14:51:54

un tabl dyn c inutile ici mais pquoi pas après tout
Déja à ta place je commencerai par créer une boucle qui affiche à l'écran quel caractères correspond à quel indices, t'auras une vison complète du résultat vers lequel tendre, et ce sera utile pour debugger.

ensuite pour l'algo suffit de chercher chaque mot clés puis récupérer les valeurs numériques une à une, au caractère(s) CR+LR ?? (ça dépend si t'es sous windows ou linux) tu passes au mot clé suivant, etc... aumot end => ça recommence avec un autre objet...
au caractère(s) /0 c fini .

je voit pas le pb en fait c juste des ch'tites boucles imbriquées de mon point de vue. Pas vraiment la peine d'entrer dans la théorie (automates, parsing mes couilles)

Ha si tu veux pas réinventer la roue tu utilises la fonction find() de la STL :
http://fr.openclassrooms.com/informatique/cours/programmez-avec-le-langage-c/la-puissance-des-algorithmes

Pseudo supprimé
Pseudo supprimé 14 juillet 2014 à 00:17:51

Pour lire des données comme celles-là je stocke chaque ligne mais dans un stringstream. Ainsi, si tu commences à lire avec ta première ligne, tu fais :

std::vector<stringstream> lignes; // Contient le fichier ligne par ligne

//Tu remplis les lignes : getline retourne une chaîne que tu met dans un stringstream du tableau, en avançant d'une case à chaque fois

std::string contenu; // Pour stocker les mots
lignes[0] >> contenu; // Va lire le premier mot (jusqu'à un espace)
if(contenu=="Objet"){ // On commence à traiter l'objet
// etc...

Après quand tu vas à la ligne suivante et que tu vois que c'est une Sphère, tu continue d'extraire avec >> mais dans des float par exemple. Ainsi dans ton fichier tes "0.2" deviendront des nombres ! Après il faut trouver la fin pour chercher d'autres objets.

Ceci n'est qu'un exemple :hap:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment