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++Builder Discussion :

traduction d'un fichier en ascii puis recreation du fichier ascii


Sujet :

C++Builder

  1. #1
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 977
    Points
    1 977
    Par défaut traduction d'un fichier en ascii puis recreation du fichier ascii
    bonjour,

    Question 1 :
    Je dispose d'un fichier texte qui contient l'image du contenu d'une mémoire d'une carte lectronique. J'a donc à la suite toute une série de caractères de valeur absolue comprise entre 0 et 256.
    Je sais à quoi correspond chaque caractères et comment remettre en ordre toutes ces données.

    Ma question : Comment manipuler ces octets dans le fichier texte pour construire un autre fichier texte lisibles en bon francais ; Comment récupérer le 45 et le 46emes octets pour en faire un entier par exemple.


    Question 2 :
    Comment faire le travaille inverse de ce que je décris dans la question 1 ? Comment manipuler les données lisibles en bon francais pour reconstruire le fichier image du contenu mémoire ?
    Par exemple :
    J'ai AdresseDebut,23 puis nom4,toto,546789045 dans le fichier "lisible"
    je souhaite enregistrer à partir du 23eme caractère du fichiers compilé : "toto546789045" en ascii

    Merci par avance pour vos orientations
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  2. #2
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut
    C'est assez difficile de répondre à ta question car on n'a pas d'information sur ton fichier exactement. Il est difficile de te dire comment faire pour récupérer les infos si on ne sait pas de quel type de fichier il s'agit, comment sont codés les informations de ton fichier, est-ce qu'un octet correspond à un hexadécimal ? Est-ce qu'un octet est un code ascii ? Donne nous plus d'information sur ton fichier et ce qu'il contient.

    Sinon à priori, il suffit d'ouvrir le fichier, lire n oct correspondant à une lettre, le transcrire en français et passer à l'octet suivant.

    Donne nous plus d'informations concernant ton fichier à décoder.

    Bon courage.

  3. #3
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 977
    Points
    1 977
    Par défaut
    Bonjour , merci pour la réponse

    Les fichiers sont des fichiers text ou tout autre extension qui contient à la suite et en vrac des octets, image de ceux contenus dans une mémoire d'une carte electronique.
    Je ne sais pas trop comment mieux les décrire... chaque caractère, chaque octet de ce fichier va etre compris en 0 et 255 mais ce sera pas forcement de l'ascii ou de l'hexa, cela va dépendre de l'octet.

    Le premier octet va etre les poids fort d'un entier 16 bit qui indique la position de la première "dataquivabien", le second octet va être les poids faibles de la même info, le troisieme octet va être la première lettre du nom de la "dataquivabien" ......... le dixieme octet va être la valeur (entre 0 et 255) de la "dataquivabien".

    effectivement il me faut ouvrir le fichier puis lire le premier octet le traiter et ainsi de suite pour chaque octet, mais c'est ca que je ne sais pas faire...

    En gros je cherche à savoir comment extraire ces octets du fichier pour les manipuler facilement comme le Nieme octet du fichier, comme on le fait pour un tableau en appelant "Tableau[1]"

    Transférer le fichier dans un tableau peut etre ????

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  4. #4
    Membre éclairé Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Points : 735
    Points
    735
    Par défaut
    bon juste une idée:
    si tu sépare tes valeurs dans le fichier texte par un séparateur exemple ";"
    valeur0;valeur1;......;valeursn
    ensuite tu commence a analyser ton texte caractere par caractere lorque tu tombe sur un séparateur ";" tu prend la valeur et tu l'empile dans un vecteur c'est dynamique et tu peux appeller en suite n'importe quelle valeurs

  5. #5
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Ce dont tu as besoin, me semble-t-il, c'est de lire ton fichier en mode binaire plutôt qu'en mode texte de façon à remplir une zone de mémoire dans laquelle tu feras ce que tu as à faire.

    Il existe pour cela les fonctions classiques du C comme fopen() , fread() ou fget() (ne pas oublier #include <stdio.h>) et plein d'autres techniques aussi.

    Quant à ton explication
    chaque octet de ce fichier va etre compris en 0 et 255 mais ce sera pas forcement de l'ascii ou de l'hexa, cela va dépendre de l'octet
    il faut noter que toute valeur comprise entre 0 et 255 peut aussi bien être "ASCII" étendu et encore plus HEXA, tout dépend quelle langue on parle (décimal, binaire, hexadécimal...). Attention aux raccourcis ! L'hexadécimal, en l'occurence, n'est qu'une représentation d'une valeur toujours codée en binaire dans la machine.
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  6. #6
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 977
    Points
    1 977
    Par défaut
    merci pour cette réponse, c'est effectivement passer tout ca en mémoire en binaire pour traiter chaque ocet comme bon me semble quil me faut !

    j'ai bien compris que tout est une histoire de langue, si je savais pas comment decrire le contenu du fichier c'est bien parce que pour moi ce ne sont que des octets ! binaire ascii ou je ne sais quoi m'en fiche, tous dans le fichie ne sont pas à lire dans la même langue !

    Il n'hexiste pas des outils plus performants que ceux du C avec C++ ? (je ne dis pas que cex du C sont pas bien, c'est juste que j'ai déjà vu passer des trucs allucinants avec C++ builder...)

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  7. #7
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Citation Envoyé par petitours
    binaire ascii ou je ne sais quoi m'en fiche, tous dans le fichie ne sont pas à lire dans la même langue !
    Si c'est ta manière d'appréhender la programmation, change de langage ; le C(++) implique que tu ne te "fiches" pas de tout ça.

    Citation Envoyé par petitours
    Il n'hexiste pas des outils plus performants que ceux du C avec C++ ? (je ne dis pas que cex du C sont pas bien, c'est juste que j'ai déjà vu passer des trucs allucinants avec C++ builder...)
    Ce n'est effectivement pas ce qui manque. Faut chercher un peu, lire la FAQ de ce site, la doc, l'aide et quelques bouquins...
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  8. #8
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 977
    Points
    1 977
    Par défaut
    Euh j'ai du mal me faire comprendre

    Je m'en fiche pas au sens que ca m'interesse pas ! Je m'en fiche au sens que comme tous ces octets (image du contenu de la mémoire) correspondent à des informations trés différentes d'un octet à l'autre ou d'une paire d'octet à une autre et que par conséquent il me semble necessaire de pouvoir manipuler chaque octet individuellement pour pouvoir les traiter independament ensuite, dans la langue qui lui correspond.
    Mais peut etre que je me trompe encore ici...c'est l'object de ma question de comprendre comment je dois m'y prendre.

    Etant donné que c'est plus la démarche (ou peut etre ma "manière d'apprehender la programmation") qui a un soucis et pas seulement un non de fonction, j'ai bien du mal à trouver l'aide dont j'ai besoin dans l'aide ou des bouquins J'ai besoin d'etre aiguillé pour devenir un peu moins débutant...

    Merci
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2002
    Messages
    343
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 343
    Points : 152
    Points
    152
    Par défaut
    Déjà, j'espère pour toi que tu connais un minimum la syntaxe du C++, sinon ce n'est pas la mort, mais tu vas perdre un peu de temps sur "comprendre" les mécanismes du C++ et de Builder, ce qui, je te rassure n'est pas impossible, surtout depuis qu'il y'a un forum pour

    Si j'ai bien compris tu ne maitrise peut-être pas Builder (remarque, moi non plus), mais tu dois connaître les fonctions sur les fichiers, à savoir, création de fichier, ouverture, fermeture, écriture et lecture.

    Ces fonctions commencent en général par le mot File-, comme FileCreate, FileOpen, FileWrite, FileRead. Dans l'aide tu trouveras des exemples. Donc dans un premier temps, essaie d'ouvrir ton fichier et affiche le dans un composant TMemo par exemple (Memo1->Line->Add(octetALire);).

    Une fois que t'arrives à maitriser ces outils, tu peux passer à la suite, c'est à dire lire les octets dont tu as besoin et les interpreter.

    Perso, si je ne veux pas me casser trop la tête et sans trop réflechir, j'aurais fait une fonction du genre : ReadText(), ReadPostion()... Ces fonctions vont lire un octets et l'interpreter. Par exemple, si tu sasis que tu dois lire du texte, tu appels ReadText() qui te retourne la valeur en ascii. Ces fonctions écrivent directement dans un TMemo histoire de ne pas trop de casser la tête pour valider si tu lis une bonne valeur.

    Enfin, je ne sais pas si je me suis fait comprendre, mais sinon, je te conseil de bien analyser ton fichier. C'est à dire, ecris (ne serait-ce pour toi) clairement les différents types d'informations que tu dois lire et comment analyser la valeur lue. Ecris une fonction pour lire chaque type d'information à lire si tu ne sais pas comment commençer.

    Bon courage.

  10. #10
    Membre éprouvé
    Avatar de bandit boy
    Profil pro
    Inscrit en
    Février 2006
    Messages
    916
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 916
    Points : 1 007
    Points
    1 007
    Par défaut
    Salut,

    Pour ton problème de lecture de fichier, tu dis qu'il est au format texte, mais sais-tu le décrypter visuellement ?

    Il existe une variable très simple à utiliser avec Builder pour les fichiers textes, c'est Le TStringList. Avec le code suivant, tu charges ton fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TStringList *Fichier = new TStringList;  //pour la déclaration
    Fichier->LoadFromFile("C:\\fichier_texte");
    Tu retrouves ton fichier dans cette liste avec autant de ligne que ton fichier.
    Chaque ligne est une AnsiString et tu y accèdes de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AnsiString Ligne1 = Fichier->Strings[0];
    Cette chaîne est une suite d'octet, ceux que tu vois dans ton fichier. Si tu veux les voir sous forme d'entier, il faut l'affichier de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Label1->Caption = IntToStr((int)Ligne1[1]); //affiche le premier octet de Ligne1
    J'espère t'avoir convaincu que le C reste très facile pour faire énormément de chose et avoir réussi à comprendre et t'expliquer ce que tu voulais faire.

  11. #11
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 977
    Points
    1 977
    Par défaut
    super merci !

    J'ai regardé un peu toutes ces fonctions, c'est bien ca que je cherche, je commence à cerner comment on peut faire.

    Je n'ai pas besoin d'etre convaincu ! J'utilise le C sur microcontroleurs avec grand bonheur et je connais un peu d'autres languages et, en référence au VB , je sais à quel point le C est un bon language...

    TstringList a l'air d'etre exactement ce que je cherche !!! Mon fichier contient une liste non structurée d'octets. Vais je avoir que une seule ligne au final ? Ou vais je avoir autant de lignes que je vais trouver de caractères retour chariot dans le fichier ? (sachant que ce caractère retour chariot serait là par pur hasard, il peut etre l'octet de poids faible de la température du biberon et avoir la valeur binaire du retour chariot par hasard...)

    Merci !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

  12. #12
    Membre averti
    Avatar de Altau
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    296
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 296
    Points : 360
    Points
    360
    Par défaut
    Dès lors que ta suite d'octets peut comporter n'importe quelle valeur - et pas forcément des caractères imprimables (c'est le terme consacré) - je ne crois pas que des fonctions sur les chaînes de caractères soient appropriées.

    Tu peux peut être, en revanche, regarder du côté des fonctions sur les flux (TStream) destinées à manipuler des suites d'octets en mémoire. Cela dit, les bonnes vieilles fonctions du C comme fgetc() feraient parfaitement l'affaire selon moi.
    RAD Studio 10.3 / Ubuntu 20.04 - RYZEN 7 2700X - 24Go de RAM

  13. #13
    Membre chevronné Avatar de petitours
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Février 2003
    Messages
    1 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 931
    Points : 1 977
    Points
    1 977
    Par défaut
    Merci beaucoup, j'arrive à me dépatouiller avec Tstream et je cerne suffisament le problème pour réussir à trouver dans l'aide ce qui manque

    Merci beaucoup !
    Il y a 10 sortes de personnes dans le monde : ceux qui comprennent le binaire et les autres

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 29/09/2008, 08h10
  2. VBScript : Créer puis ouvrir un fichier csv
    Par Stephbzh dans le forum VBScript
    Réponses: 1
    Dernier message: 04/06/2008, 09h36
  3. Créer puis afficher un fichier Excel à partir d'Access
    Par SamLeChiseuji dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/07/2007, 08h44
  4. Réponses: 2
    Dernier message: 20/11/2006, 18h37
  5. Export ASCII par batchmove avec fichier SCH
    Par NONO77 dans le forum Bases de données
    Réponses: 1
    Dernier message: 10/02/2005, 10h24

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