2009-01-06 6 views
2

Je dois créer une structure ou une série de chaînes de longueur fixe pour un projet sur lequel je travaille. Actuellement, il est écrit en COBOL et est une application de communication. Il envoie un enregistrement de longueur fixe via le web et reçoit un enregistrement de longueur fixe. Je voudrais l'écrire comme une structure pour la simplicité, mais jusqu'à présent, la meilleure chose que j'ai trouvée est une méthode qui utilise string.padright pour mettre la terminaison de la chaîne au bon endroit.Chaînes de longueur fixe ou structures en C#

Je pourrais écrire une classe qui encapsule ceci et retournerait une chaîne de longueur fixe, mais j'espère trouver un moyen simple de remplir une structure et de l'utiliser comme un enregistrement de longueur fixe.

edit--

L'enregistrement de longueur fixe est utilisée comme paramètre dans une URL, de sorte que son http: \ somewebsite.com \ = enregistrement parsemé « ville adresse prenom zip lastname état ». Je suis sûr que je n'aurai pas à me soucier des conversions ASCII en unicode car c'est dans une URL. C'est un peu plus grand que cela et plus d'informations sont transmises que l'adresse, environ 30 ou 35 champs. Ajoutez le tag MarshalAs à votre structure.

Répondre

-2

En guise de réponse, vous devriez être en mesure d'utiliser des tableaux de char de la bonne taille, sans avoir à se marier.

De plus, la différence entre une classe et une structure dans .net est minime. Une structure ne peut pas être nulle tant qu'une classe le peut. Sinon, leur utilisation et leurs capacités sont à peu près identiques. Enfin, il semble que vous devriez être conscient de la taille des caractères qui sont envoyés. Je suppose (je sais, je sais) que COBOL utilise des caractères ASCII 8 bits, tandis que les chaînes .net vont utiliser un jeu de caractères codé en UTF-16. Cela signifie qu'une chaîne de 10 caractères dans COBOL est de 10 octets, mais dans .net, la même chaîne est de 20 octets. MarshalAs est utilisé pour interopérer avec PInvoke (code non géré)

+1

"La différence entre une classe et une structure dans .net est minime, une structure ne peut pas être nulle tant qu'une classe le peut, sinon leur utilisation et leurs capacités sont à peu près identiques." Désolé d'être négatif, mais c'est très faux. –

4

Voici un exemple:

<StructLayout (LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ 
Public Structure OSVERSIONINFO 
    Public dwOSVersionInfoSize As Integer 
    Public dwMajorVersion As Integer 
    Public dwMinorVersion As Integer 
    Public dwBuildNumber As Integer 
    Public dwPlatformId As Integer 

    <MarshalAs (UnmanagedType.ByValTStr, SizeConst:=128)> _ 
    Public szCSDVersion As String 
End Structure 

http://bytes.com/groups/net-vb/369711-defined-fixed-length-string-structure

+1

Comme il semble que le PO reste dans le code managé avant de faire la demande sur le web, il ne sera jamais rassemblé. –

0

Vous pouvez utiliser le VB6 compat FixedLengthString classe, mais il est assez trivial d'écrire votre propre.

Si vous avez besoin d'analyse et de validation et tout ce truc amusant, vous pouvez jeter un oeil à FileHelpers qui utilise des attributs à annotate and parse fixed length records. FWIW, sur quoi que ce soit de relativement trivial (traitement de données, par exemple) J'utiliserais probablement juste une méthode d'extension ToFixedLength() qui s'occupe du remplissage ou de la troncature au besoin lors de l'écriture des enregistrements. Pour quelque chose de plus compliqué (comme la validation ou l'analyse), je me tournerais vers FileHelpers.

Questions connexes