DataAnalysisClass.cs 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using DevExpress.XtraGrid.Views.Grid;
  8. using DevExpress.XtraGrid;
  9. using Uninpho.DBOperation.Model;
  10. using Uninpho.DBOperation.Operation;
  11. using System.Windows.Forms;
  12. using DevExpress.XtraEditors;
  13. using MathWorks.MATLAB.NET.Arrays;
  14. using System.Threading;
  15. //数据库表重置;
  16. //TRUNCATE TABLE public.t_jihefenxi_boxing;//删除表内所有数据
  17. //ALTER TABLE public.t_jihefenxi_boxing DROP COLUMN id;//删除id序号
  18. //alter table public.t_jihefenxi_boxing add id serial PRIMARY KEY;//重置新加id序号
  19. namespace Uninpho.Tools.components.DataAnalysis
  20. {
  21. /// <summary>
  22. /// 进行算法处理的类
  23. /// </summary>
  24. public class DataAnalysisClass
  25. {
  26. GridControl GC;
  27. GridView GV;
  28. string type;
  29. int[] selectrow;
  30. bool iszhengc = true;
  31. /// <summary>
  32. /// 算法执行
  33. /// </summary>
  34. /// <param name="type">算法类型;“几何”、“轮轨力”、“微小”</param>
  35. /// <param name="selectrow">table中选择的数据的索引</param>
  36. /// <param name="GC">GridControl</param>
  37. /// <param name="GV">GridView</param>
  38. public DataAnalysisClass(string type, int[] selectrow, ref GridControl GC, ref GridView GV)
  39. {
  40. DataAnalysisToPG.InitBXID();
  41. this.GC = GC;
  42. this.GV = GV;
  43. this.type = type;
  44. this.selectrow = selectrow;
  45. DataAnalysisFun();
  46. }
  47. private void DataAnalysisFun()
  48. {
  49. //1.检查任务状态
  50. checkedStatus();
  51. //2.执行算法
  52. if (iszhengc)
  53. {
  54. bool boo = true;
  55. if (type != "微小")
  56. {
  57. SuanFaFrom frm = new SuanFaFrom();
  58. frm.StartPosition = FormStartPosition.CenterParent;
  59. frm.changeLabel(type == "几何" ? true : false);
  60. if (frm.ShowDialog() != DialogResult.OK)
  61. {
  62. boo = false;
  63. }
  64. }
  65. if (boo)
  66. {
  67. AsyncFun();
  68. }
  69. }
  70. }
  71. /// <summary>
  72. /// 检查任务状态
  73. /// </summary>
  74. private void checkedStatus()
  75. {
  76. bool b = true;
  77. if (selectrow.Length <= 0)
  78. {
  79. XtraMessageBox.Show("请先选择要执行的文件!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  80. iszhengc = false;
  81. }
  82. else
  83. {
  84. for (int i = 0; i < selectrow.Length; i++)
  85. {
  86. var a = GV.GetRowCellValue(selectrow[i], "Rwzt").ToString();
  87. if (GV.GetRowCellValue(selectrow[i], "Wjzt").ToString().Trim() != "正常")
  88. {
  89. XtraMessageBox.Show("存在文件状态异常文件,请检查后再执行算法!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  90. iszhengc = false;
  91. break;
  92. }
  93. else if (GV.GetRowCellValue(selectrow[i], "Jccxx").ToString() == " " || GV.GetRowCellValue(selectrow[i], "Jccxx").ToString() == "")
  94. {
  95. XtraMessageBox.Show("没有选定检测车信息,请检查!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  96. iszhengc = false;
  97. break;
  98. }
  99. else if (GV.GetRowCellValue(selectrow[i], "Rwzt").ToString() == type + "算法执行完毕" || GV.GetRowCellValue(selectrow[i], "Rwzt").ToString() == "算法执行失败")
  100. {
  101. if (type != "微小")
  102. {
  103. if (b)
  104. {
  105. if (XtraMessageBox.Show(type + "算法已执行,是否重新执行?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK)
  106. {
  107. iszhengc = false;
  108. break;
  109. }
  110. else
  111. {
  112. b = false;
  113. }
  114. }
  115. DataAnalysisToPG.DelUpdataData(GV.GetRowCellValue(selectrow[i], "Id").ToString(), type);
  116. }
  117. else
  118. {
  119. XtraMessageBox.Show("微小算法不能重新执行", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  120. iszhengc = false;
  121. break;
  122. }
  123. }
  124. else if (GV.GetRowCellValue(selectrow[i], "Rwzt").ToString() == "算法未执行" && type == "微小")
  125. {
  126. XtraMessageBox.Show("请先执行几何算法!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  127. iszhengc = false;
  128. break;
  129. }
  130. }
  131. }
  132. }
  133. private async Task AsyncFun()
  134. {
  135. bool boo = true;
  136. if (type == "几何" || type == "轮轨力")
  137. {
  138. for (int i = 0; i < selectrow.Length; i++)
  139. {
  140. boo = true;
  141. GV.SetRowCellValue(selectrow[i], "Rwzt", "正在执行" + type + "算法...");
  142. T_file_account whichfile = (T_file_account)DataAnalysisToPG.QueryToPGById(Convert.ToInt32(GV.GetRowCellValue(selectrow[i], "Id").ToString().Trim()));
  143. try
  144. {
  145. await Task.Run(() =>
  146. {
  147. if (type == "几何")
  148. {
  149. JHMain(whichfile);
  150. }
  151. else if (type == "轮轨力")
  152. {
  153. LGLMain(whichfile);
  154. }
  155. });
  156. }
  157. catch (Exception ex)
  158. {
  159. boo = false;
  160. throw;
  161. }
  162. if (boo)
  163. {
  164. GV.SetRowCellValue(selectrow[i], "Rwzt", type + "算法执行完毕");
  165. }
  166. else
  167. {
  168. GV.SetRowCellValue(selectrow[i], "Rwzt", "算法执行失败");
  169. }
  170. }
  171. }
  172. else if (type == "微小")
  173. {
  174. boo = true;
  175. List<T_file_account> whichfile = new List<T_file_account>();
  176. for (int i = 0; i < selectrow.Length; i++)
  177. {
  178. whichfile.Add((T_file_account)DataAnalysisToPG.QueryToPGById(Convert.ToInt32(GV.GetRowCellValue(selectrow[i], "Id").ToString().Trim())));
  179. GV.SetRowCellValue(selectrow[i], "Rwzt", "正在执行" + type + "算法...");
  180. }
  181. try
  182. {
  183. await Task.Run(() => { WXSFMain(whichfile); });
  184. }
  185. catch (Exception ex)
  186. {
  187. boo = false;
  188. throw;
  189. }
  190. for (int i = 0; i < selectrow.Length; i++)
  191. {
  192. if (boo)
  193. {
  194. GV.SetRowCellValue(selectrow[i], "Rwzt", type + "算法执行完毕");
  195. }
  196. else
  197. {
  198. GV.SetRowCellValue(selectrow[i], "Rwzt", type + "算法执行失败");
  199. }
  200. }
  201. }
  202. //提示
  203. if (boo)
  204. {
  205. XtraMessageBox.Show(type + "算法执行完毕", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  206. }
  207. else
  208. {
  209. XtraMessageBox.Show("算法执行失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  210. }
  211. }
  212. private void JHMain(T_file_account whichfile)
  213. {
  214. JH_new(whichfile);
  215. }
  216. private void LGLMain(T_file_account whichfile)
  217. {
  218. LGL_new(whichfile);
  219. }
  220. private void WXSFMain(List<T_file_account> whichfile)
  221. {
  222. WXSFFun(whichfile);
  223. }
  224. #region 几何算法
  225. public void JH_new(T_file_account whichfile)
  226. {
  227. List<T_daocha_account> daochabiao = (List<T_daocha_account>)DataAnalysisToPG.QueryDCTZ(whichfile.Xlm, whichfile.Yswjm.Split('-')[0].ToCharArray());
  228. List<T_quxian_account> quxianbiao = (List<T_quxian_account>)DataAnalysisToPG.QueryQXTZ(whichfile.Xlm, whichfile.Yswjm.Split('-')[0].ToCharArray());
  229. string fname_dir0 = Path.GetDirectoryName(whichfile.Srlj) + "\\";
  230. string fname0 = Path.GetFileName(whichfile.Srlj);
  231. T_xianlulicheng_sf sf = (T_xianlulicheng_sf)DataAnalysisToPG.QueryToString(fname0.Split('-')[0]);
  232. double mile_min = Convert.ToDouble(sf.Qslc);
  233. double mile_max = Convert.ToDouble(sf.Zzlc);
  234. int mile_id = DACommon.xzlcBool ? 0 : 1;
  235. string line_name = fname0.Split('-')[0];
  236. double[] tz_curv = getTZQX(quxianbiao, true);
  237. double[] tz_turnout = getTZDC(daochabiao);
  238. double[] distance_table = getTZJGJX();
  239. string carname = whichfile.Jccxx;
  240. try
  241. {
  242. var data = AnalysisAlgorithmcs.JHFX(fname_dir0, fname0, mile_id, line_name, mile_min, mile_max, tz_curv, tz_turnout, distance_table, carname);
  243. readJHFX(data, whichfile);
  244. }
  245. catch (Exception ex)
  246. {
  247. XtraMessageBox.Show("文件:" + whichfile.Yswjm + "执行失败!" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  248. throw;
  249. }
  250. }
  251. /// <summary>
  252. /// 读几何分析数据
  253. /// </summary>
  254. /// <param name="agrsOut"></param>
  255. /// <param name="whichfile"></param>
  256. private void readJHFX(MWArray[] agrsOut, T_file_account whichfile)
  257. {
  258. MWCellArray output1 = agrsOut[0] as MWCellArray;//第1个输出参数
  259. MWNumericArray output2 = agrsOut[1] as MWNumericArray;//第2个输出参数
  260. MWArray output3 = agrsOut[2] as MWArray;//第3个输出参数
  261. MWCellArray output4 = agrsOut[3] as MWCellArray;//第4个输出参数
  262. MWCellArray output5 = agrsOut[4] as MWCellArray;//第5个输出参数
  263. MWNumericArray output6 = agrsOut[5] as MWNumericArray;//第6个输出参数
  264. MWCellArray output7 = agrsOut[6] as MWCellArray;//第7个输出参数
  265. MWCellArray output10 = agrsOut[7] as MWCellArray;//第7个输出参数
  266. MWCellArray output11 = agrsOut[8] as MWCellArray;//第7个输出参数
  267. MWNumericArray output8 = agrsOut[9] as MWNumericArray;//第8个输出参数
  268. MWNumericArray output9 = agrsOut[10] as MWNumericArray;//第9个输出参数
  269. MWNumericArray output12 = agrsOut[11] as MWNumericArray;//第12个输出参数
  270. var table_header = output1.ToArray();
  271. var table_data = (double[,])output2.ToArray();
  272. var table_zc = (object[,])output3.ToArray();
  273. var table_date = (object[,])output4.ToArray();
  274. var table_zf = (object[,])output5.ToArray();
  275. var table_tqi = (double[,])output6.ToArray();
  276. var table_car = (object[,])output7.ToArray();
  277. var table_name = (object[,])output10.ToArray();
  278. var table_xb = (object[,])output11.ToArray();
  279. var wave_id = (double[,])output8.ToArray();
  280. var wave_sw = (double[,])output9.ToArray();
  281. var wave_loc = (double[,])output12.ToArray();
  282. List<T_jihefenxi_account> JHobjs = new List<T_jihefenxi_account>();
  283. DataAnalysisToPG.InsertGetIdMAX(new T_jihefenxi_boxing() { Yswjm = "?????" });
  284. int idindex = DataAnalysisToPG.QueryMaxID("jh") + 1;
  285. #region 录入T_jihefenxi_account
  286. for (int i = 0; i < table_data.GetLength(0); i++)
  287. {
  288. int bxidq = (int)wave_id[i, 0];
  289. int bxidz = (int)wave_id[i, 1];
  290. int bxindex = bxidz - bxidq;
  291. T_jihefenxi_account jhojb = new T_jihefenxi_account();
  292. jhojb.Xuhao = table_data[i, 0].ToString();
  293. jhojb.Jgjlc = Convert.ToDecimal(table_data[i, 1]);
  294. jhojb.Sudu_jhfx = Convert.ToDecimal(table_data[i, 2]);
  295. jhojb.Cthjfz = Convert.ToDecimal(table_data[i, 3]);
  296. jhojb.Cthjffz = Convert.ToDecimal(table_data[i, 4]);
  297. jhojb.Ctcjfz = Convert.ToDecimal(table_data[i, 5]);
  298. jhojb.Ctcjffz = Convert.ToDecimal(table_data[i, 6]);
  299. jhojb.Zgjfz = Convert.ToDecimal(table_data[i, 7]);
  300. jhojb.Zgjffz_jhfx = Convert.ToDecimal(table_data[i, 8]);
  301. jhojb.Ygjfz = Convert.ToDecimal(table_data[i, 9]);
  302. jhojb.Ygjffz = Convert.ToDecimal(table_data[i, 10]);
  303. jhojb.Zgdfz = Convert.ToDecimal(table_data[i, 11]);
  304. jhojb.Ygdfz = Convert.ToDecimal(table_data[i, 12]);
  305. jhojb.Zgxfz = Convert.ToDecimal(table_data[i, 13]);
  306. jhojb.Ygxfz = Convert.ToDecimal(table_data[i, 14]);
  307. jhojb.Spfz = Convert.ToDecimal(table_data[i, 15]);
  308. jhojb.Sjkfz = Convert.ToDecimal(table_data[i, 16]);
  309. jhojb.Cbzgdfz = Convert.ToDecimal(table_data[i, 17]);
  310. jhojb.Cbygdfz = Convert.ToDecimal(table_data[i, 18]);
  311. jhojb.Cbzgxfz = Convert.ToDecimal(table_data[i, 19]);
  312. jhojb.Cbygxfz = Convert.ToDecimal(table_data[i, 20]);
  313. jhojb.Zcx = Char2String((char[,])table_zc[i, 0]);
  314. jhojb.Riqi = Char2String((char[,])table_date[i, 0]);
  315. jhojb.Zfx = Char2String((char[,])table_zf[i, 0]);
  316. jhojb.Dcqtqi = Convert.ToDecimal(table_tqi[i, 0]);
  317. jhojb.Jcc = Char2String((char[,])table_car[i, 0]);
  318. jhojb.Filename_jh = whichfile.Id.ToString();
  319. jhojb.Boxingid_jhfx = wave_id[i, 0].ToString() + "," + wave_id[i, 1].ToString();
  320. jhojb.Jgjcydxh = Convert.ToDecimal(wave_loc[i, 0]);
  321. jhojb.Xgjcydxh = Convert.ToDecimal(wave_loc[i, 1]);
  322. jhojb.Xlm = whichfile.Xlm;
  323. //jhojb.Xlm = Char2String((char[,])table_name[i, 0]);
  324. jhojb.Yswjm_jhfx = idindex.ToString() + "," + (idindex + bxindex).ToString();
  325. jhojb.Xingbie = whichfile.Hangbie;
  326. //jhojb.Xingbie = Char2String((char[,])table_xb[i, 0]);
  327. jhojb.Gjhy = Math.Abs(jhojb.Zgjfz) > Math.Abs(jhojb.Ygjfz) ? jhojb.Zgjfz : jhojb.Ygjfz;
  328. jhojb.Gjhyffz = Math.Abs(jhojb.Zgjffz_jhfx) > Math.Abs(jhojb.Ygjffz) ? jhojb.Zgjffz_jhfx : jhojb.Ygjffz;
  329. jhojb.Gdfz = Math.Abs(jhojb.Zgdfz) > Math.Abs(jhojb.Ygdfz) ? jhojb.Zgdfz : jhojb.Ygdfz;
  330. jhojb.Gxfz = Math.Abs(jhojb.Zgxfz) > Math.Abs(jhojb.Ygxfz) ? jhojb.Zgxfz : jhojb.Ygxfz;
  331. jhojb.Cbgdfz = Math.Abs(jhojb.Cbzgdfz) > Math.Abs(jhojb.Cbygdfz) ? jhojb.Cbzgdfz : jhojb.Cbygdfz;
  332. jhojb.Cbgxfz = Math.Abs(jhojb.Cbzgxfz) > Math.Abs(jhojb.Cbygxfz) ? jhojb.Cbzgxfz : jhojb.Cbygxfz;
  333. JHobjs.Add(jhojb);
  334. idindex += bxindex + 1;
  335. }
  336. DataAnalysisToPG.InsertJHDataToPG(JHobjs);
  337. #endregion
  338. #region 录入波形
  339. List<T_jihefenxi_boxing> Bolist = new List<T_jihefenxi_boxing>();
  340. for (int i = 0; i < wave_sw.GetLength(0); i++)
  341. {
  342. T_jihefenxi_boxing bolist = new T_jihefenxi_boxing();
  343. bolist.Licheng = Convert.ToDecimal(wave_sw[i, 0]);
  344. bolist.Sudu_jhbx = Convert.ToDecimal(wave_sw[i, 1]);
  345. bolist.Cthj = Convert.ToDecimal(wave_sw[i, 2]);
  346. bolist.Ctcj = Convert.ToDecimal(wave_sw[i, 3]);
  347. bolist.Gjzhy = Convert.ToDecimal(wave_sw[i, 4]);
  348. bolist.Gjyhy = Convert.ToDecimal(wave_sw[i, 5]);
  349. bolist.Zgd = Convert.ToDecimal(wave_sw[i, 6]);
  350. bolist.Ygd = Convert.ToDecimal(wave_sw[i, 7]);
  351. bolist.Zgx = Convert.ToDecimal(wave_sw[i, 8]);
  352. bolist.Ygx = Convert.ToDecimal(wave_sw[i, 9]);
  353. bolist.Gj = Convert.ToDecimal(wave_sw[i, 10]);
  354. bolist.Sp = Convert.ToDecimal(wave_sw[i, 11]);
  355. bolist.Sjk = Convert.ToDecimal(wave_sw[i, 12]);
  356. bolist.Cbzgd = Convert.ToDecimal(wave_sw[i, 13]);
  357. bolist.Cbygd = Convert.ToDecimal(wave_sw[i, 14]);
  358. bolist.Cbzgx = Convert.ToDecimal(wave_sw[i, 15]);
  359. bolist.Cbygx = Convert.ToDecimal(wave_sw[i, 16]);
  360. bolist.Dcdw = Convert.ToDecimal(wave_sw[i, 17]);
  361. bolist.Bxid = i + 1;
  362. Bolist.Add(bolist);
  363. }
  364. DataAnalysisToPG.InsertJHBXDataToPG(Bolist);
  365. DataAnalysisToPG.updataRWZT(new string[] { whichfile.Id.ToString(), type + "算法执行完毕" });
  366. #endregion
  367. }
  368. #endregion
  369. #region 轮轨力算法
  370. public void LGL_new(T_file_account whichfile)
  371. {
  372. List<T_daocha_account> daochabiao = (List<T_daocha_account>)DataAnalysisToPG.QueryDCTZ(whichfile.Xlm, whichfile.Yswjm.Split('_')[2].Split('.')[0].ToCharArray());
  373. List<T_quxian_account> quxianbiao = (List<T_quxian_account>)DataAnalysisToPG.QueryQXTZ(whichfile.Xlm, whichfile.Yswjm.Split('_')[2].Split('.')[0].ToCharArray());
  374. string fname_dir0 = Path.GetDirectoryName(whichfile.Srlj) + "\\";
  375. string fname0 = Path.GetFileName(whichfile.Srlj);
  376. string line_name = fname0.Split('_')[2].Split('.')[0];
  377. T_xianlulicheng_sf sf = (T_xianlulicheng_sf)DataAnalysisToPG.QueryToString(line_name);
  378. double mile_min = Convert.ToDouble(sf.Qslc);
  379. double mile_max = Convert.ToDouble(sf.Zzlc);
  380. double[] tz_curv = getTZQX(quxianbiao, false);
  381. double[] tz_turnout = getTZDC(daochabiao);
  382. double[] distance_table = getTZJGJX();
  383. string carname = whichfile.Jccxx;
  384. try
  385. {
  386. var data = AnalysisAlgorithmcs.LGLFX(fname_dir0, fname0, line_name, mile_min, mile_max, tz_curv, tz_turnout, distance_table, carname);
  387. readLGLFX(data, whichfile);
  388. }
  389. catch (Exception ex)
  390. {
  391. if (quxianbiao.Count == 0)
  392. {
  393. XtraMessageBox.Show("曲线表缺少数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  394. }
  395. else if (daochabiao.Count == 0)
  396. {
  397. XtraMessageBox.Show("道岔表缺少数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  398. }
  399. else
  400. {
  401. XtraMessageBox.Show("文件:" + whichfile.Yswjm + "执行失败!" + ex.Message, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
  402. }
  403. throw;
  404. }
  405. }
  406. /// <summary>
  407. /// 读轮轨力分析数据
  408. /// </summary>
  409. /// <param name="agrsOut"></param>
  410. /// <param name="whichfile"></param>
  411. private void readLGLFX(MWArray[] agrsOut, T_file_account whichfile)
  412. {
  413. MWCellArray output1 = agrsOut[0] as MWCellArray;//第1个输出参数
  414. MWNumericArray output2 = agrsOut[1] as MWNumericArray;//第2个输出参数
  415. MWNumericArray output3 = agrsOut[6] as MWNumericArray;//第3个输出参数
  416. MWNumericArray output4 = agrsOut[7] as MWNumericArray;//第4个输出参数
  417. MWCellArray output5 = agrsOut[2] as MWCellArray;//第3个输出参数
  418. MWCellArray output6 = agrsOut[4] as MWCellArray;//第4个输出参数
  419. MWCellArray output7 = agrsOut[5] as MWCellArray;//第4个输出参数
  420. MWCellArray output8 = agrsOut[3] as MWCellArray;//第4个输出参数
  421. var table_header = (object[,])output1.ToArray();
  422. var table_data = (double[,])output2.ToArray();
  423. var table_name = (object[,])output5.ToArray();
  424. var table_xb = (object[,])output6.ToArray();
  425. var table_date = (object[,])output7.ToArray();
  426. var wave_sw = (double[,])output4.ToArray();
  427. var boxingid = (double[,])output3.ToArray();
  428. var table_car = (object[,])output8.ToArray();
  429. List<T_lunguili_account> JHobjs = new List<T_lunguili_account>();
  430. DataAnalysisToPG.InsertGetIdMAX(new T_lunguili_boxing() { Yswjm = "?????" });
  431. int idindex = DataAnalysisToPG.QueryMaxID("lgl") + 1;
  432. for (int i = 0; i < table_data.GetLength(0); i++)
  433. {
  434. int bxidq = (int)boxingid[i, 0];
  435. int bxidz = (int)boxingid[i, 1];
  436. int bxindex = bxidz - bxidq;
  437. T_lunguili_account jhojb = new T_lunguili_account();
  438. jhojb.Xuhao = table_data[i, 0].ToString();
  439. jhojb.Jgjlc = Convert.ToDecimal(table_data[i, 1]);
  440. jhojb.Sudu_lgl = Convert.ToDecimal(table_data[i, 2]);
  441. jhojb.Zzcfz = Convert.ToDecimal(table_data[i, 3]);
  442. jhojb.Zzhfz = Convert.ToDecimal(table_data[i, 4]);
  443. jhojb.Yzcfz = Convert.ToDecimal(table_data[i, 5]);
  444. jhojb.Yzhfz = Convert.ToDecimal(table_data[i, 6]);
  445. jhojb.Lzlfz = Convert.ToDecimal(table_data[i, 7]);
  446. jhojb.Lzjzl = Convert.ToDecimal(table_data[i, 8]);
  447. jhojb.Ztgxs = Convert.ToDecimal(table_data[i, 9]);
  448. jhojb.Ytgxs = Convert.ToDecimal(table_data[i, 10]);
  449. jhojb.Filename_lgl = whichfile.Id.ToString();
  450. jhojb.Boxingid_lgl = bxidq.ToString() + "," + bxidz.ToString();
  451. //jhojb.Xlm = Char2String((char[,])table_name[i, 0]);
  452. jhojb.Xlm = whichfile.Xlm;
  453. //jhojb.Xingbie = Char2String((char[,])table_xb[i, 0]);
  454. jhojb.Xingbie = whichfile.Hangbie;
  455. jhojb.Yswjm = idindex.ToString() + "," + (idindex + bxindex).ToString();
  456. jhojb.Jcrq = Char2String((char[,])table_date[i, 0]);
  457. jhojb.Lgcxl = Math.Abs(jhojb.Zzcfz) > Math.Abs(jhojb.Yzcfz) ? jhojb.Zzcfz : jhojb.Yzcfz;
  458. jhojb.Lghxl = Math.Abs(jhojb.Zzhfz) > Math.Abs(jhojb.Yzhfz) ? jhojb.Zzhfz : jhojb.Yzhfz;
  459. jhojb.Tgxs = jhojb.Ztgxs > jhojb.Ytgxs ? jhojb.Ztgxs : jhojb.Ytgxs;
  460. JHobjs.Add(jhojb);
  461. idindex += bxindex + 1;
  462. }
  463. DataAnalysisToPG.InsertLGLDataToPG(JHobjs);
  464. #region 录入波形
  465. List<T_lunguili_boxing> Bolist = new List<T_lunguili_boxing>();
  466. for (int i = 0; i < wave_sw.GetLength(0); i++)
  467. {
  468. T_lunguili_boxing bolist = new T_lunguili_boxing();
  469. bolist.Licheng = Convert.ToDecimal(wave_sw[i, 0]);
  470. bolist.Sudu_lglbx = Convert.ToDecimal(wave_sw[i, 1]);
  471. bolist.Zzc = Convert.ToDecimal(wave_sw[i, 2]);
  472. bolist.Zzh = Convert.ToDecimal(wave_sw[i, 3]);
  473. bolist.Yzc = Convert.ToDecimal(wave_sw[i, 4]);
  474. bolist.Yzh = Convert.ToDecimal(wave_sw[i, 5]);
  475. bolist.Bxid = i + 1;
  476. Bolist.Add(bolist);
  477. }
  478. DataAnalysisToPG.InsertLGLBXDataToPG(Bolist);
  479. DataAnalysisToPG.updataRWZT(new string[] { whichfile.Id.ToString(), type + "算法执行完毕" });
  480. #endregion
  481. }
  482. #endregion
  483. #region 微小算法
  484. /// <summary>
  485. /// 微小算法
  486. /// </summary>
  487. /// <param name="whichfile"></param>
  488. public void WXSFFun(List<T_file_account> whichfile)
  489. {
  490. //1.采集数据
  491. List<T_jihefenxi_account> jhfe_account = new List<T_jihefenxi_account>();
  492. for (int i = 0; i < whichfile.Count; i++)
  493. {
  494. var aa = DataAnalysisToPG.QueryToPGByNameWXSF(whichfile[i].Id.ToString()) as List<T_jihefenxi_account>;
  495. jhfe_account = jhfe_account.Union(aa).ToList();
  496. }
  497. //2.添加参考数据
  498. addWXSFReference(ref jhfe_account);
  499. //3.构造参数及执行微小算法
  500. string[] date = new string[jhfe_account.Count];
  501. string[] car = new string[jhfe_account.Count];
  502. double[] mile = new double[jhfe_account.Count];
  503. List<double> wave_data = new List<double>();
  504. List<double> id_wave_all = new List<double>();
  505. List<double> jx_loc_all = new List<double>();
  506. string[] line = new string[jhfe_account.Count];
  507. double[] velo = new double[jhfe_account.Count];
  508. string[] zc = new string[jhfe_account.Count];
  509. getdataWXSF(jhfe_account, ref date, ref car, ref mile, ref wave_data, ref id_wave_all, ref jx_loc_all, ref line, ref velo, ref zc);
  510. try
  511. {//存在问题,wave_data
  512. if (date.Distinct().ToArray().Length > 1)
  513. {
  514. var data = AnalysisAlgorithmcs.WXSF(date, car, mile, wave_data.ToArray(), id_wave_all.ToArray(), jx_loc_all.ToArray(), line, velo, zc);
  515. readWXSF(data, jhfe_account);
  516. for (int i = 0; i < whichfile.Count; i++)
  517. {
  518. DataAnalysisToPG.updataRWZT(new string[] { whichfile[i].Id.ToString(), type + "算法执行完毕" });
  519. }
  520. }
  521. else
  522. {
  523. XtraMessageBox.Show("日期相同,不能执行微小算法", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  524. }
  525. }
  526. catch (Exception ex)
  527. {
  528. throw;
  529. }
  530. }
  531. //读取微小算法分析数据
  532. private void readWXSF(MWArray[] agrsOut, List<T_jihefenxi_account> jhfe_account)
  533. {
  534. List<T_jihefenxi_account> GeoJHReturn = new List<T_jihefenxi_account>();
  535. MWCellArray output1 = agrsOut[0] as MWCellArray;//第1个输出参数
  536. MWCellArray output2 = agrsOut[1] as MWCellArray;//第2个输出参数
  537. MWCellArray output3 = agrsOut[2] as MWCellArray;//第3个输出参数
  538. MWNumericArray output4 = agrsOut[3] as MWNumericArray;//第4个输出参数
  539. MWNumericArray output5 = agrsOut[4] as MWNumericArray;//第5个输出参数
  540. MWCellArray output6 = agrsOut[5] as MWCellArray;//第6个输出参数
  541. MWCellArray output7 = agrsOut[6] as MWCellArray;//第7个输出参数
  542. MWNumericArray output8 = agrsOut[7] as MWNumericArray;//第8个输出参数
  543. MWNumericArray output9 = agrsOut[8] as MWNumericArray;//第9个输出参数
  544. MWNumericArray output10 = agrsOut[9] as MWNumericArray;//第10个输出参数
  545. MWCellArray output11 = agrsOut[10] as MWCellArray;//第11个输出参数
  546. var table_header = (object[,])output1.ToArray();
  547. var tableline = (object[,])output2.ToArray();
  548. var table_xb = (object[,])output3.ToArray();
  549. var table_milej = (double[,])output4.ToArray();
  550. var table_milex = (double[,])output5.ToArray();
  551. var table_date = (object[,])output6.ToArray();
  552. var table_car = (object[,])output7.ToArray();
  553. var table_data = (double[,])output8.ToArray();
  554. var wave_id = (double[,])output9.ToArray();
  555. var wave_sw = (double[,])output10.ToArray();
  556. var table_check = (object[,])output11.ToArray();
  557. List<T_jihefenxi_account> JHWXobjs = new List<T_jihefenxi_account>();
  558. #region 录入T_jihefenxi_account
  559. for (int i = 0; i < table_data.GetLength(0); i++)
  560. {
  561. T_jihefenxi_account jhwxojb = new T_jihefenxi_account();
  562. jhwxojb.Xlm = (DataAnalysisToPG.QueryToXlm(Char2String((char[,])tableline[i, 0])) as T_luxianming_sf).Xlm;
  563. if (Char2String((char[,])table_xb[i, 0]) == "X")
  564. {
  565. jhwxojb.Xingbie = "下";
  566. }
  567. else if (Char2String((char[,])table_xb[i, 0]) == "S")
  568. {
  569. jhwxojb.Xingbie = "上";
  570. }
  571. else
  572. {
  573. //待定
  574. jhwxojb.Xingbie = "上";
  575. }
  576. jhwxojb.Jgjlc = Convert.ToDecimal(table_milej[i, 0]);
  577. jhwxojb.Jcc = Char2String((char[,])table_car[i, 0]) == "轨检车" ? "轨检车" : GetJccFun(Char2String((char[,])table_car[i, 0]));
  578. jhwxojb.Riqi = DateTime.Parse(Char2String((char[,])table_date[i, 0])).ToString("yyyy年MM月dd日");
  579. jhwxojb.Boxingid_jhfx = wave_id[i, 0].ToString() + "," + wave_id[i, 1].ToString();
  580. //心轨尖里程
  581. jhwxojb.Wx_xgjlc = Convert.ToDecimal(table_milex[i, 0]);
  582. //轨道几何变化量
  583. jhwxojb.Wx_bhl_gd = Convert.ToDecimal(table_data[i, 0]);
  584. jhwxojb.Wx_bhl_gx = Convert.ToDecimal(table_data[i, 1]);
  585. jhwxojb.Wx_bhl_sp = Convert.ToDecimal(table_data[i, 2]);
  586. jhwxojb.Wx_bhl_sjk = Convert.ToDecimal(table_data[i, 3]);
  587. jhwxojb.Wx_bhl_gj = Convert.ToDecimal(table_data[i, 4]);
  588. jhwxojb.Wx_check = Char2String((char[,])table_check[i, 0]);
  589. JHWXobjs.Add(jhwxojb);
  590. }
  591. DataAnalysisToPG.UpdataJHDataToPG(JHWXobjs);
  592. #endregion
  593. #region 更新波形
  594. //记录成功运算的数据
  595. foreach (var it in jhfe_account)
  596. {
  597. foreach (var item in JHWXobjs)
  598. {
  599. if (it.Xlm == item.Xlm && it.Xingbie == item.Xingbie && it.Jgjlc == item.Jgjlc
  600. && it.Jcc == item.Jcc && it.Riqi == item.Riqi)
  601. {
  602. it.Boxingid_jhfx = item.Boxingid_jhfx;
  603. GeoJHReturn.Add(it);
  604. break;
  605. }
  606. }
  607. }
  608. //使用线路名、行别、尖轨尖里程匹配得到的波形数据,去更新范围、id
  609. for (int k = 0; k < GeoJHReturn.Count; k++)
  610. {
  611. string[] bxxuhaostring = GeoJHReturn[k].Boxingid_jhfx.Split(',');
  612. int[] bxxuhaos = new int[] { Convert.ToInt32(bxxuhaostring[0]), Convert.ToInt32(bxxuhaostring[1]) };
  613. string[] bxidsstring = GeoJHReturn[k].Yswjm_jhfx.Split(',');
  614. int[] bxids = new int[] { Convert.ToInt32(bxidsstring[0]), Convert.ToInt32(bxidsstring[1]) };
  615. int id = bxids[0];
  616. List<T_jihefenxi_boxing> Bolist = new List<T_jihefenxi_boxing>();
  617. for (int i = bxxuhaos[0] - 1; i < bxxuhaos[1]; i++)
  618. {
  619. T_jihefenxi_boxing bolist = new T_jihefenxi_boxing();
  620. bolist.Licheng = Convert.ToDecimal(wave_sw[i, 0]);
  621. bolist.Sudu_jhbx = Convert.ToDecimal(wave_sw[i, 1]);
  622. bolist.Cthj = Convert.ToDecimal(wave_sw[i, 2]);
  623. bolist.Ctcj = Convert.ToDecimal(wave_sw[i, 3]);
  624. bolist.Gjzhy = Convert.ToDecimal(wave_sw[i, 4]);
  625. bolist.Gjyhy = Convert.ToDecimal(wave_sw[i, 5]);
  626. bolist.Zgd = Convert.ToDecimal(wave_sw[i, 6]);
  627. bolist.Ygd = Convert.ToDecimal(wave_sw[i, 7]);
  628. bolist.Zgx = Convert.ToDecimal(wave_sw[i, 8]);
  629. bolist.Ygx = Convert.ToDecimal(wave_sw[i, 9]);
  630. bolist.Gj = Convert.ToDecimal(wave_sw[i, 10]);
  631. bolist.Sp = Convert.ToDecimal(wave_sw[i, 11]);
  632. bolist.Sjk = Convert.ToDecimal(wave_sw[i, 12]);
  633. bolist.Cbzgd = Convert.ToDecimal(wave_sw[i, 13]);
  634. bolist.Cbygd = Convert.ToDecimal(wave_sw[i, 14]);
  635. bolist.Cbzgx = Convert.ToDecimal(wave_sw[i, 15]);
  636. bolist.Cbygx = Convert.ToDecimal(wave_sw[i, 16]);
  637. bolist.Dcdw = Convert.ToDecimal(wave_sw[i, 17]);
  638. bolist.Id = bxids[0];
  639. bolist.Bxid = i + 1;
  640. bolist.Id = id;
  641. bolist.Yswjm = "微小算法执行了";
  642. id++;
  643. Bolist.Add(bolist);
  644. }
  645. DataAnalysisToPG.UpdataJHBXDataToPG(Bolist);
  646. }
  647. #endregion
  648. }
  649. /// <summary>
  650. /// 添加每条道岔之前最新一次微小算法执行结果(添加参考数据)
  651. /// </summary>
  652. public static void addWXSFReference(ref List<T_jihefenxi_account> jhfe_account)
  653. {
  654. try
  655. {
  656. //按照线路名、行别、尖轨尖里程匹配最新一次执行的数据
  657. // 1.去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程
  658. List<T_jihefenxi_account> quchong = WXSFquchong(jhfe_account);
  659. // 2.查数据(条件:线路名、行别、尖轨尖里程、未执行微小算法wx_isload = 1)
  660. List<List<T_jihefenxi_account>> datalist = DataAnalysisToPG.QueryToPGByNameWXSFZDReference(quchong);
  661. // 3.date比大小,保留每条线路名、行别、尖轨尖里程匹配的最新参考数据
  662. List<T_jihefenxi_account> cankao = dateCompare(datalist);
  663. for (int i = 0; i < cankao.Count; i++)
  664. {
  665. jhfe_account.Add(cankao[i]);
  666. }
  667. }
  668. catch (Exception ex)
  669. {
  670. throw;
  671. }
  672. }
  673. /// <summary>
  674. /// 去重,获取未执行微小算法的数据的线路名、行别、尖轨尖里程
  675. /// </summary>
  676. /// <param name="datalist"></param>
  677. /// <returns></returns>
  678. public static List<T_jihefenxi_account> WXSFquchong(List<T_jihefenxi_account> datalist)
  679. {
  680. List<T_jihefenxi_account> cankaolist = new List<T_jihefenxi_account>();
  681. foreach (var item in datalist)
  682. {
  683. cankaolist.Add(new T_jihefenxi_account()
  684. {
  685. Xlm = item.Xlm,
  686. Xingbie = item.Xingbie,
  687. Jgjlc = item.Jgjlc,
  688. Riqi = item.Riqi,
  689. Jcc = item.Jcc
  690. });
  691. }
  692. cankaolist = cankaolist.Distinct().ToList();
  693. return cankaolist;
  694. }
  695. /// <summary>
  696. /// date比大小,可以理解为去重
  697. /// </summary>
  698. public static List<T_jihefenxi_account> dateCompare(List<List<T_jihefenxi_account>> datalist)
  699. {
  700. List<T_jihefenxi_account> cankaolist = new List<T_jihefenxi_account>();
  701. foreach (var item in datalist)
  702. {
  703. T_jihefenxi_account cancan = new T_jihefenxi_account();
  704. cancan.Riqi = "1800年1月1日";
  705. foreach (var it in item)
  706. {
  707. var date1 = DateTime.Parse(cancan.Riqi);
  708. var date2 = DateTime.Parse(it.Riqi);
  709. if (DateTime.Compare(date1, date2) < 0)
  710. {
  711. cancan = it;
  712. }
  713. }
  714. cankaolist.Add(cancan);
  715. }
  716. return cankaolist; //大概看一下
  717. }
  718. /// <summary>
  719. /// 查询检测车
  720. /// </summary>
  721. /// <returns></returns>
  722. public string GetJccFun(string str)
  723. {
  724. foreach (var item in DACommon.jccList)
  725. {
  726. if (item.Split('-')[1] == str)
  727. {
  728. return item;
  729. }
  730. }
  731. return "轨检车";
  732. }
  733. #endregion
  734. private void getdataWXSF(List<T_jihefenxi_account> jhfe_account, ref string[] date, ref string[] car, ref double[] mile, ref List<double> wave_data, ref List<double> id_wave_all, ref List<double> jx_loc_all, ref string[] line, ref double[] velo, ref string[] zc)
  735. {
  736. int bxindex = 0;
  737. for (int i = 0; i < jhfe_account.Count; i++)
  738. {
  739. date[i] = jhfe_account[i].Riqi;
  740. car[i] = jhfe_account[i].Jcc== "轨检车" ? "轨检车" : jhfe_account[i].Jcc.Split('-')[1];
  741. mile[i] = Convert.ToDouble(jhfe_account[i].Jgjlc);
  742. jx_loc_all.Add(Convert.ToDouble(jhfe_account[i].Jgjcydxh));
  743. jx_loc_all.Add(Convert.ToDouble(jhfe_account[i].Xgjcydxh));
  744. line[i] = ((T_file_account)DataAnalysisToPG.QueryToPGById(Convert.ToInt32(jhfe_account[i].Filename_jh.Trim()))).Yswjm.Split('-')[0];
  745. velo[i] = Convert.ToDouble(jhfe_account[i].Sudu_jhfx);
  746. zc[i] = jhfe_account[i].Zcx;
  747. getWXSFBXdata(jhfe_account[i].Yswjm_jhfx, ref bxindex, ref wave_data, ref id_wave_all);
  748. }
  749. }
  750. private void getWXSFBXdata(string ids, ref int index, ref List<double> wave_data, ref List<double> id_wave_all)
  751. {
  752. List<T_jihefenxi_boxing> bolist = DMControl.GetJHFX_BXDataByIDS(ids);
  753. index = index + 1;
  754. id_wave_all.Add(index);
  755. for (int i = 0; i < bolist.Count; i++)
  756. {
  757. wave_data.Add((double)(bolist[i].Licheng));
  758. wave_data.Add((double)(bolist[i].Sudu_jhbx));
  759. wave_data.Add((double)(bolist[i].Cthj));
  760. wave_data.Add((double)(bolist[i].Ctcj));
  761. wave_data.Add((double)(bolist[i].Gjzhy));
  762. wave_data.Add((double)(bolist[i].Gjyhy));
  763. wave_data.Add((double)(bolist[i].Zgd));
  764. wave_data.Add((double)(bolist[i].Ygd));
  765. wave_data.Add((double)(bolist[i].Zgx));
  766. wave_data.Add((double)(bolist[i].Ygx));
  767. wave_data.Add((double)(bolist[i].Gj));
  768. wave_data.Add((double)(bolist[i].Sp));
  769. wave_data.Add((double)(bolist[i].Sjk));
  770. wave_data.Add((double)(bolist[i].Cbzgd));
  771. wave_data.Add((double)(bolist[i].Cbygd));
  772. wave_data.Add((double)(bolist[i].Cbzgx));
  773. wave_data.Add((double)(bolist[i].Cbygx));
  774. wave_data.Add((double)(bolist[i].Dcdw));
  775. }
  776. index += bolist.Count - 1;
  777. id_wave_all.Add(index);
  778. }
  779. /// <summary>
  780. /// 从数据库获取对应符合要求的道岔台账信息
  781. /// </summary>
  782. private double[] getTZDC(List<T_daocha_account> taizhang)
  783. {
  784. //StreamWriter FileWriter = new StreamWriter("E://get2pgTZ.txt", true); //写文件
  785. string txtDetail = "";
  786. //StreamWriter sr = new StreamWriter("E://DDD.txt");
  787. List<double> result = new List<double>();
  788. for (int i = 0; i < taizhang.Count; i++)
  789. {
  790. result.Add(Convert.ToDouble(taizhang[i].Jgjlc));
  791. result.Add(Convert.ToDouble(taizhang[i].Zch));
  792. result.Add(Convert.ToDouble(taizhang[i].Quanchang));
  793. txtDetail += taizhang[i].Jgjlc + "\t" + taizhang[i].Zch + "\t" + taizhang[i].Quanchang + "\n";
  794. }
  795. //FileWriter.Write(txtDetail);//将字符串写入
  796. //FileWriter.Close(); //关闭StreamWriter对象k
  797. //******构造二维数组******
  798. double[] ret = new double[result.Count];
  799. for (int i = 0; i < result.Count; i++)
  800. {
  801. ret[i] = result[i];
  802. }
  803. return ret;
  804. }
  805. /// <summary>
  806. /// 从数据库获取对应符合要求的曲线台账信息
  807. /// </summary>
  808. private double[] getTZQX(List<T_quxian_account> taizhang, bool isjh)
  809. {
  810. List<double> result = new List<double>();
  811. for (int i = 0; i < taizhang.Count; i++)
  812. {
  813. result.Add(Convert.ToDouble(taizhang[i].Qzlc));
  814. result.Add(Convert.ToDouble(taizhang[i].Jslc));
  815. if (taizhang[i].Qxfx.Trim() == "左")
  816. {
  817. result.Add(1);
  818. }
  819. else
  820. {
  821. result.Add(-1);
  822. }
  823. if (isjh)
  824. {
  825. result.Add(Convert.ToDouble(taizhang[i].Chaogao));
  826. }
  827. else
  828. {
  829. result.Add(Convert.ToDouble(taizhang[i].Qxbj));
  830. }
  831. result.Add(Convert.ToDouble(taizhang[i].Qhhxc));
  832. result.Add(Convert.ToDouble(taizhang[i].Zhhxc));
  833. }
  834. //******构造二维数组******
  835. double[] ret = new double[result.Count];
  836. for (int i = 0; i < result.Count; i++)
  837. {
  838. ret[i] = result[i];
  839. }
  840. return ret;
  841. }
  842. /// <summary>
  843. /// 从数据库获取对应符合要求的曲线台账信息
  844. /// </summary>
  845. private double[] getTZJGJX()
  846. {
  847. List<T_jgjdistance_table> tabledata = new List<T_jgjdistance_table>();
  848. List<T_jgjdistance_table> tablelist = DataAnalysisToPG.QueryJGJXGJJ();
  849. List<T_jgjdistance_table> GS = tablelist.Where(i => i.Sudutype == 0).ToList();
  850. List<T_jgjdistance_table> DS = tablelist.Where(i => i.Sudutype == 1).ToList();
  851. if (DACommon.gdsBool == 0)
  852. {
  853. tabledata = GS;
  854. }
  855. else if (DACommon.gdsBool == 1)
  856. {
  857. tabledata = DS;
  858. }
  859. else
  860. {
  861. tabledata = tablelist;
  862. }
  863. List<double> result = new List<double>();
  864. for (int i = 0; i < tabledata.Count; i++)
  865. {
  866. result.Add(Convert.ToDouble(tabledata[i].Zch));
  867. result.Add(Convert.ToDouble(tabledata[i].Dcqc));
  868. result.Add(Convert.ToDouble(tabledata[i].Gdjxgjj));
  869. }
  870. //******构造二维数组******
  871. double[] ret = new double[result.Count];
  872. for (int i = 0; i < result.Count; i++)
  873. {
  874. ret[i] = result[i];
  875. }
  876. return ret;
  877. }
  878. private double[] getTZXX1(List<T_daocha_account> taizhang)
  879. {
  880. List<double> result = new List<double>();
  881. for (int i = 0; i < taizhang.Count; i++)
  882. {
  883. result.Add(Convert.ToDouble(taizhang[i].Jgjlc));
  884. }
  885. //******构造二维数组******
  886. double[] ret = new double[result.Count];
  887. for (int i = 0; i < result.Count; i++)
  888. {
  889. ret[i] = result[i];
  890. }
  891. return ret;
  892. }
  893. /// <summary>
  894. /// 几何读台账txt
  895. /// </summary>
  896. private double[] readtxt(string txtPath)
  897. {
  898. List<double> result = new List<double>();
  899. StreamReader SR = new StreamReader(txtPath);
  900. while (!SR.EndOfStream)
  901. {
  902. string[] str = SR.ReadLine().Replace("\t", " ").Split(' ');
  903. for (int i = 0; i < str.Length; i++)
  904. {
  905. result.Add(Convert.ToDouble(str[i]));
  906. }
  907. }
  908. //******构造二维数组******
  909. double[] ret = new double[result.Count];
  910. for (int i = 0; i < result.Count; i++)
  911. {
  912. ret[i] = result[i];
  913. }
  914. return ret;
  915. }
  916. /// <summary>
  917. /// 轮轨力读台账txt获取尖轨尖里程
  918. /// </summary>
  919. private double[] readtxt2(string txtPath)
  920. {
  921. List<double> result = new List<double>();
  922. StreamReader SR = new StreamReader(txtPath);
  923. while (!SR.EndOfStream)
  924. {
  925. string[] str = SR.ReadLine().Replace("\t", " ").Split(' ');
  926. result.Add(Convert.ToDouble(str[0]));
  927. }
  928. //******构造二维数组******
  929. double[] ret = new double[result.Count];
  930. for (int i = 0; i < result.Count; i++)
  931. {
  932. ret[i] = result[i];
  933. }
  934. return ret;
  935. }
  936. /// <summary>
  937. /// char[]转string
  938. /// </summary>
  939. private string Char2String(char[,] chararr)
  940. {
  941. string arr = "";
  942. for (int j = 0; j < chararr.GetLength(1); j++)
  943. {
  944. arr += chararr[0, j].ToString();
  945. }
  946. return arr;
  947. }
  948. }
  949. }