Esempio n. 1
0
        /// <summary>
        /// Encode un segment.
        /// </summary>
        /// <param name="segment">Segment à encoder.</param>
        /// <param name="encChars">Caractères d'encodage utilisés.</param>
        /// <returns></returns>
        public static string Encode(ISegment segment, EncodingCharacters encChars)
        {
            StringBuilder retSegment = new StringBuilder();

            // Code du segment et premier séparateur de champ
            retSegment.Append(segment.SegmentName);
            retSegment.Append(encChars.FieldSeparator);

            // Si segment MSH : position de départ sur MSH-2 car MSH-1 correspond au séparateur de champ
            int startPos = InteropUtil.IsSegmentDefDelimiters(segment.SegmentName) ? 2 : 1;

            // Parcours des champs
            for (int i = startPos; i <= segment.Fields.Count; i++)
            {
                try
                {
                    // Parcours des répétitions
                    IType[] repetitions = segment.GetField(i);

                    for (int j = 0; j < repetitions.Length; j++)
                    {
                        string repValue = PipeParser.Encode(repetitions[j], encChars);

                        // Si MSH-2 : il faut annuler l'échappement des caractères réservés
                        if (InteropUtil.IsSegmentDefDelimiters(segment.SegmentName) && i == 2)
                        {
                            repValue = EscapeCharacterUtil.Unescape(repValue, encChars);
                        }

                        retSegment.Append(repValue);

                        if (j < repetitions.Length - 1)
                        {
                            retSegment.Append(encChars.RepetitionSeparator);
                        }
                    }
                }
                catch
                {
                    throw;
                }

                retSegment.Append(encChars.FieldSeparator);
            }

            return(InteropUtil.RemoveExtraDelimiters(retSegment.ToString(), encChars.FieldSeparator));
        }
Esempio n. 2
0
 /// <summary>
 /// Encode un type de données primitif.
 /// </summary>
 /// <param name="primitive">Type de données à encoder.</param>
 /// <param name="encChars">Caractères d'encodage utilisés.</param>
 /// <returns></returns>
 public static string Encode(ITypePrimitive primitive, EncodingCharacters encChars)
 {
     return(EscapeCharacterUtil.Escape(primitive.Value, encChars));
 }