begin process at 2010 02 10 11:24:31
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Windows

 > 

Autre

 > 

Copier une String dans une Structure et vice versa


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Copier une String dans une Structure et vice versa

mardi 24 juillet 2007 à 15:07:44 | Copier une String dans une Structure et vice versa

skirby

Bonjour tout le monde,

J'aimerais savoir comment l'on fait pour copier une chaine de caractère dans une structure mais également faire l'opération inverse.
Je m'explique. J'utilise le code suivant en Visual Basic

Public Type T_ENTETE
    CodEnr As String * 2
    NumEnr As String * 6
    CdEmet As String * 3
End Type

Dim ms As T_ENTETE
Dim s As String
s = "00111111222"
CopyMemory ms, s, Len(s) ' Récupère la ligne dans la structure


Grace à la fonction CopyMemory de l'API Windows, je peux très facilement remplir ma structure avec le contenu de ma chaine.
L'opération n'est pas plus compliquée.

Mes questions sont les suivantes :
1-/ Comment faire pour avoir l'équivalent de ma structure VB en C# ?
2-/ Comment faire pour copier le contenu d'une chaine de caractère dans une structure ?
2-/ Comment faire pour recopier le contenu d'une structure dans une chaine de caractère ?

J'ai trouvé cet article très intéressant qui semble répondre au deux première questions :
http://www.codeproject.com/csharp/gil_structs.asp

Me je ne sais toujours pas répondre à la troisième.

Si vous avez ou connaissez d'autres méthodes, n'hésitez pas à m'en faire part.

Merci d'avance et bonne journée.
mardi 24 juillet 2007 à 15:46:36 | Re : Copier une String dans une Structure et vice versa

SharpMao

Membre Club
Hello,

Je vais essayer de répondre à tes questions :

1/ Crée une structure en C#

