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 :

Interet d'un format de fichier perso ?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 75
    Par défaut Interet d'un format de fichier perso ?
    Bonjour a tous.

    Voilà, je suis débutant dans la programmation, et je me pose deux trois questions au niveau des formats de fichier.

    Je suis en train de coder un petit jeu 2d, et je me demandais quel était l'interet de poseder(posseder?) un format de fichier perso.

    Pour le moment je n'utilise que les fichiers .txt et les fichier de format images (jpg,bmp).

    Je n'ai jamais essayer (de peur de faire une connerie irrécupérable ) de crée mon propre type de fichier, mais j'aimerais savoir plusieurs choses.

    Imaginons que je fasse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE *fichier=fopen("test.lps","w");
    Je suppose que cela compile. Maintenant, si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fichier,"test");
    Est ce que cela l'écrira ? Sachant que test.lps n'est pas un fichier texte, "test" sera t'il un tableau de char ?

    Comment puis je l'ouvrir en dehors de mon programme ?

    Est ce que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fscanf(fichier,"%s",chaine);
    Marchera ? Ou bien cela ne marche que dans les fichiers texte ?

    Pouvez vous me donnez des exemples d'utilisation utile de fichier de format perso ? (sans parler des fichiers devant contenir des informations pour de la 3D si possible car cela ne me concerne pas)

    Maintenant, j'aimerais avoir des informations sur les fichiers ouvert en mode binaire.

    Est ce qu'on peut ouvrir un fichier de format perso en mode binaire ?

    Si l'on ecris dans un fichier texte en mode binaire une chaine de caractère. Peut on ouvrir le dit fichier en dehors du programme et voir la chaine ? Si non, verra t'on des 1 et des 0 ?

    Si l'on veut se déplacer dans un fichier pour lire tel ou tel informations, est ce vraiment indispensable d'écrire/lire le fichier en mode binaire ?

    Merci d'avance pour vos réponses

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Par défaut
    il n'y a aucun rapport entre le nom d'un fichier et le contenu. Les extentions sont là uniquement pour que l'OS puisse reconnaitre un fichier pour que lorsque tu double clic dessus windows (par ex) lance le bon programme associé, c'est tout.

  3. #3
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par lapos
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FILE *fichier=fopen("test.lps","w");
    Je suppose que cela compile. Maintenant, si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fprintf(fichier,"test");
    Est ce que cela l'écrira ? Sachant que test.lps n'est pas un fichier texte, "test" sera t'il un tableau de char ?
    Oui bien sûr que ca va écrire dans ton fichier ! Même si ton extention n'est pas txt, cela ne veut en aucun dire que ton fichier ne sera pas un fichier texte, tout dépend de la façon dont tu va écrire les données dans ton fichier et ici en l'occurrence, c'est dans un format très basique donc pas de soucis !

    Citation Envoyé par lapos
    Comment puis je l'ouvrir en dehors de mon programme ?
    Bin avec un programme comme Bloc Note ou Notepad etc... ca devrait passer sans soucis !

    Pour faire court, un format perso n'est pas tant l'extension de ton fichier mais plutôt dans la manière d'écrire tes données dans ton fichier. Ici c'est un simple fichier texte avec une autre extension donc pas de réelle utilité mais cela n'empêche en rien
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    Première chose : c'est "posséder"...

    Deuxième chose : tu te compliques BEAUCOUP TROP la vie... Un fichier tu l'ouvres en binaire ou en texte c'est pratiquement la même chose, la différence c'est surtout que le contenu d'un fichier texte c'est exclusivement du texte, alors qu'en binaire bah il y a des données chiffrées et des données textes éventuellement.

    Si tu veux un format de fichier perso... Déjà je te déconseille de créer un nouveau format d'image ça ne te servira à rien, les formats d'images actuels sont largement suffisant.
    En revanche, tu peux créer un format de fichiers pour par exemple contenir l'historique des parties d'un jeu vidéo, les meilleurs scores des joueurs, ou mieux les sauvegardes. Ces types de fichiers sont spécifiques à chaque jeu vidéo puisque peu de jeux vidéos partagent les mêmes informations de sauvegarde.
    Dans ton jeu, par exemple, tu vas devoir sauvegarder le score du joueur, la somme d'argent accumulé et les outils qu'il a dans son inventaire. Dans le jeu Civilization, en revanche il faut sauvegarder la position des villes, leur état, etc.
    Ce qui fait deux formats de fichiers différents.
    Bien sûr tu n'es pas obligé d'utiliser un format à toi pour sauvegarder les données, tu peux les sauvegarder en texte en utilisant des balises pour repérer les données. Mais le fait d'avoir ton propre format de fichier te permet d'organiser les données de façon plus précises, de leur donner une structure spécifique pour accélérer leur lecture.
    Et tu peux aussi par la même occasion protéger ces données afin d'éviter qu'un tricheur les modifie, en leur donnant une structure bien à toi tu rends leur modification plus difficile.

    Pour ce qui est de sauvegarder une chaîne de caractère sur un fichier binaire... Tu ne verras JAMAIS des 0 et des 1 ça n'a aucun intérêt ! Si tu as un fichier binaire, certaines applications refuseront d'ouvrir le fichier en format texte, mais si tu ouvres ton fichier en format texte tu verras les lettres que tu as inscrit et peut-être des caractères tout pourri... Tout dépend de ce que tu fais avec le fichier.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 75
    Par défaut
    il n'y a aucun rapport entre le nom d'un fichier et le contenu. Les extentions sont là uniquement pour que l'OS puisse reconnaitre un fichier pour que lorsque tu double clic dessus windows (par ex) lance le bon programme associé, c'est tout.
    Cela veut il dire que si j'essaye d'écrire une chaine de caractère dans un fichier .bmp cela marchera ?

    Même si ton extention n'est pas txt, cela ne veut en aucun dire que ton fichier ne sera pas un fichier texte, tout dépend de la façon dont tu va écrire les données dans ton fichier et ici en l'occurrence, c'est dans un format très basique donc pas de soucis !
    Pour faire court, un format perso n'est pas tant l'extension de ton fichier mais plutôt dans la manière d'écrire tes données dans ton fichier. Ici c'est un simple fichier texte avec une autre extension donc pas de réelle utilité mais cela n'empêche en rien
    D'accord.

    Première chose : c'est "posséder"...
    Merci

    tu te compliques BEAUCOUP TROP la vie...
    Je n'ai rien fait encore, je cherchait juste a savoir comment cela se déroule et quel était la réelle utilité des format perso.

    Un fichier tu l'ouvres en binaire ou en texte c'est pratiquement la même chose, la différence c'est surtout que le contenu d'un fichier texte c'est exclusivement du texte, alors qu'en binaire bah il y a des données chiffrées et des données textes éventuellement.
    D'accord. Mais j'aimerais savoir si on dois réellement passer par le mode binaire pour se déplacer dans un fichier (d'après le site il est très déconseiller d'utiliser fseek en mode texte. Je cite : La fonction fseek peut se comporter bizarrement sur des fichiers ouverts en mode texte. En général, on l'utilise plutôt pour se déplacer dans des fichiers ouverts en mode binaire. )

    Si tu veux un format de fichier perso...
    Je crois que tu m'a mal compris, je ne cherche pas à avoir un format perso. Au contraire je me demandais quel était leur interet.

    Déjà je te déconseille de créer un nouveau format d'image ça ne te servira à rien, les formats d'images actuels sont largement suffisant.
    Jamais je n'aurais l'idée de coder mon propre format d'image. Quel en serais mon utilité ?

    En revanche, tu peux créer un format de fichiers pour par exemple contenir l'historique des parties d'un jeu vidéo, les meilleurs scores des joueurs, ou mieux les sauvegardes. Ces types de fichiers sont spécifiques à chaque jeu vidéo puisque peu de jeux vidéos partagent les mêmes informations de sauvegarde.
    C'était de ce type de format de fichier que je m'interessait.

    Bien sûr tu n'es pas obligé d'utiliser un format à toi pour sauvegarder les données, tu peux les sauvegarder en texte en utilisant des balises pour repérer les données. Mais le fait d'avoir ton propre format de fichier te permet d'organiser les données de façon plus précises, de leur donner une structure spécifique pour accélérer leur lecture.
    De quel façon peut on organiser nos données ? C'est ça que je ne comprend pas.
    Pour moi la seul façon c'est juste le placement des informations dans un fichier texte (ou a la rigueur un cryptage/décryptage de ce fichier texte) mais ça revien au même que d'utiliser des balises pour repèrer les données

    Tu ne verras JAMAIS des 0 et des 1 ça n'a aucun intérêt !
    Je suis bien d'accord Je voulais juste savoir.

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lapos
    Cela veut il dire que si j'essaye d'écrire une chaine de caractère dans un fichier .bmp cela marchera ?
    Je ne sais pas trop ce que tu veux dire, mais écrire un fichier texte et le nommer *.bmp est techniquement possible. Par contre, ça risque de tromper le système qui est censé faire confiance aux extensions pour associer un exécutable... Evitons donc de faire n'importe quoi...
    D'accord. Mais j'aimerais savoir si on dois réellement passer par le mode binaire pour se déplacer dans un fichier (d'après le site il est très déconseiller d'utiliser fseek en mode texte. Je cite : La fonction fseek peut se comporter bizarrement sur des fichiers ouverts en mode texte. En général, on l'utilise plutôt pour se déplacer dans des fichiers ouverts en mode binaire. )
    C'est exact. Le problème des fichiers texte, c'est que le la taille du délimiteur de lignes (EOL) dépend du système.

    http://emmanuel-delahaye.developpez....s.htm#fichiers
    De quel façon peut on organiser nos données ?
    Il y a différentes façons de procéder. La plus simple est le mode texte, de type CSV (Valeurs séparées par un[e] [point-]virgule). Par exemple :

    1 enregistrement par ligne
    Chaque enregistrement est constitué d'une liste de champs séparés par ';' (point-virgule). Les champs 'chaines' sont entourés de " (guillemets).

    Par exemple :

    Carnet d'adresse :

    Liste des champs :

    Prénom
    Nom
    Adresse
    Code postal
    Ville
    Téléphone
    Email

    Ca donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Emmanuel";"Delahaye";"123 rue de la Lune";"75002";"Paris";"0123456789";"emmanuel.delahaye@provider.com"
    etc.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 75
    Par défaut
    Je ne sais pas trop ce que tu veux dire, mais écrire un fichier texte et le nommer *.bmp est techniquement possible. Par contre, ça risque de tromper le système qui est censé faire confiance aux extensions pour associer un exécutable... Evitons donc de faire n'importe quoi...
    Oui bien sur, je ne comptait pas le faire Je voulais juste savoir si windows(ou autres OS) ne "reservait" pas certains formats de fichier pour une raison ou une autre.

    C'est exact. Le problème des fichiers texte, c'est que le la taille du délimiteur de lignes (EOL) dépend du système.
    Ok. J'ai donc une autre question, peut on écrire/lire dans un fichier ouvert en mode binaire avec les fonction fprintf/fscanf etc ?

    Ou doit on obligatoirement utiliser fwrite par exemple ?

    Il y a différentes façons de procéder. La plus simple est le mode texte, de type CSV (Valeurs séparées par un[e] [point-]virgule). Par exemple :
    Pas très bien compris

    1 enregistrement par ligne
    Chaque enregistrement est constitué d'une liste de champs séparés par ';' (point-virgule). Les champs 'chaines' sont entourés de " (guillemets).
    Je vois, et ceci est différent de la méthode a balise que citait PsychoH13 ?

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    309
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 309
    Par défaut
    La méthode à balises peut prendre par exemple la forme d'un fichier XML :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <contact>
    <nom>Lafargière</nom>
    <prenom>Sam</prenom>
    <adresse>quelque part</adresse>
    </contact>
    Ou alors de façon plus simple, un format avec le nom de l'attribut et sa valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    contact:
    nom:Lafargière
    prenom:Sam
    adresse:quelque part
    Tu peux tout imaginer comme format de fichier, le tout c'est que toi tu t'y retrouves et que tu sois capable d'écrire et récupérer les données de façon systématique.

    Sinon le "si tu veux créer un format perso" c'est une figure de style... o_O.

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par lapos
    Oui bien sur, je ne comptait pas le faire Je voulais juste savoir si windows(ou autres OS) ne "reservait" pas certains formats de fichier pour une raison ou une autre.
    Sous Windows, on évite .com, .exe et .bat, c'est confusant (et réservé à un usage bien précis)...

    Ok. J'ai donc une autre question, peut on écrire/lire dans un fichier ouvert en mode binaire avec les fonction fprintf/fscanf etc ?
    Oui, mais les \n ne seront pas interprétés. Le mode binaire est 'raw' (brut). Tu as lu mon article ?
    Ou doit on obligatoirement utiliser fwrite par exemple ?
    C'est pas obligatoire, mais c'est plus logique... Le mode d'ouverture et les fonctions dépendent de la nature des données à traiter :

    texte :

    "r", "w", "a"
    fgetc(), fgets(), fscanf(), fputc(), fputs(), fprintf()

    binaire :

    "rb", "wb", "ab"
    fgetc(), fread(), fwrite()

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    ...
    D'accord. Mais j'aimerais savoir si on dois réellement passer par le mode binaire pour se déplacer dans un fichier (d'après le site il est très déconseiller d'utiliser fseek en mode texte. Je cite : La fonction fseek peut se comporter bizarrement sur des fichiers ouverts en mode texte. En général, on l'utilise plutôt pour se déplacer dans des fichiers ouverts en mode binaire. )
    C'est exact. Le problème des fichiers texte, c'est que le la taille du délimiteur de lignes (EOL) dépend du système.
    ...
    Lorsqu'on ouvre un fichier en "r" par exemple, qu'il soit texte ou non, fseek est utilisé avec un offset, qui n'est pas équivalent à un char. Donc une recherche dans un fichier texte ou non utilisant fseek ne demandera jamais un char. Et par conséquent la position sera de toute manière à ajuster...

    La seule utilisation de fseek sans ajuster est justement lorsque le fichier est en mode binaire, ET lorsqu'on connait l'offset de la variable ou du "pattern" recherché.

    Mais je ne vois pas en quoi il serait à déconseiller d'utiliser fseek pour trouver rapidement une position dans un fichier texte (par exemple par recherche dychotomique). Je l'utilise très régulièrement dans ce cadre pour chercher une ligne dans un très gros fichier.. Sur un fichier de plusieurs millions de lignes c'et nettement plus avantageux que de compter le nombre de lignes....

    En conclusion, je séparerais donc l'utilisation de petis et de gros fichiers, mais je ne séparerais pas bnaire et texte, et assurément je ne déconseillerais pas fseek pour un fichier texte. Cele n'a rien à voir...

    Exemple : soit un fichier texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ...
    2007/08/12/11:35  message1 auteur1 ...
    2007/08/12/11:37  message2 auteur2 ...
    ...

    Admettons que ce fichier stocke pour 1 mois, ou 1an...

    Il sera très simple de donner un offset quelconque (par exemple lors d'une recherche dychotomique taille_fichier/2), faire un appel à fseek, puis de reculer par fseek (-1) (enfin -2) (ou d'avancer par getc) à partir de cette position jusqu'à trouver '\n' ou "2007" par exemple...

    Pour en savoir plus lire les cours de C et la FAQ C.

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par souviron34
    Il sera très simple de donner un offset quelconque (par exemple lors d'une recherche dychotomique taille_fichier/2), faire un appel à fseek, puis de reculer par fseek (-1) (enfin -2) (ou d'avancer par getc) à partir de cette position jusqu'à trouver '\n' ou "2007" par exemple...
    La recherche dichotomique ignorant la structure en ligne, tu risques de tomber sur "007\n" ou "07\n" etc. et en conclure que le ligne n'existe pas. La bonne méthode est d'indexer, de trier, puis de faire une recherche dichotomique dans l'index...

    Evidemment, ce n'est rentable que sur un fichier stable et pour un grand nombre de recherche, car l'indexation a un cout certain.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FLASH MX2004] Format de fichier inattendu
    Par k2r.fr dans le forum Flash
    Réponses: 1
    Dernier message: 05/07/2005, 11h43
  2. [C / C++][Format de fichier] Le TIFF G4
    Par chronos dans le forum Windows
    Réponses: 1
    Dernier message: 17/06/2005, 15h57
  3. Format de fichier extensible
    Par Rodrigue dans le forum C++Builder
    Réponses: 9
    Dernier message: 11/06/2005, 14h45
  4. [Format de Fichier] Recherche de site
    Par Pedro dans le forum Windows XP
    Réponses: 5
    Dernier message: 12/04/2005, 16h11
  5. Quel format de fichier utiliser pour les maps ?
    Par fb57 dans le forum OpenGL
    Réponses: 3
    Dernier message: 23/09/2004, 20h22

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