/// <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)); }
/// <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)); }