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

Dotnet Discussion :

Structure en C => Conversion C#


Sujet :

Dotnet

  1. #1
    Membre chevronné
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Par défaut Structure en C => Conversion C#
    Bonjour à vous :
    J'ai developpé il y a quelques années un bout de code en "C" qui à la lecture des lignes d'un fichier retranscrit chaque ligne sur la base de la stucture "B" ci-dessous. avec la position de chaque champs dans la ligne. (Le but de ce petit programme etant de verifier la position et les valeurs de chaque elements d'une interface)

    Je demarre maintenant au C# et je souhaite faire la meme chose .
    Mon problème se situe au niveau du chargement des données dans la structure .
    En "C" : La ligne de commande suivante remplie toute la structure "B"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fgets((char *)&B,BUFSIZE,fich);
    Mais en C# : les structures étant maintenant des "class" comportants différents objets , je ne sait pas s'il est possible d'affecter une chaine de caractère (une ligne du fichier) directement dans une structure (Au sens C)

    La structure en langage C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /* Description de la ligne
    struct
         {
         char  clef1[1];         /* 1ere Clef                 */
         char  clef2[8];         /* 2ème Clef                 */
         char  info1[10];        /* Information 1             */
         char  info2[12];        /* Information 2             */
         char  info3[8];         /* Information 3             */
         struct
              {                  /* Tableau de 10 Positions   */
              char  dpos[2];
              } SCH[10];
         char  Z_comun[150];     /* Zone Commune              */
         } B ;


    Exemple valant mieux que de grand discours :
    Le fichier (2 lignes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    11234567812345678901234567890121234567801 B02 C03 D04 E05 FZOne Commune                                                            
    AClef2   Info 1    Informatio 2Info 3   1 2 3 4 5 6 7 8 910Ceci est commun
    Le resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Pos=[   1]B.clef1=(1) 
    Pos=[   2]B.clef2=(12345678) 
    Pos=[  10]B.info1=(1234567890) 
    Pos=[  20]B.info2=(123456789012) 
    Pos=[  32]B.info3=(12345678) 
    Pos=[  40]B.SCH[i].dpos=(01) 
    Pos=[  42]B.SCH[i].dpos=( B) 
    Pos=[  44]B.SCH[i].dpos=(02) 
    Pos=[  46]B.SCH[i].dpos=( C) 
    Pos=[  48]B.SCH[i].dpos=(03) 
    Pos=[  50]B.SCH[i].dpos=( D) 
    Pos=[  52]B.SCH[i].dpos=(04) 
    Pos=[  54]B.SCH[i].dpos=( E) 
    Pos=[  56]B.SCH[i].dpos=(05) 
    Pos=[  58]B.SCH[i].dpos=( F) 
    Pos=[  60]B.Z_Commun=(ZOne Commune                                    ) 
    ==================================
     
    Pos=[   1]B.clef1=(A) 
    Pos=[   2]B.clef2=(Clef2   ) 
    Pos=[  10]B.info1=(Info 1    ) 
    Pos=[  20]B.info2=(Informatio 2) 
    Pos=[  32]B.info3=(Info 3  ) 
    Pos=[  40]B.SCH[i].dpos=( 1) 
    Pos=[  42]B.SCH[i].dpos=( 2) 
    Pos=[  44]B.SCH[i].dpos=( 3) 
    Pos=[  46]B.SCH[i].dpos=( 4) 
    Pos=[  48]B.SCH[i].dpos=( 5) 
    Pos=[  50]B.SCH[i].dpos=( 6) 
    Pos=[  52]B.SCH[i].dpos=( 7) 
    Pos=[  54]B.SCH[i].dpos=( 8) 
    Pos=[  56]B.SCH[i].dpos=( 9) 
    Pos=[  58]B.SCH[i].dpos=(10) 
    Pos=[  60]B.Z_Commun=(Ceci est commun                                 ) 
    ==================================
    La question est :
    est il possible en C# de découper une chaine de caractères en la copiant comm en "C" dans une structure . (Ou y a t'il d'autre methode le permettant)
    (La notion de contiguité des éléments d'une structure n'existe pas en C# ... il me semble....)


    Merci de votre aide
    @argoet

  2. #2
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    346
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 346
    Par défaut
    Bonjour,

    je ne pense pas que cela soit possible.
    Je pense que tu vas devoir réaliser ta propre méthode.

    Bye

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    95
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 95
    Par défaut
    Salut,

    Le framework te permet d'organiser tes données comme tu le souhaite grace à un attribut : [StructLayout(LayoutKind.Explicit)]

    Regarde ici tu as un exemple :

    http://msdn2.microsoft.com/en-us/lib...te(VS.80).aspx

    Ensuite avec un FieldOffset tu peux mapper un tableau d'octets qui commence à l'offset zero (un peu comme le union du c++) et qui a la même longueur que ta structure.

    Donc tu charge ton fichier dans ton tableau d'octets et automatiquement les valeurs de ta structure (ou classe ça marche aussi) seront initialisés.

    Je pense que cette méthode reste la plus proche de ton fonctionnement en C tout en restant du 100% managé.

    Celà dit, en Dotnet, je te conseille de vite oublier ces méthodes archaïques et de t'interresser à la sérialisation (automatique et évolutif).

    A+

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/07/2009, 15h29
  2. Réponses: 23
    Dernier message: 13/02/2009, 12h31
  3. Conversion d'une structure en char*
    Par coyotte507 dans le forum C++
    Réponses: 5
    Dernier message: 06/04/2008, 21h10
  4. Conversion d'une structure de données en char*
    Par lolita4882 dans le forum C
    Réponses: 4
    Dernier message: 04/01/2008, 17h04
  5. [xml]Conversion d'une structure xml en csv
    Par cchatel2000 dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 01/08/2005, 16h00

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