从文本中导入到数据库程序

重点:

1.解析每一行字符串

2.switch语句的应用

3.对每一个数据库的预设

4.其他

   private int ImportTxt(string FileName, string RecipeName, int Index, bool IsRecipe)
        {
            //1.参数不对
            if (FileName == null || RecipeName == null || FileName.Trim() == "" || RecipeName.Trim() == "" || Index < 1)
            {
                return -5;

            }
            //2.文件不存在
            if (!File.Exists(FileName))
            {
                return -4;

            }
            //3.产品名称不存在
            if (!ExistRecipe(RecipeName))
            {
                return -3;
            }

            //5.定义参数
            string TrajName = null;
            string StrLine = null;
            int LineCount = 0;
            int FlagIndex = 0;
            int SegFlag = -1;
            //-1 产品信息
            //0  路径信息
            //1  切入点
            //2  切割点
            //3  切出点

            int TrajIndex = 0;
            int BeforeTrajIndex = 0;
            int TrajPosIndex = 0;
            int AfterTrajIndex = 0;
            int SafeIndex = 0;
            int MoveJIndex = 0;
            int MoveCIndex = 0;

            //不同的版本
            bool Peps = false;
            bool TrajFlag = false;

            //安全点数目
            string[] data = new string[6];
            DataTable[] dt = new DataTable[5];
            DataRow[] dr = new DataRow[5];
            DataRow dw = null;

            FileStream fs = null;
            StreamReader sr = null;

            try
            {
                if (!IsRecipe)
                {
                    TrajName = RecipeName + "_" + Index.ToString();
                    while (ExistTraj(TrajName))
                    {
                        TrajName = TrajName + "S";

                    }
                    TrajIndex = Index - 1;
                }
                else
                {
                    TrajIndex = 0;
                }


                recipeTA.Fill(ds.PRO_RECIPE);
                trajTA.Fill(ds.PRO_TRAJ);
                beTrajposTA.Fill(ds.PRO_BFTRAJPOS);
                trajposTA.Fill(ds.PRO_TRAJPOS);
                afTrajposTA.Fill(ds.PRO_AFTRAJPOS);

                dt[4] = ds.PRO_RECIPE;
                dt[0] = ds.PRO_TRAJ;
                dt[1] = ds.PRO_BFTRAJPOS;
                dt[2] = ds.PRO_TRAJPOS;
                dt[3] = ds.PRO_AFTRAJPOS;



                //4.判断名称


                fs = new FileStream(FileName, FileMode.Open, FileAccess.Read);
                sr = new StreamReader(fs);  //使用StreamReader类来读取文件 
                sr.BaseStream.Seek(0, SeekOrigin.Begin);

                while ((StrLine = sr.ReadLine()) != null)
                {
                    LineCount++;
                    StrLine = StrLine.Trim();
                    if (StrLine == "")
                    {
                        continue;

                    }
                    //找出每行标志符
                    if ((FlagIndex = (LineIndex(StrLine))) < 0)
                    {
                        return LineCount;
                    }

                    if (FlagIndex > 3)
                    {

                        StrLine = (StrLine.Substring(LineFlag[FlagIndex].Length)).Trim();
                        //利用切入点的第一个MOVEJ作为标志符。每个切入点必须有一个MOVEJ
                        if ((data = StrLine.Split(new char[] { '/', ',' })) == null)
                        {
                            return LineCount;
                        }
                        for (int i = 0; i < data.Length; i++)
                        {

                            data[i] = data[i].Trim();
                        }

                    }
                    if (FlagIndex == 28 || FlagIndex == 31)
                    {
                        Peps = true;

                    }

                    //每行标志符进行判断
                    switch (FlagIndex)
                    {


                        //"//"
                        case 0:
                        //"*****"
                        case 1:
                        //DELAYOFF=
                        case 11:
                        //TOTALELEMENTS=
                        case 18:
                        //PRESET=
                        case 19:
                        //BYPASS=
                        case 23:
                        //!
                        case 32:
                            {
                                break;
                            }

                        //"=BEGIN"
                        case 2:
                            {
                                if (MoveJIndex != 0 || SafeIndex != 0 || BeforeTrajIndex != 0 || AfterTrajIndex != 0 || TrajPosIndex != 0||TrajFlag)
                                {
                                    return LineCount;
                                }
                                TrajFlag = true;
                                SegFlag = 0;
                                TrajIndex++; ;

                                if (IsRecipe)
                                {

                                    TrajName = RecipeName + "_" + TrajIndex.ToString();

                                }
                                //******************************************************
                                //给路径的选项预设值
                                dr[0] = dt[0].NewRow();
                                dr[0]["RECIPENAME"] = RecipeName;
                                dr[0]["INDEX"] = TrajIndex;
                                dr[0]["TRAJNAME"] = TrajName;

                                dr[0]["TYPENO"] = 10;
                                dr[0]["DIAMETER"] = 0;
                                dr[0]["DELAY"] = 0.8;
                                dr[0]["SPEED"] = 100;
                                dr[0]["BLEND"] = 1;

                                dr[0]["FRAME_X"] = 0;
                                dr[0]["FRAME_Y"] = 0;
                                dr[0]["FRAME_Z"] = 0;
                                dr[0]["FRAME_RX"] = 0;
                                dr[0]["FRAME_RY"] = 0;
                                dr[0]["FRAME_RZ"] = 0;

                                dr[0]["OFFSET_X"] = 0;
                                dr[0]["OFFSET_Y"] = 0;
                                dr[0]["OFFSET_Z"] = 0;
                                dr[0]["OFFSET_RX"] = 0;
                                dr[0]["OFFSET_RY"] = 0;
                                dr[0]["OFFSET_RZ"] = 0;

                                dr[0]["ARRAY_XCOUNT"] = 0;
                                dr[0]["ARRAY_XOFFSET"] = 0;
                                dr[0]["ARRAY_YCOUNT"] = 0;
                                dr[0]["ARRAY_YOFFSET"] = 0;

                                dr[0]["ACTION1"] = 0;
                                dr[0]["ACTION2"] = 0;
                                dr[0]["ACTION3"] = 0;
                                dr[0]["ACTION4"] = 0;
                                dr[0]["BP1"] = "0";
                                dr[0]["BP2"] = "0";
                                dr[0]["BP3"] = "0";
                                dr[0]["BP4"] = "0";

                                dr[0]["REMARK"] = "";

                                break;
                            }
                        //"=END"
                        case 3:
                            {
                                if (SegFlag != 3 || SafeIndex != 1 || MoveJIndex < 1||!TrajFlag)
                                {
                                    return LineCount;
                                }
                                TrajFlag = false;

                                dr[0].EndEdit();
                                dt[0].Rows.Add(dr[0]);
                                BeforeTrajIndex = 0;
                                AfterTrajIndex = 0;
                                TrajPosIndex = 0;
                                MoveJIndex = 0;
                                SafeIndex = 0;
                                MoveCIndex = 0;
                                SegFlag = 0;

                                break;
                            }

                        //"MOVEJ="
                        case 4:
                            {
                                MoveJIndex++;
                                if (SegFlag == 2 || SegFlag == -1)
                                {
                                    return LineCount;
                                }
                                if (SegFlag == 0)
                                {
                                    SegFlag = 1;
                                }

                                if (SegFlag == 1)
                                {
                                    BeforeTrajIndex++;
                                    dw = dt[1].NewRow();
                                    dw["INDEX"] = BeforeTrajIndex;
                                }

                                if (SegFlag == 3)
                                {
                                    AfterTrajIndex++;
                                    dw = dt[3].NewRow();
                                    dw["INDEX"] = AfterTrajIndex;
                                }

                                dw["TRAJNAME"] = TrajName;
                                dw["TYPENAME"] = "MOVEJ";
                                dw["BLEND"] = 1;

                                dw["X/J1"] = data[0];
                                dw["Y/J2"] = data[1];
                                dw["Z/J3"] = data[2];
                                dw["RX/J4"] = data[3];
                                dw["RY/J5"] = data[4];
                                dw["RZ/J6"] = data[5];


                                dw["SPEED"] = data[6];
                                dw["ACC"] = data[7];


                                dw["PRESET"] = 0;
                                dw["REMARK"] = "";
                                dw["MOVCPOS"] = "";
                                dw["ACTION"] = 0;

                                dw.EndEdit();
                                if (SegFlag == 1)
                                {
                                    dt[1].Rows.Add(dw);
                                }

                                if (SegFlag == 3)
                                {
                                    dt[3].Rows.Add(dw);
                                }

                                break;
                            }
                        //"MOVEL="
                        case 5:
                            {
                                if (SegFlag == 0 || SegFlag == -1)
                                {
                                    return LineCount;
                                }
                                if (SegFlag == 1)
                                {
                                    BeforeTrajIndex++;
                                    dw = dt[1].NewRow();
                                    dw["INDEX"] = BeforeTrajIndex;
                            
                                    SafeIndex++;
                                }
                                if (SegFlag == 2)
                                {
                                    TrajPosIndex++;
                                    dw = dt[2].NewRow();
                                    dw["INDEX"] = TrajPosIndex;
                                    dw["BP1"] = TrajPosIndex + MoveCIndex;
                                }
                                if (SegFlag == 3)
                                {
                                    AfterTrajIndex++;
                                    dw = dt[3].NewRow();
                                    dw["INDEX"] = AfterTrajIndex;
                                    SafeIndex++;
                                }


                                dw["TRAJNAME"] = TrajName;
                                dw["TYPENAME"] = "MOVEL";
                                dw["BLEND"] = 1;
                                dw["MOVCPOS"] = "";

                                dw["X/J1"] = data[0];
                                dw["Y/J2"] = data[1];
                                dw["Z/J3"] = data[2];
                                dw["RX/J4"] = data[3];
                                dw["RY/J5"] = data[4];
                                dw["RZ/J6"] = data[5];

                                dw["REMARK"] = "";

                                if (SegFlag == 1)
                                {

                                    dw["SPEED"] = data[6].Trim();
                                    dw["ACC"] = data[7].Trim();
                                    dw.EndEdit();
                                    dt[1].Rows.Add(dw);
                                }
                                if (SegFlag == 2)
                                {

                                    dw["PRESET"] = Int32.Parse(data[6]) % 200;
                                    dw["ACTION"] = data[7];
                                    dw["SPEED"] = data[8];
                                    dw["ACC"] = data[9];
                                    if (data.Length >= 11)
                                    {
                                        dw["BLEND"] = data[10];
                                    }
                                 
                                    dw.EndEdit();
                                    dt[2].Rows.Add(dw);
                                }
                                if (SegFlag == 3)
                                {
                                    dw["SPEED"] = data[6];
                                    dw["ACC"] = data[7];
                                    dw.EndEdit();
                                    dt[3].Rows.Add(dw);
                                }


                                break;
                            }
                        //"MOVEC="
                        case 6:
                            {
                                if (SegFlag != 2)
                                {
                                    return LineCount;
                                }
                                TrajPosIndex++;
                                dw = dt[2].NewRow();
                                dw["INDEX"] = TrajPosIndex;
                                dw["TRAJNAME"] = TrajName;
                                dw["TYPENAME"] = "MOVEC";
                                dw["BLEND"] = 1;

                                dw["X/J1"] = data[0];
                                dw["Y/J2"] = data[1];
                                dw["Z/J3"] = data[2];
                                dw["RX/J4"] = data[3];
                                dw["RY/J5"] = data[4];
                                dw["RZ/J6"] = data[5];

                                dw["MOVCPOS"] = data[6] + "," + data[7] + "," + data[8] + "," + data[9] + "," + data[10] + "," + data[11];
                                dw["PRESET"] = Int32.Parse(data[12]) % 200;
                                dw["ACTION"] = data[13];
                                dw["SPEED"] = data[14];
                                dw["ACC"] = data[15];
                                dw["BP1"] = TrajPosIndex + MoveCIndex;
                                if (data.Length >= 17)
                                {
                                    dw["BLEND"] = data[16];
                                }
                                dw["REMARK"] = "";
                                dw.EndEdit();
                                dt[2].Rows.Add(dw);
                                MoveCIndex++;
                                break;
                            }
                        //"HOLE="
                        case 7:
                            {
                                if (TrajPosIndex != 0)
                                {
                                    return LineCount;
                                }
                                TrajPosIndex++;
                                dw = dt[2].NewRow();
                                dw["INDEX"] = TrajPosIndex;

                                dw["TRAJNAME"] = TrajName;
                                dw["TYPENAME"] = "HOLE";
                                dw["BLEND"] = 1;
                                dw["MOVCPOS"] = "";


                                dw["X/J1"] = data[0];
                                dw["Y/J2"] = data[1];
                                dw["Z/J3"] = data[2];
                                dw["RX/J4"] = data[3];
                                dw["RY/J5"] = data[4];
                                dw["RZ/J6"] = data[5];

                                dr[0]["DIAMETER"] = data[6];
                                dw["PRESET"] = data[7];
                                dw["ACTION"] = data[8];

                                dw["SPEED"] = data[9];
                                dw["ACC"] = data[10];
                                if (data.Length >= 12)
                                {
                                    dw["BLEND"] = data[11];
                                }

                                dw["REMARK"] = "";
                                dw.EndEdit();
                                dt[2].Rows.Add(dw);


                                break;
                            }

                        //"LASER=ON"
                        case 8:
                            {
                                if (SegFlag != 1 || SafeIndex != 3 || MoveJIndex < 1)
                                {
                                    return LineCount;
                                }
                                MoveJIndex = 0;
                                SafeIndex = 0;
                                SegFlag = 2;
                                break;
                            }
                        //LASER=OFF
                        case 9:
                            {
                                if (SegFlag != 2)
                                {
                                    return LineCount;
                                }
                                SegFlag = 3;
                                break;
                            }
                        //DELAYON=
                        case 10:
                            {

                                dr[0]["DELAY"] = data[0];

                                break;
                            }
                        //FROM
                        case 12:
                        //FRAME=
                        case 27:
                            {

                                if (SegFlag == 2 || SegFlag == 3 || data.Length < 6)
                                {

                                    return LineCount;
                                }
                                if (SegFlag == -1)
                                {
                                    dw = dr[4];
                                }
                                if (SegFlag == 0)
                                {

                                    dw = dr[0];
                                }


                                dw["FRAME_X"] = data[0];
                                dw["FRAME_Y"] = data[1];
                                dw["FRAME_Z"] = data[2];
                                dw["FRAME_RX"] = data[3];
                                dw["FRAME_RY"] = data[4];
                                dw["FRAME_RZ"] = data[5];


                                break;

                            }
                        //"OFFSET="
                        case 13:
                        //"FRAMEOFFSET="
                        case 31:
                        //T0=
                        case 28:
                            {

                                if (SegFlag == -1)
                                {
                                    dw = dr[4];
                                }
                                if (SegFlag == 0)
                                {

                                    dw = dr[0];
                                }


                                dw["OFFSET_X"] = data[0];
                                dw["OFFSET_Y"] = data[1];
                                dw["OFFSET_Z"] = data[2];
                                dw["OFFSET_RX"] = data[3];
                                dw["OFFSET_RY"] = data[4];
                                dw["OFFSET_RZ"] = data[5];


                                break;
                            }
                        //PRODUCTID=
                        //对于产品进行预设
                        case 14:
                            {
                                if (!IsRecipe)
                                {
                                    return LineCount;
                                }
                                SegFlag = -1;
                                //*************************************************************
                                //对产品值进行预设
                                for (int j = 0; j < dt[4].Rows.Count; j++)
                                {
                                    if (dt[4].Rows[j]["RECIPENAME"].ToString() == RecipeName)
                                    {
                                        dr[4] = dt[4].Rows[j];
                                    }
                                }
                                dr[4]["RECIPENAME"] = RecipeName;
                                dr[4]["DESCRIPTION"] = "";
                                dr[4]["OFFLINE"] = false;

                                dr[4]["FRAME_X"] = 0;
                                dr[4]["FRAME_Y"] = 0;
                                dr[4]["FRAME_Z"] = 0;
                                dr[4]["FRAME_RX"] = 0;
                                dr[4]["FRAME_RY"] = 0;
                                dr[4]["FRAME_RZ"] = 0;


                                dr[4]["OFFSET_X"] = 0;
                                dr[4]["OFFSET_Y"] = 0;
                                dr[4]["OFFSET_Z"] = 0;
                                dr[4]["OFFSET_RX"] = 0;
                                dr[4]["OFFSET_RY"] = 0;
                                dr[4]["OFFSET_RZ"] = 0;
                                dr[4]["SPEED"] = 100;



                                break;
                            }
                        //TOOL=
                        case 15:
                            {
                                if (!IsRecipe)
                                {
                                    return LineCount;
                                }
                                //对有TCP值的需要进行判断
                                double[] tcp = GetTool();
                                for (int i = 0; i < 6; i++)
                                {
                                    if (Math.Abs(tcp[i]-double.Parse(data[i])) > 0.01)
                                    {

                                        return LineCount;
                                    }
                                
                                }
                                    break;
                            }
                        //HOME=
                        case 16:
                            {
                                if (!IsRecipe)
                                {
                                    return LineCount;
                                }
                                break;
                            }
                        //OFFLINE=
                        case 17:
                            {
                                if (!IsRecipe)
                                {
                                    return LineCount;
                                }
                                dr[4]["OFFLINE"] = (StrLine.ToUpper().IndexOf("TRUE")>=0);

                                break;
                            }


                        //BLEND=
                        case 20:
                            {
                                if (SegFlag == 1 || SegFlag == 2 || SegFlag == 3)
                                {
                                    return LineCount;
                                }

                                if (SegFlag == -1)
                                {
                                    dr[4]["BLEND"] = data[0];

                                }
                                else
                                {
                                    dr[0]["BLEND"] = data[0];

                                }


                                break;
                            }
                        //TeachSpeed=
                        case 29:
                        //DEFAULTSPEED=
                        case 21:
                            {
                                dr[4]["TEACHSPEED"] = data[0];


                                break;
                            }
                        //"MODIFYSPEED="
                        case 30:
                        //SPEED=
                        case 22:
                            {
                                if (SegFlag == 2 || SegFlag == 3 || StrLine.IndexOf("DEFAULTSPEED=") >= 0 || StrLine.IndexOf("TEACHSPEED=") >= 0)
                                {
                                    return LineCount;
                                }

                                double Speed = double.Parse(data[0]);
                                if (SegFlag == -1)
                                {
                                    dr[4]["SPEED"] = Speed;

                                }
                                else
                                {

                                    if (Peps)
                                    {
                                        dr[0]["SPEED"] = (int)(Speed * 100 / double.Parse(dr[4]["TEACHSPEED"].ToString()));
                                    }
                                    else
                                    {
                                        dr[0]["SPEED"] = Speed;

                                    }

                                }


                                break;
                            }
                        // CUTTYPE=    
                        case 24:
                            {

                                if (SegFlag != 0)
                                {
                                    return LineCount;
                                }

                                dr[0]["TYPENO"] = data[0];
                                dr[0]["TYPENAME"] = TrajTypeName[Int32.Parse(data[0])];

                                break;
                            }
                        //ARRAY=
                        case 25:
                            {
                                if (SegFlag != 0)
                                {
                                    return LineCount;
                                }
                                if (data[0] == "0")
                                {

                                    data[0] = "1";
                                }
                                if (data[1] == "0")
                                {

                                    data[1] = "1";
                                }


                                dr[0]["ARRAY_XCOUNT"] = data[0];
                                dr[0]["ARRAY_XOFFSET"] = data[2];
                                dr[0]["ARRAY_YCOUNT"] = data[1];
                                dr[0]["ARRAY_YOFFSET"] = data[3];
                                break;
                            }
                        //WORKPLACE=
                        case 26:
                            {
                                if (SegFlag != 0)
                                {
                                    return LineCount;
                                }

                                if (data.Length>=2)
                                {

                                    dr[0]["BP1"] = data[0];
                                    dr[0]["BP2"] = data[1];
                                }
                                if (data.Length>=4)
                                {

                                    dr[0]["BP3"] = data[2];
                                    dr[0]["BP4"] = data[3];
                                }

                                SegFlag = 1;
                                break;
                            }

                        default:
                            {

                                return LineCount;
                            }

                    }


                }
                if (IsRecipe)
                {
                    dr[4].EndEdit();
                    recipeTA.Update(ds.PRO_RECIPE);

                }
                recipeTA.Update(ds.PRO_RECIPE);
                trajTA.Update(ds.PRO_TRAJ);
                beTrajposTA.Update(ds.PRO_BFTRAJPOS);
                trajposTA.Update(ds.PRO_TRAJPOS);
                afTrajposTA.Update(ds.PRO_AFTRAJPOS);


                return 0;
            }
            catch
            {
                return LineCount;
            }
            finally
            {
                if (fs != null)
                {
                    fs.Close();
                }
                if (sr != null)
                {
                    sr.Close();
                }


            }
        }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值