TXT 与 DataTable 互转
2015-08-13 15:58
393 查看
//********************************************************************************************* 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; } //****************************************************************************************
相关文章推荐
- 获取windows可执行文件的version信息(版本号)
- easy.py使用中ValueError: could not convert string to float: svm_options错误问题解决
- 当前选中 底色切换
- 解决centos netstat和ps感染木马
- function, method, unbound_method, bound_method
- meta标签中的http-equiv属性使用介绍
- C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
- Linux上 安装JDK环境变量配置 新手必备
- js实现仿网易点击弹出提示同时背景变暗效果
- Dubbo源码分析——扩展点机制
- 用ant实现java项目的自动构建和部署
- 控制翻转(IOC)与 依赖注入 (DI)
- LoadRunner脚本 《第二篇》
- 【NOI2015】【软件包管理器】【树链剖分】
- hdu 1754__I Hate It
- 数组不初始化的默认值
- android SQLite使用SQLiteOpenHelper类对数据库进行操作
- 在Android中applicationId与package name的那些事
- ASP入门(八)-Request对象
- poj 3020 Antenna Placement(最小路径覆盖 + 构图)