您的位置:首页 > 数据库

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

2012-09-13 09:52 183 查看
重点:

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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: