internal Interchange(EdiTools.EdiFile parent, EdiTools.Index isa, EdiTools.Index iea) { string[] elements = isa.Split(); _isa.ISA01 = elements[1]; _isa.ISA02 = elements[2]; _isa.ISA03 = elements[3]; _isa.ISA04 = elements[4]; _isa.ISA05 = elements[5]; _isa.ISA06 = elements[6]; _isa.ISA07 = elements[7]; _isa.ISA08 = elements[8]; _isa.ISA09 = elements[9]; _isa.ISA10 = elements[10]; _isa.ISA11 = elements[11]; _isa.ISA12 = elements[12]; _isa.ISA13 = elements[13]; _isa.ISA14 = elements[14]; _isa.ISA15 = elements[15]; _isa.ISA16 = elements[16]; _isa.Index = isa; elements = iea.Split(); _iea.IEA01 = elements[1]; _iea.IEA02 = elements[2]; _iea.Index = iea; }
internal FunctionalGroup(EdiTools.EdiFile parent, EdiTools.Index gs, EdiTools.Index ge) { _parent = parent; // gs string[] elements = gs.Split(); _gs.GS01 = elements[1]; _gs.GS02 = elements[2]; _gs.GS03 = elements[3]; _gs.GS04 = elements[4]; _gs.GS05 = elements[5]; _gs.GS06 = elements[6]; _gs.GS07 = elements[7]; _gs.GS08 = elements[8]; _gs.Index = gs; // ge elements = ge.Split(); _ge.GE01 = elements[1]; _ge.GE02 = elements[2]; _ge.Index = ge; // st/se indexes are for getting the start and end of each transaction set in the group System.Collections.Generic.List <EdiTools.Index> _stIndexes = new System.Collections.Generic.List <Index>(); System.Collections.Generic.List <EdiTools.Index> _seIndexes = new System.Collections.Generic.List <Index>(); System.Collections.Generic.List <EdiTools.Index> segments = new System.Collections.Generic.List <Index>(); foreach (EdiTools.Index idx in _parent.GetIndexes()) { if (idx.Start <= _gs.Index.Start || idx.Start >= _ge.Index.Start) { continue; } segments.Add(idx); if (idx.Name == "ST") { _stIndexes.Add(idx); } if (idx.Name == "SE") { _seIndexes.Add(idx); _transactionSetIndexes.Add(segments.ToArray()); segments.Clear(); } } }
public TransactionSet(EdiTools.FunctionalGroup parent, EdiTools.Index[] indexes) { _parent = parent; _indexes = indexes; EdiTools.Index st = indexes[0]; EdiTools.Index se = indexes[indexes.Length - 1]; string[] elements = st.Split(); _st = new EdiTools.ST(); _st.ST01 = elements[1]; _st.ST02 = elements[2]; _st.Index = st; elements = se.Split(); _se = new EdiTools.SE(); _se.SE01 = elements[1]; _se.SE02 = elements[2]; _se.Index = se; }
internal Index[] GetIndexes() { System.Collections.Generic.List <EdiTools.Index> indexes = new System.Collections.Generic.List <EdiTools.Index>(); EdiTools.Index idx = new EdiTools.Index(this); System.Text.StringBuilder sb = new System.Text.StringBuilder(); bool doRead = true; for (int i = 0; i < _rawtext.Length; i++) { char c = _rawtext[i]; if (doRead && c != _delimiter.Element && c != (char)10 && c != (char)13) // 10:new line, 13:carriage return { sb.Append(c); } if (c == _delimiter.Element) { doRead = false; } if (c == _delimiter.Segment) { doRead = true; idx.Length = i - idx.Start; idx.Name = sb.ToString(); indexes.Add(idx); // reset for next loop sb.Clear(); idx = new EdiTools.Index(this); idx.Start = i + 1 + _delimiter.Line.Length; /* The + 1 is to move the index past the segment delimiter position */ } } return(indexes.ToArray()); }
public EdiFile(string filePath) { try { this._rawtext = System.IO.File.ReadAllText(filePath); if (this._rawtext.Substring(0, 3) != "ISA") { throw new System.IO.InvalidDataException("No ISA segment found. Not an EDI file."); } _delimiter.Element = _rawtext[103]; _delimiter.Component = _rawtext[104]; _delimiter.Segment = _rawtext[105]; /* Determine if wrapped (no line breaks) or unwrapped (line breaks) */ if (_rawtext[106] == (char)13 || _rawtext[106] == (char)10) /* carriage-return or new-line */ { _isunwrapped = true; if (_rawtext[107] == (char)10) /* if the next char is new-line, assume cr/lf */ { _delimiter.Line = _rawtext.Substring(106, 2); } else { _delimiter.Line = _rawtext[106].ToString(); } } _filename = System.IO.Path.GetFileName(filePath); _directoryname = System.IO.Path.GetDirectoryName(filePath); // start position and length for every segment/line in the file. The foundation for parsing the file _fileindexes = this.GetIndexes(); // to parse interchange EdiTools.Index isa = new EdiTools.Index(this); EdiTools.Index iea = new EdiTools.Index(this); // to parse functional groups System.Collections.Generic.List <EdiTools.FunctionalGroup> functionalGroups = new System.Collections.Generic.List <FunctionalGroup>(); EdiTools.Index gs = new EdiTools.Index(this); EdiTools.Index ge = new EdiTools.Index(this); foreach (EdiTools.Index idx in _fileindexes) { // interchange if (idx.Name == "ISA") { isa = idx; } if (idx.Name == "IEA") { iea = idx; _interchange = new EdiTools.Interchange(this, isa, iea); } // functional group if (idx.Name == "GS") { gs = idx; } // GE is the end of a functional group, so add to the functional group collection if (idx.Name == "GE") { ge = idx; EdiTools.FunctionalGroup group = new EdiTools.FunctionalGroup(this, gs, ge); functionalGroups.Add(group); } } _functionalgroups = functionalGroups.ToArray(); } catch (System.Exception) { throw; } }