//检测 private void btnCheck_Click(object sender, RoutedEventArgs e) { OpenFileDialog openfileDlg = new OpenFileDialog(); openfileDlg.Title = "打开要作为会员树数据源的文件"; openfileDlg.Filter = "CSV文件|*.csv"; if (openfileDlg.ShowDialog() == true) { allCount = 0; errCount = 0; txtErrLines.Text = ""; filepath = openfileDlg.FileName; Encoding encoding = TextUtil.GetFileEncodeType(filepath); StreamReader mysr = new StreamReader(filepath, encoding); filepath = filepath.Replace(".csv", "_1.csv"); StreamWriter mysw = new StreamWriter(filepath, false, Encoding.UTF8); try { SetStatusMessage("开始读取文件......"); string firstLine = mysr.ReadLine(); //第一行是表头,读取之后不处理,直接跳过 if (CheckHead(firstLine)) { mysw.WriteLine(firstLine); while (!mysr.EndOfStream) { string line = mysr.ReadLine(); Line2TreeNode(line, mysw); } if (txtErrLines.Text == "") { btnSave.IsEnabled = false; SetStatusMessage("检查完成,正确数据行数:" + allCount + ",出错数据行数:" + errCount); MessageBox.Show("恭喜,该文件没有错误,可以直接导入计算!"); } else { btnSave.IsEnabled = true; SetStatusMessage("检查完成,正确数据行数:" + allCount + ",出错数据行数:" + errCount + ",错误数据都存储在下面的文本框中。"); MessageBox.Show("该文件出现了多处错误,错误数据都存储在下面的文本框中,请将这些错误人工校准之后重新填回文本框中,点击“修改保存到文件”按钮"); } } } catch (Exception ex) { SetStatusMessage("文件读取出错!+\n" + ex.Message); return; } finally { mysr.Close(); mysw.Close(); } } }
private static void Write2DB(string filepath, string dbName, string separator) { if (treeDB.CreateDB(dbName)) { int row = 0; Encoding encoding = TextUtil.GetFileEncodeType(filepath); StreamReader mysr = new StreamReader(filepath, encoding); treeDB.BeginInsert(); // try // { string line = mysr.ReadLine(); while (!mysr.EndOfStream) { line = mysr.ReadLine(); string[] aryline = line.Split(new String[] { separator }, StringSplitOptions.None); treeDB.InsertNodes(MyTrees.allNodes[aryline[0]], aryline); row++; if (row % 100 == 0) { treeDB.TransCommit(false); WindowAdmin.notify.SetProcessBarValue(row * 100.0 / allNodeCount); WindowAdmin.notify.SetStatusMessage("【第一步:读取数据完成】——>【第二步:构造树结构完成】——>【第三步:正在写入数据库" + row + "/" + allNodeCount + "】"); } } treeDB.TransCommit(true); WindowAdmin.notify.SetStatusMessage("【第一步:读取数据完成】——>【第二步:构造树结构完成】——>【第三步:正在创建数据库索引。。。】"); treeDB.CreateIndex(); WindowAdmin.notify.SetStatusMessage("【第一步:读取数据完成】——>【第二步:构造树结构完成】——>【第三步:正在写入数据概要信息。。。】"); treeDB.CreateProfile(); WindowAdmin.notify.SetProcessBarVisible(false); WindowAdmin.notify.SetStatusMessage("计算完成!"); // } // catch (Exception ex) // { // WindowAdmin.notify.SetProcessBarVisible(false); // WindowAdmin.notify.SetStatusMessage("文件读取出错!+\n" + ex.Message); // } mysr.Close(); } }
private void readSysBcsv(object sender, DoWorkEventArgs e) { sysBids.Clear(); string csvPath = e.Argument.ToString(); Encoding encoding = TextUtil.GetFileEncodeType(csvPath); StreamReader mysr = new StreamReader(csvPath, encoding); int count = 1; try { string line; while (!mysr.EndOfStream) { if (bgworker.CancellationPending) { e.Cancel = true; } else { line = mysr.ReadLine(); if (line != "") { sysBids.Add(line); } bgworker.ReportProgress(count++); } } bgworker.ReportProgress(count, "第一步读取csv数据完成!"); } catch (Exception ex) { bgworker.ReportProgress(count, "第一步出错:" + ex.Message + ex.StackTrace); hasError = true; } finally { mysr.Close(); } }
//读取文件数据并构造树节点 private static bool ReadLine2Node(string filepath, string separator, bool confirm) { Encoding encoding = TextUtil.GetFileEncodeType(filepath); StreamReader mysr = new StreamReader(filepath, encoding); int row = 0; try { WindowAdmin.notify.SetProcessBarVisible(true); WindowAdmin.notify.SetStatusMessage("开始读取文件......"); string firstLine = mysr.ReadLine(); //第一行是表头,读取之后不处理,直接跳过 if (!DBUtil.CheckHead(firstLine, separator, confirm)) //检查表头 { string errMsg = "文件格式不正确,最少必须包含三列,前三列为“会员id,上级会员id,会员姓名”且顺序固定,请重新选择正确的文件!"; MessageBox.Show(errMsg); WindowAdmin.notify.SetStatusMessage(errMsg); mysr.Close(); return(false); } while (!mysr.EndOfStream) { string line = mysr.ReadLine(); string[] aryline = line.Split(new String[] { separator }, StringSplitOptions.None); if (!DBUtil.CheckLen(aryline)) { //发现出错的数据 string errMsg = "该csv数据文件中包含错误数据,请先对csv文件进行检查校准!"; MessageBox.Show(errMsg); WindowAdmin.notify.SetStatusMessage(errMsg); mysr.Close(); return(false); } MyTreeNode myNode = new MyTreeNode(aryline[0], aryline[1]); if (allNodes.ContainsKey(myNode.SysId)) //ID有重复的节点 { IdConflictNodes.Add(myNode); } else { allNodes.Add(myNode.SysId, myNode); } row++; if (row % 1000 == 0) { WindowAdmin.notify.SetStatusMessage("【第一步:正在读取第" + row + "个节点】——>【第二步:构造树结构】——>【第三步:写入数据库】"); } } allNodeCount = row; } catch (Exception ex) { WindowAdmin.notify.SetProcessBarVisible(false); WindowAdmin.notify.SetStatusMessage("文件读取出错!+\n" + ex.Message); mysr.Close(); return(false); } mysr.Close(); return(true); }