識(shí)別支撐的算法,僅支持不帶后綴的編碼,后面會(huì)更新非標(biāo)支撐算法
public static string[] 標(biāo)準(zhǔn)支撐核心算法(string Z_編碼, string Z_數(shù)量)
{
//200Z200(普通支撐) Z220(梁底支撐150*220) Z(流星錘100*200)(忠旺體系的編碼)
//定義型材信息(由于支撐沒(méi)有加筋,所以型材可以減少一部分)
string Z_主型材 = "";
string Z_主型材長(zhǎng)度 = "";
string Z_主型材數(shù)量 = "";
string Z_封板 = "";
string Z_封板數(shù)量 = "";
string Z_圓管數(shù)量 = "";//圓管每個(gè)公司長(zhǎng)度不同,所以只計(jì)算數(shù)量,不算長(zhǎng)度
string Z_信息 = "";
string[] 結(jié)果 = null;//結(jié)果
String[] Z_無(wú)字母參數(shù) = null;
String[] Z_無(wú)數(shù)字參數(shù) = null;
//支撐算法稍微要比平板算法要復(fù)雜好幾倍,要計(jì)算用什么型材來(lái)開(kāi)料,比如125Z200,此時(shí)就不能用125的型材要用200的型材切125,然后焊接封板
//其中參數(shù)又分好幾種情況,比如單獨(dú)一個(gè)Z,此時(shí)就不能再計(jì)算他的參數(shù)了,因?yàn)槭枪潭ㄋ赖?00*200,再比如Z220他第一個(gè)參數(shù)是固定的150,所以只有1個(gè)參數(shù),要分開(kāi)三次進(jìn)行計(jì)算
//去除編碼中的符號(hào)和字母,方便下一次計(jì)算
Z_無(wú)字母參數(shù) = Z_編碼.Split(new char[] { '-', 'P', 'J', 'Q', 'C', 'D', 'K', 'L', '/', '(', ')', 'A', 'B', 'E', 'F', 'G', 'H', 'I', 'J', 'M', 'N', 'O', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }, StringSplitOptions.RemoveEmptyEntries);
//去除編碼中的數(shù)字,方便下一次計(jì)算
Z_無(wú)數(shù)字參數(shù) = Z_編碼.Split(new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.' }, StringSplitOptions.RemoveEmptyEntries);
//去除編碼中的空格,然后轉(zhuǎn)化為string類(lèi)型,方便下一次計(jì)算
String Z_字符串 = String.Join("", Z_無(wú)數(shù)字參數(shù).Select(y => y.ToString()).ToArray());
char[] Z_字符數(shù)組 = Z_字符串.ToCharArray();
//判斷獲取到的編碼是不是支撐類(lèi)型,并保證編碼中只有一個(gè)Z字符
if (Z_字符數(shù)組.Length > 0 && Z_字符數(shù)組[0] == 'Z' && Z_字符數(shù)組.Length == 1)
{
//Z樓面支撐處理(無(wú)字母參數(shù)為0)
if (Z_無(wú)字母參數(shù).Length == 0 )
{
Z_主型材 = "100";
Z_主型材長(zhǎng)度 = "200";
Z_主型材數(shù)量 = Z_數(shù)量;
Z_封板 = "無(wú)";
Z_封板數(shù)量 = "無(wú)";
Z_圓管數(shù)量 = "150mm*" + Z_數(shù)量;//圓管每個(gè)公司長(zhǎng)度不同,所以自行修改長(zhǎng)度
Z_信息 = "樓面支撐Z";
}
//Z220梁底支撐處理(參數(shù)只有一個(gè),并保證參數(shù)是220)
else if (Z_無(wú)字母參數(shù).Length == 1 && Z_無(wú)字母參數(shù)[0] == "220")
{
Z_主型材 = "150";
Z_主型材長(zhǎng)度 = Z_無(wú)字母參數(shù)[0];
Z_主型材數(shù)量 = Z_數(shù)量;
Z_封板 = "無(wú)";
Z_封板數(shù)量 = "無(wú)";
Z_圓管數(shù)量 = "100mm*" + Z_數(shù)量;//圓管每個(gè)公司長(zhǎng)度不同,所以自行修改長(zhǎng)度
Z_信息 = "梁底支撐Z220";
}
//200Z200多參數(shù)型支撐處理(2個(gè)以上的參數(shù))
else if (Z_無(wú)字母參數(shù).Length == 2)
{
Z_主型材數(shù)量 = Z_數(shù)量;
Z_圓管數(shù)量 = "100*" + Z_數(shù)量;//不出意外基本就=支撐數(shù)量
Z_封板數(shù)量 = (2 * int.Parse(Z_數(shù)量)).ToString(); ;
Z_主型材 = Z_無(wú)字母參數(shù)[0];
//計(jì)算型材(取消一堆花里胡哨的算法,實(shí)際沒(méi)卵用)
if (float.Parse(Z_無(wú)字母參數(shù)[0]) % 50 != 0&& float.Parse(Z_無(wú)字母參數(shù)[1]) % 50 == 0)
{//寬度非標(biāo),長(zhǎng)度整數(shù)
Z_主型材 = Z_無(wú)字母參數(shù)[1];
Z_主型材長(zhǎng)度 = Z_無(wú)字母參數(shù)[0];
Z_封板 = "60.5內(nèi)封-長(zhǎng)度:" + (float.Parse(Z_無(wú)字母參數(shù)[1]) - 16).ToString();
Z_信息 = "非50倍數(shù)寬度支撐";
}
else if (float.Parse(Z_無(wú)字母參數(shù)[1]) % 50 != 0&&float.Parse(Z_無(wú)字母參數(shù)[0]) % 50 == 0)
{//長(zhǎng)度非標(biāo),寬度整數(shù)
Z_主型材 = Z_無(wú)字母參數(shù)[0];
Z_主型材長(zhǎng)度 = Z_無(wú)字母參數(shù)[1];
Z_封板 = "60.5內(nèi)封-長(zhǎng)度:" + (float.Parse(Z_無(wú)字母參數(shù)[0]) - 16).ToString();
Z_信息 = "非50倍數(shù)長(zhǎng)度支撐";
}
else if (float.Parse(Z_無(wú)字母參數(shù)[0]) % 50 != 0 && float.Parse(Z_無(wú)字母參數(shù)[1]) % 50 != 0)
{//長(zhǎng)寬都非標(biāo),以數(shù)小的當(dāng)型材
if (float.Parse(Z_無(wú)字母參數(shù)[0]) < float.Parse(Z_無(wú)字母參數(shù)[1]))
{
Z_主型材 = Z_無(wú)字母參數(shù)[0];
Z_主型材長(zhǎng)度 = Z_無(wú)字母參數(shù)[1];
Z_封板 = "60.5內(nèi)封-長(zhǎng)度:" + (float.Parse(Z_無(wú)字母參數(shù)[0]) - 16).ToString();
}
else {
Z_主型材 = Z_無(wú)字母參數(shù)[1];
Z_主型材長(zhǎng)度 = Z_無(wú)字母參數(shù)[0];
Z_封板 = "60.5內(nèi)封-長(zhǎng)度:" + (float.Parse(Z_無(wú)字母參數(shù)[1]) - 16).ToString();
}
Z_信息 = "非標(biāo)支撐";
}
else
{
//正常支撐
Z_主型材 = Z_無(wú)字母參數(shù)[0];
Z_主型材長(zhǎng)度 = Z_無(wú)字母參數(shù)[1];
Z_封板 = "60.5內(nèi)封-長(zhǎng)度:" + (float.Parse(Z_無(wú)字母參數(shù)[0]) - 16).ToString();
Z_信息 = "正常支撐";
}
}
else
{//參數(shù)大于2個(gè)以上,暫時(shí)不支持,所以說(shuō)明一下
Z_信息 = "編碼沒(méi)有此型號(hào)支撐,請(qǐng)檢查";
結(jié)果 = new string[7] { Z_主型材, Z_主型材長(zhǎng)度, Z_主型材數(shù)量, Z_封板, Z_封板數(shù)量, Z_圓管數(shù)量, Z_信息 };
return 結(jié)果;
}
結(jié)果 = new string[7] { Z_主型材, Z_主型材長(zhǎng)度, Z_主型材數(shù)量, Z_封板, Z_封板數(shù)量, Z_圓管數(shù)量, Z_信息 };
return 結(jié)果;
}
else
{//不是支撐的編碼
Z_信息 = "編碼錯(cuò)誤,請(qǐng)檢查";
結(jié)果 = new string[7] { Z_主型材, Z_主型材長(zhǎng)度, Z_主型材數(shù)量, Z_封板, Z_封板數(shù)量, Z_圓管數(shù)量, Z_信息 };
return 結(jié)果;
}
}
調(diào)用方法:
ruslt = MBCore.標(biāo)準(zhǔn)支撐核心算法("200Z200", "10");
if (ruslt != null)
{
foreach(string str in ruslt)
{
Console.Write(str);
}
}
結(jié)果如下:
image.png
完事,下一篇標(biāo)準(zhǔn)C槽的算法,未完待續(xù)..........