从文本中导入到数据库程序
2012-09-13 09:52
183 查看
重点:
1.解析每一行字符串
2.switch语句的应用
3.对每一个数据库的预设
4.其他
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(); } } }
相关文章推荐
- shell 实现文本导入oracle 数据库
- 数据导入,可以将txt文本文件或excel的内容导入到数据库
- 把数据库里面的内容导入到文本中(数据库导出)
- 使用FSO把文本信息导入数据库
- python Mysql 数据库导入文本数据,中文乱码
- 使用存储过程将文本导入数据库表
- 使用程序大数据量导入到数据库的思路
- excel导入数据库 excel导入datatable 时间变数字 字符文本格式化 VBA 指定到列
- 记一次SQL Server2005导入Oracle10G的折腾过程【供多种数据库导入导出数据的C#程序源码参考】
- 将文本数据提取导入到数据库
- 使用FSO把文本信息导入数据库
- 通过assets向安卓程序目录中导入数据库文件出现错误的解决办法
- mysql创建数据库,创建数据库表导入xlsx、txt文本,查询、删除、插入数据语句的使用
- [iPhone/Android] 导入程序的数据库大小与原数据库大小不一致怎么办?
- 使用FSO把文本信息导入数据库
- 使用FSO把文本信息导入数据库
- ORACLE 快速批量导入文本数据到数据库(sqlldr工具)方法与分析
- Access程序从txt文件导入数据至数据库的DoCmd.TransferText方法
- java实现GP数据库导入导出工具类,程序可以和gp在不同机器上
- 一键式安装.Net FrameWork,MSDE,Web安装程序,Windows安装程序,还原数据库文件,注册表导入