Пример #1
0
        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;
        }
Пример #2
0
        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();
                }
            }
        }
Пример #3
0
        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;
        }
Пример #4
0
        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());
        }
Пример #5
0
        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;
            }
        }