/// <summary> /// Tries to parse what had been collected before a new message starts. /// </summary> /// <param name="segmentContext">The current segment.</param> /// <param name="tag">The start new message tag.</param> /// <returns>If flushed.</returns> internal bool Flush(SegmentContext segmentContext, SegmentTags tag) { if ((segmentContext.IsControl || segmentContext.Tag == tag) && CurrentMessage.Any()) { foreach (var c in segmentContext.Value) { Buffer.Enqueue(c); } Buffer.Enqueue(Separators.Segment); try { if (CurrentGroupHeader != null) { CurrentMessage.Add(CurrentGroupHeader); } Item = CurrentMessage.Analyze(Separators, BuildContext()); } finally { CurrentMessage.Clear(); } return(true); } return(false); }
internal override void ProcessSegment(string segment) { if (string.IsNullOrEmpty(segment) || Separators == null) { return; } var segmentContext = new SegmentContext(segment, Separators); if (Flush(segmentContext, SegmentId.UNH)) { return; } switch (segmentContext.Tag) { case SegmentId.UNA: break; case SegmentId.UNB: Item = segmentContext.Value.ParseSegment <S_UNB>(Separators); break; case SegmentId.UNG: Item = segmentContext.Value.ParseSegment <S_UNG>(Separators); break; case SegmentId.UNH: CurrentMessage.Add(segmentContext); break; case SegmentId.UNT: try { CurrentMessage.Add(segmentContext); Item = CurrentMessage.Analyze(Separators, BuildContext()); } finally { CurrentMessage.Clear(); } break; case SegmentId.UNE: Item = segmentContext.Value.ParseSegment <S_UNE>(Separators); break; case SegmentId.UNZ: Item = segmentContext.Value.ParseSegment <S_UNZ>(Separators); break; default: CurrentMessage.Add(segmentContext); break; } }
/// <summary> /// Parses a text string for bytes the user would like to add to the current message /// Bytes should be separated by spaces. /// If a byte starts with "0x", it will be parsed as a hexidecimal value. /// Otherwise, it will be parsed as a decimal value. /// </summary> public void AddBytesToMessage(string text) { if (!string.IsNullOrEmpty(text)) { var string_pieces = text.Split(new char[] { ' ' }).ToList(); if (string_pieces.Count > 0) { for (int i = 0; i < string_pieces.Count; i++) { var this_piece = string_pieces[i]; if (this_piece.StartsWith("0x", StringComparison.CurrentCultureIgnoreCase)) { //Parse as a hexidecimal value this_piece = this_piece.Substring(2); bool hex_parsed_successfully = Byte.TryParse(this_piece, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out byte hex_result); if (hex_parsed_successfully) { CurrentMessage.Add(hex_result); } } else { //Parse as a decimal value bool decimal_parsed_successfully = Byte.TryParse(this_piece, out byte decimal_result); if (decimal_parsed_successfully) { CurrentMessage.Add(decimal_result); } } } NotifyPropertyChanged("CurrentMessage"); } } }
internal override void ProcessSegment(string segment) { if (string.IsNullOrEmpty(segment) || Separators == null) { return; } var segmentContext = new SegmentContext(segment, Separators); if (Flush(segmentContext, SegmentId.ST)) { return; } switch (segmentContext.Tag) { case SegmentId.ISA: Item = segmentContext.Value.ParseSegment <S_ISA>(Separators); break; case SegmentId.TA1: Item = segmentContext.Value.ParseSegment <S_TA1>(Separators); break; case SegmentId.GS: Item = segmentContext.Value.ParseSegment <S_GS>(Separators); CurrentGroupHeader = segmentContext; break; case SegmentId.ST: CurrentMessage.Add(segmentContext); break; case SegmentId.SE: try { CurrentMessage.Add(segmentContext); Item = CurrentMessage.Analyze(Separators, BuildContext()); } finally { CurrentMessage.Clear(); } break; case SegmentId.GE: Item = segmentContext.Value.ParseSegment <S_GE>(Separators); break; case SegmentId.IEA: Item = segmentContext.Value.ParseSegment <S_IEA>(Separators); break; default: CurrentMessage.Add(segmentContext); break; } if (segmentContext.IsControl) { if (segmentContext.Tag != SegmentId.GS) { CurrentGroupHeader = null; } } }
private void lineAddButton_Click(object sender, EventArgs e) { CurrentMessage.Add(new Message()); lineNum.Items.Add((lineNum.Items.Count + 1) + ": "); lineNum.SelectedIndex = lineNum.Items.Count - 1; }