Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : String vers structure de char [ Archives / Au secours ] (nico_fip1)

mardi 14 février 2006 à 12:54:17 | String vers structure de char

nico_fip1

Bonjour,
Mon objectif est de gérer fichier texte formaté:
Ce fichier contient des enregistrements composé d'une suite de 60 caractères.
Mon but est de passer d'une chaine à une structure, dont bien sûr le format global est le même.

Exemple

struct MaStruct
{
      char info1 ;
      char info2 ;
      char info3 ;
      char info4 ;
}
_____________________
string MaChaine="azer" ;
MaStruct(=)MaChaine ;

En C++ 6, j'utilisait "memcpy" et ça marchait nickel....lol

Merci d'avance

Remarque :
Le format peut bouger, donc pas envie de passer par
MaStruct.info1=MaCaine.SubString(0,1) ;
.....
......



Nico
Strasbourg
France

mardi 14 février 2006 à 13:28:16 | Re : String vers structure de char

coq

Administrateur CodeS-SourceS
Salut,

Qu'est ce que tu entends au juste par "le format peut bouger" ?



/*
coq
MVP Visual C#
*/

mardi 14 février 2006 à 13:36:04 | Re : String vers structure de char

Lutinore

Administrateur CodeS-SourceS

Salut, utilise l'opérateur d'indexation [ ] sur ta chaine pour construire ta structure, non !?


mardi 14 février 2006 à 13:52:56 | Re : String vers structure de char

nico_fip1

En fait, chaque caractère représente une donnée. Pour la suite du traitement, il est beaucoup plus simple d'utiliser
MaStructure.Info1 que MaChaine.SubString(0,1)
Et si je change la signification d'une info, Il suffit de modifier le nom dans la définition de ma structure.
Concernant l'opérateur d'indexation, écrire 60 fois
MaStructure.Info1 = MaChaine.SubString(0,1) ;
MaStructure.Info2 = MaChaine.SubString(11) ;
MaStructure.Info3 = MaChaine.SubString(2,1) ;
..........


C'est un peu lourd, alors qu'il sufit de convertir une chaine de N caractères, en une structure composée de N caractères.

Ca pb va aussi se poser pour les champs de bits. Conversion d'un nombre en une suite de champs de bit.
En clair, l'idée est de "caster" un string, ou un tableau de char, en une structure qui contient les mêmes données ; ou caster un nombre "byte" en une structure de N bits.

Ce que je peux dire, c'est qu'en C simple, je n'avais aucun pb.... un memcpy(...) faisait l'affaire .... Donc j'espère qu'en C# c'est aussi faisable !!

Merci beaucoup

Nico
Strasbourg
France

mardi 14 février 2006 à 15:07:55 | Re : String vers structure de char

Lutinore

Administrateur CodeS-SourceS

Je pense qu'il n'ya pas d'équivalent en code managé.

(  tu peux aussi fixer ta chaine en mémoire pour travailler avec un pointeur sur ta chaine. )


// Attention au dépassement !!

string s = "ABCD";
MyStruct m = new MyStruct( );

unsafe
{
   
    char* p = ( char* )&m;
   
    for ( int i = 0; i < s.Length; i++ )
    {
        p[ i ] = s[ i ];
    }
}


mardi 14 février 2006 à 15:29:36 | Re : String vers structure de char

nico_fip1

Salut Lutinore...
Merci pour ta réponse qui me semble pas male.
Peux-tu juste me donner des explications, ou un lien, concernant "unsafe" ?
Etant un habitué du bon vieux ANSI C, ça me parait intéressant d'inclure ce type de bout de code...
Question dépassement, je sais faire gaffe. J'ai eu assez de "core dump" dans ma jeunesse 

Eh oui, à la base, je suis électronicien, donc le bas niveau, j'aime bien ça... lol

Merci encore et à +

P.S : Je n'irai quand même pas jusqu'à l'assembleur 


Nico
Strasbourg
France

mardi 14 février 2006 à 15:52:43 | Re : String vers structure de char

coq

Administrateur CodeS-SourceS
Donc si j'ai bien saisis, tu veux que si du jour au lendemain tu changes

struct MaStruct
{
      public char info1 ;
      public char info2 ;
      public char info3 ;
      public char info4 ;
}


en

struct MaStruct
{
      public char info1 ;
      public char info2 ;
      public char info3 ;
      public char info4 ;
      public char info5 ;
}


ce soit suffisant pour se mettre à gérer les chaînes de 5 caractères ?


/*
coq
MVP Visual C#
*/

mardi 14 février 2006 à 16:01:10 | Re : String vers structure de char

Lutinore