public struct T_ENTETE
{
private String_codEnr;
private String_numEnr;
private String_cdEmet;

public

StringCodEnr
{
get { return_codEnr; }
set
{
if (value.Length != 2)
   thrownewException(string.Format("CodEnr.Length must be 2.", VALUE_LENGTH, value.Length));
_codEnr = value;
}
}
...

2/ Avec une méthode comme par exemple :

private const int TOTAL_LENGTH = 11;
public void SetValue(stringvalue)
{
if (value.Length != TOTAL_LENGTH)
   throw new Exception(string.Format("Value.Length must be {0} and not {1}", TOTAL_LENGTH, value.Length));
_codEnr = value.Substring(0, 2);
_numEnr = value.Substring(2, 6);
_cdEmet = value.Substring(8, 3);
}
3/ Surcharge la méthode ToString de ta structure :

public

override string ToString()
{
return string.Format("{0}{1}{2}", _codEnr, _numEnr, _cdEmet);
}


Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
mardi 24 juillet 2007 à 16:04:16 | Re : Copier une String dans une Structure et vice versa

SharpMao

Membre Club
Encore une chose,

Pour le point deux, il est bien sûr possible de faire la même chose dans le constructeur de la structure.

Désolé aussi, il y a eu un petit problème de mise en page sur mon précédent post, et le début du point trois est sur la fin d'une ligne de code, pas très lisible tout ça.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
mardi 24 juillet 2007 à 16:11:42 | Re : Copier une String dans une Structure et vice versa

sebmafate

Membre Club Administrateur CodeS-SourceS
une remarque purement .net...

une structure est un type valeur et ne doit contenir QUE des types valeurs (int, double,...)
donc, string étant un type d'instance : tu dois utiliser class à la place de struct.




Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
mardi 24 juillet 2007 à 16:48:25 | Re : Copier une String dans une Structure et vice versa

skirby

Salut SharpMao,

Merci pour ta réponse mais ta méthode est moyennement intéressante car elle suppose de s'ennuyer à connaitre l'emplacement des différents champs.
L'intérêt du CopyMemory et que l'on a besoin de connaitre uniquement la taille de la structure.

D'ailleurs à ce sujet, j'ai trouvé un autre article intéressant qui me permet de répondre à mes question 1 et 2 avec une autre méthode (CopyMemory) que le premier article :
http://www.codeproject.com/vb/net/netcopymemorysample.asp

Si tu as une autre idée, je suis preneur.

Merci.
mercredi 25 juillet 2007 à 06:49:43 | Re : Copier une String dans une Structure et vice versa

Lutinore

Administrateur CodeS-SourceS
Salut, la raison pour laquelle ce n'est pas si simple c'est que les chaines en C# ne sont pas inlines mais des pointeurs sur le tas.. c'est pour ça que les exemples sur CodeProject bidouillent avec [MarshalAs(UnmanagedType.ByValTStr, SizeConst=4)].

L'un des equivalent de ta struct c'est ça :

[ StructLayout( LayoutKind.Sequential ) ]
public unsafe struct Id
{
    public fixed char id0[ 2 ];
    public fixed char id1[ 6 ];
    public fixed char id2[ 3 ];
}
mercredi 25 juillet 2007 à 08:27:52 | Re : Copier une String dans une Structure et vice versa

SharpMao

Membre Club
Hello,

Pour la question trois, par contre, je pense que la meilleure méthode est tout de même de surcharcger la méthode ToString.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
jeudi 26 juillet 2007 à 22:39:24 | Re : Copier une String dans une Structure et vice versa

skirby

Merci, je vais regarder du côté du code unsafe.

Sinon SharpMao, quel sorte de code mettrais-tu dans la fonction de surcharge de la méthode ToString ?


Cette discussion est classée dans : string, caractère, chaine, structure, copier


Répondre à ce message

Sujets en rapport avec ce message

Problème chaine de caractère [ par Globinours ] Voilà j'ai un petit problème je voudrais faire : string machaine; puis utiliser @machaine; Mais ça marche pas comme ça devrait marcher. Par exemple: Ecriture en mémoire d'une chaine de caractère [ par ScRunCHy ] Salut à tous,Dans mon code en C#, je récupère une string qui est écrite dans un fichier XML de config. Mon but est d'obtenir un char*.J'ai d'abord uti Byte to string avec des caractères de 2 octets [ par damien123456789 ] Bonjour,J'ai un pb lors d'une conversion d'un tableau de bytes en string.Le tableau de bytes représente une chaine de caractères dans un fichier prove Tester une chaine de caractère pour trouver une adresse IP [ par alexbesn ] Bonjour. Je récupère en Telnet la conf d'un routeur. Je cherche un moyen qui me permettrai de détecter dans la longue chaîne de caracatères que je re covertir string en float [ par baby85 ] bonsoir,je suis débutante en c# et je veux savoir comment peux-je convertir une chaine de caractére string en float avec cette chaine  est le résultat Algo pour RTF [ par bmouget ] Bonjour,Je voudrais réorganiser une chaine de caractère RTF en plusieurs tableaux de string.Je cherche donc un algo capable de structurer une chaine d Connection string [ par chinois0013 ] Bonjour,J'ai besoin de votre aide!!!!!!!!je souhaite créer une connection string pour me connecter à une BDD sous sqlserver express 2005 en local.j'ut Chercher un caractère dans une string, en partant de la droite ! [ par Nixeus ] Bonjour à tousJe possède une variable STRING contenant un chemin d'accès avec un nom de fichier.Je souhaiterai récupérer juste le nom de ce fichier ! délimiter mon string dans un tableau [ par bisoubebe ] bonjour j'ai crée une fonction qui doit recevoir une chaine sur cette forme "p98 p65 p963 p8475"et me retourner une structure ayantun élément par exam ReadLine sur caractère 'ø' [ par willgui ] Bonjour à tous, J'écris un programme qui lit les ligne d'un fichier texte... jusqu'à la rien de très compliqué !SAUF QUE ! arrivé un moment ma ligne c


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,874 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales