private void button1_Click(object sender, System.EventArgs e)
        {
            //This is just an example program to demonstrate how th translate a UN/EDIFACT INVOIC file in C#
            //using the Framework EDI .NET hybrid component

            ediDocument oEdiDoc = null;
            ediSchema oSchema = null;
            ediSchemas oSchemas = null;
            ediDataSegment oSegment = null;
            string sSegmentID = "";
            string sLoopSection = "";
            int nArea = 0;
            string sValue = "";

            string sPath = AppDomain.CurrentDomain.BaseDirectory;
            string sSefFile = "INVOIC_S93A.SEF";
            string sEdifile = "INVOIC.TXT";

            string sNadQlfr = "";

            Cursor = Cursors.WaitCursor;
 
            //CREATES EDIDOC OBJECT
            ediDocument.Set(ref oEdiDoc, new ediDocument());
 
            //THIS MAKES CERTAIN THAT FREDI ONLY USES THE SEF FILE PROVIDED, AND THAT IT DOES 
            //NOT USE ITS BUILT-IN STANDARD REFERENCE TABLE TO GENERATE THE EDI FILE.
            ediSchemas.Set(ref oSchemas,(ediSchemas) oEdiDoc.GetSchemas());
            oSchemas.EnableStandardReference = false;
 
            //THIS OPTIONS STOPS FREDI FROM KEEPING ALL THE SEGMENTS IN MEMORY
            oEdiDoc.CursorType = DocumentCursorTypeConstants.Cursor_ForwardOnly;
 
            //This terminators are used if the EDI file does not have a UNA segment
            //GET TERMINATORS
            oEdiDoc.SegmentTerminator = "'";
            oEdiDoc.ElementTerminator = "+";
            oEdiDoc.CompositeTerminator = ":";
            oEdiDoc.ReleaseIndicator = "?";
 
            //LOADS THE SEF FILE
            ediSchema.Set(ref oSchema, (ediSchema) oEdiDoc.LoadSchema(sSefFile, 0));
 
            //LOADS THE EDI FILE
            oEdiDoc.LoadEdi(sEdifile);
 
            //GETS THE FIRST DATA SEGMENT
            ediDataSegment.Set(ref oSegment, (ediDataSegment) oEdiDoc.FirstDataSegment);
 
            //LOOP THAT WILL TRAVERSE THRU EDI FILE FROM TOP TO BOTTOM
            while ( oSegment != null )
            {
                //DATA SEGMENTS ARE IDENTIFIED BY THEIR ID, THE LOOP SECTION AND AREA
                //(OR TABLE) NUMBER THAT THEY ARE IN.
                sSegmentID = oSegment.ID;
                sLoopSection = oSegment.LoopSection;
                nArea = oSegment.Area;
 
                if (nArea == 0)
                {
                    if (sLoopSection == "")
                    {
                        if (sSegmentID == "UNB")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Syntax identifier
                            sValue = oSegment.get_DataElementValue(1,2);     //Syntax version number
                            sValue = oSegment.get_DataElementValue(1,3);     //Service code list directory version number
                            sValue = oSegment.get_DataElementValue(1,4);     //Character encoding, coded
                            sValue = oSegment.get_DataElementValue(2,1);     //Interchange sender identification
                            sValue = oSegment.get_DataElementValue(2,2);     //Partner identification code qualifier
                            sValue = oSegment.get_DataElementValue(2,3);     //Interchange sender internal identification
                            sValue = oSegment.get_DataElementValue(2,4);     //Interchange sender internal sub-identification
                            sValue = oSegment.get_DataElementValue(3,1);     //Recipient identification
                            sValue = oSegment.get_DataElementValue(3,2);     //Partner identification code qualifier
                            sValue = oSegment.get_DataElementValue(3,3);     //Routing address
                            sValue = oSegment.get_DataElementValue(3,4);     //Interchange Recipient Internal Sub-Identification
                            sValue = oSegment.get_DataElementValue(4,1);     //Date
                            sValue = oSegment.get_DataElementValue(4,2);     //Time
                            listBox1.Items.Add(oSegment.get_DataElement(5).Description + " = " + oSegment.get_DataElementValue(5,0));     //Interchange control reference
                            sValue = oSegment.get_DataElementValue(6,1);     //Recipient reference/password
                            sValue = oSegment.get_DataElementValue(6,2);     //Recipient's reference/password qualifier
                            sValue = oSegment.get_DataElementValue(7,0);     //Application reference
                            sValue = oSegment.get_DataElementValue(8,0);     //Processing priority code
                            sValue = oSegment.get_DataElementValue(9,0);     //Acknowledgement request
                            sValue = oSegment.get_DataElementValue(10,0);     //Interchange Agreement Identifier
                            sValue = oSegment.get_DataElementValue(11,0);     //Test indicator
                        }   //sSegmentID
                    }   //sLoopSection
                }
                else if (nArea == 1)
                {
                    if (sLoopSection == "")
                    {
                        if (sSegmentID == "UNH")
                        {
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,0));     //Message reference number
                            sValue = oSegment.get_DataElementValue(2,1);     //Message type identifier
                            sValue = oSegment.get_DataElementValue(2,2);     //Message version number
                            sValue = oSegment.get_DataElementValue(2,3);     //Message release number
                            sValue = oSegment.get_DataElementValue(2,4);     //Controlling agency
                            sValue = oSegment.get_DataElementValue(2,5);     //Association assigned code
                        }
                        else if (sSegmentID == "BGM")
                        {
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,1));     //Document/message name, coded
                            sValue = oSegment.get_DataElementValue(1,2);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(1,3);     //Code list responsible agency, coded
                            sValue = oSegment.get_DataElementValue(1,4);     //Document/message name
                            sValue = oSegment.get_DataElementValue(2,0);     //Document/message name
                            sValue = oSegment.get_DataElementValue(3,0);     //Document/message name
                        }
                        else if (sSegmentID == "DTM")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Date/time/period qualifier
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,2));     //Date/time/period
                            sValue = oSegment.get_DataElementValue(1,3);     //Date/time/period format qualifier
                        }   //SegmentID
                    }
                    else if (sLoopSection == "RFF")
                    {
                        if (sSegmentID == "RFF")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Reference qualifier
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,2));     //Reference number
                            sValue = oSegment.get_DataElementValue(1,3);     //Line number
                        }   //SegmentID
                    }
                    else if (sLoopSection == "NAD")
                    {
                        if (sSegmentID == "NAD")
                        {
                            sNadQlfr = oSegment.get_DataElementValue(1,0);     //Party qualifier
                        }
                        if (sNadQlfr == "RE")    //receiver address information
                        {
                            if (sSegmentID == "NAD")
                            {
                                sValue = oSegment.get_DataElementValue(1,0);     //Party qualifier
                                sValue = oSegment.get_DataElementValue(2,1);     //Party identification
                                sValue = oSegment.get_DataElementValue(2,2);     //Code list qualifier
                                sValue = oSegment.get_DataElementValue(2,3);     //Code list responsible agency, coded
                                sValue = oSegment.get_DataElementValue(3,1);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,2);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,3);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,4);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,5);     //Name and address line
                                listBox1.Items.Add(oSegment.get_DataElement(4).Description + " receiver = " + oSegment.get_DataElementValue(4,1));     //Party name
                                sValue = oSegment.get_DataElementValue(4,2);     //Party name
                                sValue = oSegment.get_DataElementValue(4,3);     //Party name
                            }   //SegmentID
                        }
                        else if (sNadQlfr == "ST")    //ship-to address information
                        {
                            if (sSegmentID == "NAD")
                            {
                                sValue = oSegment.get_DataElementValue(1,0);     //Party qualifier
                                sValue = oSegment.get_DataElementValue(2,1);     //Party identification
                                sValue = oSegment.get_DataElementValue(2,2);     //Code list qualifier
                                sValue = oSegment.get_DataElementValue(2,3);     //Code list responsible agency, coded
                                sValue = oSegment.get_DataElementValue(3,1);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,2);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,3);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,4);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,5);     //Name and address line
                                listBox1.Items.Add(oSegment.get_DataElement(4).Description + " ship-to = " + oSegment.get_DataElementValue(4,1));     //Party name
                                sValue = oSegment.get_DataElementValue(4,2);     //Party name
                                sValue = oSegment.get_DataElementValue(4,3);     //Party name
                            }   //SegmentID
                        }
                        else if (sNadQlfr == "BY")    //buyer address information
                        {
                            if (sSegmentID == "NAD")
                            {
                                sValue = oSegment.get_DataElementValue(1,0);     //Party qualifier
                                sValue = oSegment.get_DataElementValue(2,1);     //Party identification
                                sValue = oSegment.get_DataElementValue(2,2);     //Code list qualifier
                                sValue = oSegment.get_DataElementValue(2,3);     //Code list responsible agency, coded
                                sValue = oSegment.get_DataElementValue(3,1);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,2);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,3);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,4);     //Name and address line
                                sValue = oSegment.get_DataElementValue(3,5);     //Name and address line
                                listBox1.Items.Add(oSegment.get_DataElement(4).Description + " buyer = " + oSegment.get_DataElementValue(4,1));     //Party name
                                sValue = oSegment.get_DataElementValue(4,2);     //Party name
                                sValue = oSegment.get_DataElementValue(4,3);     //Party name
                            }   //SegmentID
                        }

                    }
                    else if (sLoopSection == "NAD;RFF")
                    {
                        if (sNadQlfr == "RE")    //receiver reference information
                        {
                            if (sSegmentID == "RFF")
                            {
                                sValue = oSegment.get_DataElementValue(1,1);     //Reference qualifier
                                listBox1.Items.Add(oSegment.get_DataElement(1).Description + " receiver = " + oSegment.get_DataElementValue(1,2));     //Reference number
                                sValue = oSegment.get_DataElementValue(1,3);     //Line number
                            }   //SegmentID
                        }
                        else if (sNadQlfr == "ST") //ship-to reference information
                        {
                            if (sSegmentID == "RFF")
                            {
                                sValue = oSegment.get_DataElementValue(1,1);     //Reference qualifier
                                listBox1.Items.Add(oSegment.get_DataElement(1).Description + " ship-to = " + oSegment.get_DataElementValue(1,2));     //Reference number
                                sValue = oSegment.get_DataElementValue(1,3);     //Line number
                            }   //SegmentID
                        }
                        else if (sNadQlfr == "BY")    //buyer reference information
                        {
                            if (sSegmentID == "RFF")
                            {
                                sValue = oSegment.get_DataElementValue(1,1);     //Reference qualifier
                                listBox1.Items.Add(oSegment.get_DataElement(1).Description + " buyer = " + oSegment.get_DataElementValue(1,2));     //Reference number
                                sValue = oSegment.get_DataElementValue(1,3);     //Line number
                            }   //SegmentID
                        }
                    }
                    else if (sLoopSection == "NAD;CTA")
                    {
                        if (sNadQlfr == "RE")    //receiver contact information
                        {
                            if (sSegmentID == "CTA")
                            {
                                sValue = oSegment.get_DataElementValue(1,0);     //Contact function, coded
                                sValue = oSegment.get_DataElementValue(2,1);     //Department or employee identification
                                listBox1.Items.Add(oSegment.get_DataElement(2).Description + " receiver = " + oSegment.get_DataElementValue(2,2));     //Department or employee
                            }
                            else if (sSegmentID == "COM")
                            {
                                sValue = oSegment.get_DataElementValue(1,1);     //Communication number
                                sValue = oSegment.get_DataElementValue(1,2);     //Communication channel qualifier
                            }   //SegmentID
                        }
                        else if (sNadQlfr == "ST")    //ship-to contact information
                        {
                            if (sSegmentID == "CTA")
                            {
                                sValue = oSegment.get_DataElementValue(1,0);     //Contact function, coded
                                sValue = oSegment.get_DataElementValue(2,1);     //Department or employee identification
                                listBox1.Items.Add(oSegment.get_DataElement(2).Description + " ship-to = " + oSegment.get_DataElementValue(2,2));     //Department or employee
                            }
                            else if (sSegmentID == "COM")    
                            {
                                sValue = oSegment.get_DataElementValue(1,1);     //Communication number
                                sValue = oSegment.get_DataElementValue(1,2);     //Communication channel qualifier
                            }   //SegmentID
                        }
                        else if (sNadQlfr == "BY")    //buyer contact information
                        {
                            if (sSegmentID == "CTA")
                            {
                                sValue = oSegment.get_DataElementValue(1,0);     //Contact function, coded
                                sValue = oSegment.get_DataElementValue(2,1);     //Department or employee identification
                                listBox1.Items.Add(oSegment.get_DataElement(2).Description + " buyer = " + oSegment.get_DataElementValue(2,2));     //Department or employee
                            }
                            else if (sSegmentID == "COM")
                            {
                                sValue = oSegment.get_DataElementValue(1,1);     //Communication number
                                sValue = oSegment.get_DataElementValue(1,2);     //Communication channel qualifier
                            }   //SegmentID
                        }
                    }
                    else if (sLoopSection == "CUX")
                    {
                        if (sSegmentID == "CUX")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Currency details qualifier
                            sValue = oSegment.get_DataElementValue(1,2);     //Currency, coded
                            sValue = oSegment.get_DataElementValue(1,3);     //Currency qualifier
                            sValue = oSegment.get_DataElementValue(1,4);     //Currency rate base
                        }   //SegmentID
                    }
                    else if (sLoopSection == "ALC")
                    {
                        if (sSegmentID == "ALC")
                        {
                            sValue = oSegment.get_DataElementValue(1,0);     //Allowance or charge qualifier
                            sValue = oSegment.get_DataElementValue(2,1);     //Allowance or charge number
                            sValue = oSegment.get_DataElementValue(2,2);     //Charge/allowance description, coded
                            sValue = oSegment.get_DataElementValue(3,0);     //Settlement, coded
                            sValue = oSegment.get_DataElementValue(4,0);     //Calculation sequence indicator, coded
                            sValue = oSegment.get_DataElementValue(5,1);     //Special services, coded
                            sValue = oSegment.get_DataElementValue(5,2);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(5,3);     //Code list responsible agency, coded
                        }   //SegmentID
                    }
                    else if (sLoopSection == "ALC;PCD")
                    {
                        if (sSegmentID == "PCD")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Percentage qualifier
                            sValue = oSegment.get_DataElementValue(1,2);     //Percentage
                            sValue = oSegment.get_DataElementValue(1,3);     //Percentage basis, coded
                            sValue = oSegment.get_DataElementValue(1,4);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(1,5);     //Code list responsible agency, coded
                        }   //SegmentID
                    }
                    else if (sLoopSection == "ALC;MOA")
                    {
                        if (sSegmentID == "MOA")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Monetary amount type qualifier
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " allowance = " + oSegment.get_DataElementValue(1,2));     //Monetary amount
                            sValue = oSegment.get_DataElementValue(1,3);     //Currency, coded
                            sValue = oSegment.get_DataElementValue(1,4);     //Currency qualifier
                            sValue = oSegment.get_DataElementValue(1,5);     //Status, coded
                        }   //sSegmentID
                    }   //sLoopSection
                }
                else if (nArea == 2)
                {
                    if (sLoopSection == "LIN")
                    {
                        if (sSegmentID == "LIN")
                        {
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,0));     //Line item number
                            sValue = oSegment.get_DataElementValue(2,0);     //Action request/notification, coded
                            listBox1.Items.Add(oSegment.get_DataElement(3).Description + " = " + oSegment.get_DataElementValue(3,1));     //Item number
                            sValue = oSegment.get_DataElementValue(3,2);     //Item number type, coded
                            sValue = oSegment.get_DataElementValue(3,3);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(3,4);     //Code list responsible agency, coded
                        }
                        else if (sSegmentID == "QTY")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Quantity qualifier
                            sValue = oSegment.get_DataElementValue(1,2);     //Quantity
                            sValue = oSegment.get_DataElementValue(1,3);     //Measure unit qualifier
                        }   //SegmentID
                    }
                    else if (sLoopSection == "LIN;PRI")
                    {
                        if (sSegmentID == "PRI")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Price qualifier
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " = " + oSegment.get_DataElementValue(1,2));     //Price
                            sValue = oSegment.get_DataElementValue(1,3);     //Price type, coded
                            sValue = oSegment.get_DataElementValue(1,4);     //Price type qualifier
                            sValue = oSegment.get_DataElementValue(1,5);     //Unit price basis
                            sValue = oSegment.get_DataElementValue(1,6);     //Measure unit qualifier
                        }   //sSegmentID
                    }   //sLoopSection
                }
                else if (nArea == 3)
                {
                    if (sLoopSection == "")
                    {
                        if (sSegmentID == "UNS")
                        {
                            sValue = oSegment.get_DataElementValue(1,0);     //Section identification
                        }   //SegmentID
                    }
                    else if (sLoopSection == "MOA")
                    {
                        if (sSegmentID == "MOA")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Monetary amount type qualifier
                            sValue = oSegment.get_DataElementValue(1,2);     //Monetary amount
                            sValue = oSegment.get_DataElementValue(1,3);     //Currency, coded
                            sValue = oSegment.get_DataElementValue(1,4);     //Currency qualifier
                            sValue = oSegment.get_DataElementValue(1,5);     //Status, coded
                        }   //SegmentID
                    }
                    else if (sLoopSection == "TAX")
                    {
                        if (sSegmentID == "TAX")
                        {
                            sValue = oSegment.get_DataElementValue(1,0);     //Duty/tax/fee function qualifier
                            sValue = oSegment.get_DataElementValue(2,1);     //Duty/tax/fee type, coded
                            sValue = oSegment.get_DataElementValue(2,2);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(2,3);     //Code list responsible agency, coded
                            sValue = oSegment.get_DataElementValue(2,4);     //Duty/tax/fee type
                            sValue = oSegment.get_DataElementValue(3,1);     //Duty/tax/fee account identification
                            sValue = oSegment.get_DataElementValue(3,2);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(3,3);     //Code list responsible agency, coded
                            sValue = oSegment.get_DataElementValue(4,0);     //Duty/tax/fee assessment basis
                            sValue = oSegment.get_DataElementValue(5,1);     //Duty/tax/fee rate identification
                            sValue = oSegment.get_DataElementValue(5,2);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(5,3);     //Code list responsible agency, coded
                            sValue = oSegment.get_DataElementValue(5,4);     //Duty/tax/fee rate
                            sValue = oSegment.get_DataElementValue(5,5);     //Duty/tax/fee rate basis identification
                            sValue = oSegment.get_DataElementValue(5,6);     //Code list qualifier
                            sValue = oSegment.get_DataElementValue(5,7);     //Code list responsible agency, coded
                            sValue = oSegment.get_DataElementValue(6,0);     //Duty/tax/fee category, coded
                        }
                        else if (sSegmentID == "MOA")
                        {
                            sValue = oSegment.get_DataElementValue(1,1);     //Monetary amount type qualifier
                            listBox1.Items.Add(oSegment.get_DataElement(1).Description + " invoice = " + oSegment.get_DataElementValue(1,2));     //Monetary amount
                            sValue = oSegment.get_DataElementValue(1,3);     //Currency, coded
                            sValue = oSegment.get_DataElementValue(1,4);     //Currency qualifier
                            sValue = oSegment.get_DataElementValue(1,5);     //Status, coded
                        }   //sSegmentID
                    }   //sLoopSection
                }   //nArea
 
                //GETS THE NEXT DATA SEGMENT
                ediDataSegment.Set(ref oSegment, (ediDataSegment) oSegment.Next()); //oSegment = (ediDataSegment) oSegment.Next();
 
            } //while

            Cursor = Cursors.Default;

            MessageBox.Show("Done");
        
        }
    }
    

    Click here to download a trial version of the Framework EDI