Administrateur CodeS-SourceS
Tu peux utiliser les pointeurs dans du code unsafe, suffit de déclarer la classe, la méthode ou juste un bloc unsafe et de compiler avec l'option unsafe ( Projet->Propriété ) ou -unsafe avec csc.exe. Comme la GC peut deplacer les objets en mémoire faut utiliser le mot clé fixed, sauf là vu que j'utilise un type valeur qui est sur la pile, de toute façon le compilo te previens.

[ Lien ]

Attention quand même avec les chaines  ( extrait MSDN ) :

"un caractère Unicode peut être représenté par plusieurs Char."

mardi 14 février 2006 à 18:04:46 | Re : String vers structure de char

nico_fip1

Coq :
Non pas vraiment...

Si Info1 devient Dupont1
...
C'est qu'une histoire de noms

Mais en fait, c'est surtout pour simplifier la copie.
Comme j'ai dit, un "memcpy" en "ANSI C" est très simple ; et on est très proche du matériel.

Pour moi, il  suffirait de "caster" : les données sont les mêmes. C'est juste un autre packaging.
C'est comme si tu passes d'un byte, à une structure de 8 bits.
c'est beaucoup plus simple à manipuler, et les infos sont exactement les mêmes.

Nico
Strasbourg
France

mardi 14 février 2006 à 19:42:45 | Re : String vers structure de char

coq

Administrateur CodeS-SourceS

J'avoue que j'ai du mal à saisir le truc là.
Pour moi l'autre type naturel d'une chaîne de caractères est un tableau de caractères, pas une structure de caractères.

Si tu veux éviter de multiplier les
MaStructure.Info1 = MaChaine.SubString(0,1) ;
MaStructure.Info2 = MaChaine.SubString(1,1) ;
MaStructure.Info3 = MaChaine.SubString(2,1) ;
..........

à chaque utilisation de ta structure dans le code, donne lui un constructeur :
struct MaStruct
{
    public MaStruct(string str)
    {
        this.info1 = str[0];
        this.info2 = str[1];
        this.info3 = str[2];
        this.info4 = str[3];
    }

    public char info1;
    public char info2;
    public char info3;
    public char info4;
}

D'ailleurs à ce sujet je vais me permettre d'insister sur le point indiqué par Lutinore, l'utilisation de l'indexeur de la structure string.
MaChaine.SubString(0,1) ; devient MaChaine[0] ;
et devient dont plus court que MaStructure.Info1

Et si tu veux travailler "directement" avec le tableau de caractères, utilise la méthode String.ToCharArray


/*
coq
MVP Visual C#
*/



1 2 3

Cette discussion est classé dans : fichier, string, passer, char, structure


Répondre à ce message

Sujets en rapport avec ce message

String et Char[], probleme de caracteres [ par Shouwi ] Hello, aprés moultes recherches et essais, je n'arrive pas a faire ce que je veux :\Je veux lire un fichier, style ASCII ART, donc avec des caracteres String manipulation -> char [ par abdoulax ] Je suis encore un newb en c# et je bloque sur un truc tout con. En fait je voudrai faire un truc similaire au C : string test = "yep"; test[1] = 'a'; convertir un string en color [ par godefrw ] Bonjour, j'aurais besoin de convertir un string (lu dans un fichier xml), en color (system.drawing.color). cela me permettrait de pouvoir définir la c Lecture fichier binaire et conversion hexa --> string [ par kineton ] Bonjour à tous, Je suis développeur en vc++ 6.0 et je commence juste à programmer en C# avec VS.Net.Je cherche à lire un fichier binaire qui contient nom de fichier [ par GaTaca ] bonjour a tous, voila je voudrais isoler le nom de fichier a partir d'une chaine contenant le chemin complet du fichierj'ai essayé string path;string[ int (ASCII) to char (ou string) [ par JuS ] Bonjour amis développeurs cshapriens,Je cherche à récupérer le caractère correspondant à un code ASCII.Comment faire ???//code ASCII du "A"int code = Conversion String en Char [ par CyKloNe ] Bonjour,Voila je démarre en C# et je dois faire une appli de formatage de fichier, qui lit des fichiers délimité en entrée. Je doit donc utiliser spli Convertire Char[] > String [ par welc ] Hello,J'ai un char[260] qui contient un chemin de répertoir. Donc pour le convertire je procéde ainsi :String monString;monString = System.Text.Encodi Début difficile en C# [ par PsyCaDi ] Bonjour,Je viens de passer du VB6 au C# et j'ai pas mal de problèmes!Surtout en ce qui concerne les conversions.Voilà, je voudrais faire:Conversion d' conversion de char* en C# [ par gwenn035 ] Bonjour à tous, je debute en C# et en Cpp (je suis plutot Java pour le moment) et j'ai fais une dll en vc++ qui contient une procedure qui a 4 paramèt


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,265 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.