TXT 与 DataTable 互转
//********************************************************************************************* public static DataTable TXT_To_DataTable(string dirTXT) { StreamReader objReader = new StreamReader(dirTXT, Encoding.Default); DataTable dt = new DataTable(); string strline; string[] aryline; bool blnFlag = false; while ((strline = objReader.ReadLine()) != null) { aryline = strline.Split(new char[] { '\t' }, StringSplitOptions.None); if (blnFlag == false) { DataColumn mydc = null; foreach (string str in aryline) { mydc = new DataColumn(str); dt.Columns.Add(mydc); } blnFlag = true; } else { dt.Rows.Add(aryline); } } objReader.Close(); return dt; } /// <summary> /// 以Tab键为间隔,以Tab键表示空值 /// </summary> /// <param name="dirTXT"></param> /// <returns></returns> public static DataTable TXT_To_DataTable2(string dirTXT) { StreamReader objReader = new StreamReader(dirTXT, Encoding.Default); DataTable dt = new DataTable(); string strline; string[] aryline; bool blnFlag = false; while ((strline = objReader.ReadLine()) != null) { aryline = strline.Split(new char[] { '\t' }, StringSplitOptions.None); if (blnFlag == false) { foreach (string str in aryline) { if (!string.IsNullOrEmpty(str)) { DataColumn mydc = new DataColumn(str); dt.Columns.Add(mydc); } } blnFlag = true; } else { if (aryline.Count() != dt.Columns.Count) { strline = Lines_To_Replace(strline); aryline = strline.Split(new char[] { '\t' }, StringSplitOptions.None); } dt.Rows.Add(aryline); } } objReader.Close(); return dt; } public static string Lines_To_Replace(string lines) { for (int i = 0; i < lines.Length; i++) { if (i != lines.Length - 1 && i > 0 && lines.Substring(i - 1, 1) == "\t" && lines.Substring(i, 1) == "\t" && lines.Substring(i + 1, 1) == "\t") { //lines.Substring(i, 1) = "\0"; lines = lines.Substring(0, i) + "\0" + lines.Substring(i + 1, lines.Length - i - 1); } } return lines; } /// <summary> /// 以空格键为间隔,没有空值 /// </summary> /// <param name="dirTXT"></param> /// <returns></returns> public static DataTable TXT_To_DataTable3(string dirTXT) { StreamReader objReader = new StreamReader(dirTXT, Encoding.Default); DataTable dt = new DataTable(); string strline; bool OK = false; while ((strline = objReader.ReadLine()) != null) { List<string> list = new List<string>(); string tmp = ""; while (strline.Contains(" ")) { tmp = strline.Substring(0, strline.IndexOf(" ")); strline = strline.Substring(strline.IndexOf(" ") + 1, strline.Length - strline.IndexOf(" ") - 1).Trim(); if (!string.IsNullOrEmpty(tmp)) list.Add(tmp); } if (!string.IsNullOrEmpty(strline)) list.Add(strline); if (!OK) { foreach (string str in list) { if (!string.IsNullOrEmpty(str)) { DataColumn mydc = new DataColumn(str); dt.Columns.Add(mydc); } } OK = true; } else dt.Rows.Add(list.ToArray()); } objReader.Close(); return dt; } /// <summary> /// DataTable导出到TXT 以Tab为分隔符,以Tab表示空值 /// </summary> /// <param name="table"></param> /// <param name="fullName"></param> /// <param name="Msg"></param> /// <returns></returns> public static bool DataTable_To_TXT2(DataTable table, string fullName, ref string Msg) { PathHelper.Check_Directory(fullName); if (table == null || table.Rows.Count == 0) { Msg += fullName + " 对应的 DataTable 没有数据"; return false; } FileStream fileStream = new FileStream(fullName, FileMode.Create); StreamWriter streamWriter = new StreamWriter(fileStream, System.Text.Encoding.UTF8); StringBuilder strBuilder = new StringBuilder(); for (int j = 0; j < table.Columns.Count; j++) { string str1 = table.Columns[j].Caption; if (j == table.Columns.Count - 1) { strBuilder.AppendLine(str1); } else { str1 += "\t"; strBuilder.Append(str1); } } for (int i = 0; i < table.Rows.Count - 1; i++) { for (int j = 0; j < table.Columns.Count; j++) { string str1 = table.Rows[i][j].NullableToString(); if (string.IsNullOrEmpty(str1) || str1 == "\0") str1 = "\t"; if (j == table.Columns.Count - 1) { strBuilder.AppendLine(str1); } else { str1 += "\t"; strBuilder.Append(str1); } } } streamWriter.WriteLine(strBuilder.ToString()); streamWriter.Close(); fileStream.Close(); return true; } public static bool DataTable_To_TXT(DataTable table, string fullName, ref string Msg) { PathHelper.Check_Directory(fullName); if (table == null || table.Rows.Count == 0) { Msg += fullName + " 对应的 DataTable 没有数据"; return false; } int[] iColumnLength = new int[table.Columns.Count]; FileStream fileStream = new FileStream(fullName, FileMode.Create); StreamWriter streamWriter = new StreamWriter(fileStream, System.Text.Encoding.Unicode); StringBuilder strBuilder = new StringBuilder(); for (int i = 0; i < table.Columns.Count; i++) { int iLength = 0; for (int j = 0; j < table.Rows.Count; j++) { if (iLength < (table.Rows[j][i].ToString()).Length) { iLength = (table.Rows[j][i].ToString()).Length; if ((table.Rows[j][i].ToString()).Length < table.Columns[i].Caption.Length) { iLength = table.Columns[i].Caption.Length; } } } iColumnLength[i] = iLength + 1; } for (int j = 0; j < table.Columns.Count; j++) { string str1 = table.Columns[j].Caption; int iLength = str1.Length; int iColumnWidth = iColumnLength[j] + 4; for (int k = iLength; k < iColumnWidth; k++) { str1 += " "; } if (j == table.Columns.Count - 1) { strBuilder.AppendLine(str1); } else { strBuilder.Append(str1); } } for (int i = 0; i < table.Rows.Count - 1; i++) { for (int j = 0; j < table.Columns.Count; j++) { string str1 = table.Rows[i][j].NullableToString(); if (string.IsNullOrEmpty(str1)) str1 = "\0"; int iLength = str1.Length; int iColumnWidth = iColumnLength[j] + 4; for (int k = iLength; k < iColumnWidth; k++) { str1 += " "; } if (j == table.Columns.Count - 1) { strBuilder.AppendLine(str1); } else { strBuilder.Append(str1); } } } streamWriter.WriteLine(strBuilder.ToString()); streamWriter.Close(); fileStream.Close(); return true; } //****************************************************************************************