C# 导出导入TXT文件
导出TXT关键类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.IO;
using System.Globalization;
using System.Windows.Forms; namespace Demo
{
/// <summary>
/// 导出TXT
/// 罗旭成
/// 2014-4-15
/// </summary>
public class ExportTxt
{ #region * 将DataTable指定的列,导出到TXT文件.
/// <summary>
/// 将DataTable指定的列,导出到TXT文件.
/// </summary>
/// <param name="pDataTable">数据源表</param>
/// <param name="pColName">列名</param>
/// <param name="pColCaption">标题(未指定则使用列名)</param>
/// <param name="pFilePath">完整的路径和文件名</param>
public static void UTF8_SaveToTXT(DataTable pDataTable, string pColName, string pColCaption, string pFilePath)
{
//如果文件存在则删除
if (File.Exists(pFilePath))
{
File.Delete(pFilePath);
}
//********************************************************************************************
using (FileStream stream = new FileStream(pFilePath, FileMode.Create, FileAccess.Write))
{
using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
{
//------
if ((pColName == null) || (pColName.Trim() == "")) { return; }
if (pColCaption == null) { pColCaption = ""; }
String[] xColArray = pColName.Split(new Char[] { ',' });
String[] xColCapArray = pColCaption.Split(new Char[] { ',' });
for (int xI = , xN = xColArray.Length; xI < xN; xI++)
{
xColArray.SetValue(xColArray[xI].Trim(), xI);
}
for (int xI = , xN = xColCapArray.Length; xI < xN; xI++)
{
xColCapArray.SetValue(xColCapArray[xI].Trim(), xI);
}
//--*************************************************************************************************
//--如果标题不为空
if (pColCaption.Trim() != "")
{
if (xColArray.Length == xColCapArray.Length)//标题和列名的数量必须相同
{
int x = ;
Boolean xFind = false;
for (int j = ; j < xColArray.Length; j++)
{
//设计列名
for (int i = ; i < pDataTable.Columns.Count; i++)
{
if (xColArray[j] == pDataTable.Columns[i].ColumnName)
{
xFind = true;
UTF8_WriteString(writer, xColCapArray[j - ], , );//(列名)不是最后一列的处理方式
x = j;
break;
}
}
if (xFind == false)
{
MessageBox.Show("指定的列名不存在!");
return;
}
}
UTF8_WriteString(writer, xColCapArray[x], , );//(列名)最后一列的处理方式
//--************************************************************************************************
//设计列数据
int y = ;
//-------------
for (int b = ; b < pDataTable.Columns.Count; b++)
{
for (int a = ; a < xColArray.Length; a++)
{
if (xColArray[a] == pDataTable.Columns[b].ColumnName)
{
y = b;//获取最大列的索引
}
}
}
//-------------
for (int j = ; j < pDataTable.Rows.Count; j++)
{
for (int i = ; i < pDataTable.Columns.Count; i++)
{
String pColType = pDataTable.Columns[i].DataType.Name.ToString();//获取列类型
for (int k = ; k < xColArray.Length; k++)
{
if (xColArray[k - ] == pDataTable.Columns[i].ColumnName.ToString())
{
//***************************************************************************************
//--不是最后一列的处理方式
if (pDataTable.Rows[j][i].ToString() != "")
{
switch (pColType)
{
case "String":
{
UTF8_WriteString(writer, pDataTable.Rows[j][i].ToString(), , );
break;
}
case "Int32":
{
UTF8_WriteString(writer, pDataTable.Rows[j][i].ToString(), , );
break;
}
case "Boolean":
{
UTF8_WriteBoolean(writer, Convert.ToBoolean(pDataTable.Rows[j][i]), , );
break;
}
case "DateTime":
{
UTF8_WriteDate(writer, Convert.ToDateTime(pDataTable.Rows[j][i]), "yyyy-MM-dd", , );
break;
}
case "Decimal":
{
UTF8_WriteDecimal(writer, Convert.ToDecimal(pDataTable.Rows[j][i]), , , );
break;
}
default:
{
UTF8_WriteString(writer, pDataTable.Rows[j][i].ToString(), , );
break;
}
}
}
else
{
UTF8_WriteString(writer, "", , );
}
}
}
}
//***********************************************************************************************
//********************最后一列的处理方式*********************************************************
String pColType1 = pDataTable.Columns[y].DataType.Name.ToString();//获取列类型
if (pDataTable.Rows[j][y].ToString() != "")
{
switch (pColType1)
{
case "String":
{
UTF8_WriteString(writer, pDataTable.Rows[j][y].ToString(), , );
break;
}
case "Int32":
{
UTF8_WriteString(writer, pDataTable.Rows[j][y].ToString(), , );
break;
}
case "Boolean":
{
UTF8_WriteBoolean(writer, Convert.ToBoolean(pDataTable.Rows[j][y]), , );
break;
}
case "DateTime":
{
UTF8_WriteDate(writer, Convert.ToDateTime(pDataTable.Rows[j][y]), "yyyy-MM-dd", , );
break;
}
case "Decimal":
{
UTF8_WriteDecimal(writer, Convert.ToDecimal(pDataTable.Rows[j][y]), , , );
break;
}
default:
{
UTF8_WriteString(writer, pDataTable.Rows[j][y].ToString(), , );
break;
}
}
}
else
{
UTF8_WriteString(writer, "", , );
}
//**********************************************************************************************
}
}
else
{
MessageBox.Show("指定的列不正确!");
return;
}
}
else
//--如果标题为空
{
//****************************************************************************
int m = ;
Boolean xFind = false;
//****************************************************************************
//***********************设计列名*********************************************
for (int i = ; i < xColArray.Length; i++)
{
for (int j = ; j < pDataTable.Columns.Count; j++)
{
if (xColArray[i] == pDataTable.Columns[j].ColumnName)
{
xFind = true;
UTF8_WriteString(writer, xColArray[i - ], , );//(列名)不是最后一列的处理方式
m = i;
break;
}
}
if (xFind == false)
{
MessageBox.Show("指定的列名不存在!");
return;
}
}
UTF8_WriteString(writer, xColArray[m], , );//(列名)最后一列的处理方式
//***************************************************************************
//设计列数据
int n = ;
//----
for (int i = ; i < pDataTable.Columns.Count; i++)
{
for (int j = ; j < xColArray.Length; j++)
{
if (xColArray[j] == pDataTable.Columns[i].ColumnName)
{
n = i;//获取最大列的索引值
}
}
}
//----
for (int i = ; i < pDataTable.Rows.Count; i++)
{
for (int j = ; j < pDataTable.Columns.Count; j++)
{
String pColType = pDataTable.Columns[j].DataType.Name.ToString();//获取列;类型
for (int k = ; k < xColArray.Length; k++)
{
if (xColArray[k - ] == pDataTable.Columns[j].ColumnName.ToString())
{
if (pDataTable.Rows[i][j].ToString() != "")
{
switch (pColType)
{
case "String":
{
UTF8_WriteString(writer, pDataTable.Rows[i][j].ToString(), , );
break;
}
case "Int32":
{
UTF8_WriteString(writer, pDataTable.Rows[i][j].ToString(), , );
break;
}
case "Boolean":
{
UTF8_WriteBoolean(writer, Convert.ToBoolean(pDataTable.Rows[i][j]), , );
break;
}
case "DateTime":
{
UTF8_WriteDate(writer, Convert.ToDateTime(pDataTable.Rows[i][j]), "yyyy-MM-dd", , );
break;
}
case "Decimal":
{
UTF8_WriteDecimal(writer, Convert.ToDecimal(pDataTable.Rows[i][j]), , , );
break;
}
default:
{
UTF8_WriteString(writer, pDataTable.Rows[i][j].ToString(), , );
break;
}
}
}
else
{
UTF8_WriteString(writer, "", , );
}
}
}
}
//***********************************************************************************************
//********************最后一列的处理方式*********************************************************
String pColType2 = pDataTable.Columns[n].DataType.Name.ToString();//获取列类型
if (pDataTable.Rows[i][n].ToString() != "")
{
switch (pColType2)
{
case "String":
{
UTF8_WriteString(writer, pDataTable.Rows[i][n].ToString(), , );
break;
}
case "Int32":
{
UTF8_WriteString(writer, pDataTable.Rows[i][n].ToString(), , );
break;
}
case "Boolean":
{
UTF8_WriteBoolean(writer, Convert.ToBoolean(pDataTable.Rows[i][n]), , );
break;
}
case "DateTime":
{
UTF8_WriteDate(writer, Convert.ToDateTime(pDataTable.Rows[i][n]), "yyyy-MM-dd", , );
break;
}
case "Decimal":
{
UTF8_WriteDecimal(writer, Convert.ToDecimal(pDataTable.Rows[i][n]), , , );
break;
}
default:
{
UTF8_WriteString(writer, pDataTable.Rows[i][n].ToString(), , );
break;
}
}
}
else
{
UTF8_WriteString(writer, "", , );
}
//********************************************************************************************************
}
}
}
}
}
#endregion #region * 转换日期的输出格式
/// <summary>
/// 转换日期的输出格式
/// </summary>
/// <param name="pStreamWriter"></param>
/// <param name="pValue"></param>
/// <param name="pformat">1,2,3,4四种情况</param>
/// <param name="pSymbol"></param>
public static void UTF8_WriteDate(StreamWriter pStreamWriter, DateTime pValue, String pformat, int pLen, int pSymbol)
{
UTF8_WriteString(pStreamWriter, pValue.ToString(pformat, DateTimeFormatInfo.InvariantInfo), pLen, pSymbol);
}
#endregion #region * 转换小数的输出位数
/// <summary>
/// 转换小数的输出位数
/// </summary>
/// <param name="pStreamWriter"></param>
/// <param name="pValue"></param>
/// <param name="pSize">限制输出小数的位数</param>
/// <param name="pSymbol"></param>
public static void UTF8_WriteDecimal(StreamWriter pStreamWriter, decimal pValue, int pSize, int pLen, int pSymbol)
{
UTF8_WriteString(pStreamWriter, decimal.Round(pValue, pSize, MidpointRounding.AwayFromZero).ToString(), pLen, pSymbol);
}
#endregion #region * 转换Boolean值
/// <summary>
/// 第一种情况,输出数字0,1
/// </summary>
/// <param name="pStreamWriter"></param>
/// <param name="pformat">true,false</param>
/// <param name="pSymbol"></param>
public static void UTF8_WriteBoolean(StreamWriter pStreamWriter, Boolean pValue, int pType, int pSymbol)
{
if (pType == )
{
if (pValue == true) { UTF8_WriteString(pStreamWriter, "true", , pSymbol); }
if (pValue == false) { UTF8_WriteString(pStreamWriter, "false", , pSymbol); }
}
if (pType == )
{
if (pValue == true) { UTF8_WriteString(pStreamWriter, "", , pSymbol); }
if (pValue == false) { UTF8_WriteString(pStreamWriter, "", , pSymbol); }
}
} /// <summary>
/// 第二种情况,输出TRUE,FALSE
/// </summary>
/// <param name="pStreamWriter"></param>
/// <param name="pValue">0,1</param>
/// <param name="pSymbol"></param>
public static void UTF8_WriteBoolean(StreamWriter pStreamWriter, int pValue, int pType, int pSymbol)
{
if (pType == )
{
if (pValue == ) { UTF8_WriteString(pStreamWriter, "", , pSymbol); }
if (pValue == ) { UTF8_WriteString(pStreamWriter, "", , pSymbol); }
}
if (pType == )
{
if (pValue == ) { UTF8_WriteString(pStreamWriter, "true", , pSymbol); }
if (pValue == ) { UTF8_WriteString(pStreamWriter, "false", , pSymbol); }
}
}
#endregion #region * 写入字符串,分列符和换行符
/// <summary>
/// 写入字符串,分列符和换行符
/// </summary>
/// <param name="pStreamWriter"></param>
/// <param name="pString"></param>
/// <param name="pType">[1]:Add Tab [2]:Enter</param>
public static void UTF8_WriteString(StreamWriter pStreamWriter, string pString, int pLen, int pSymbol)
{
if (pLen < ) { MessageBox.Show("你输入的长度不符合要求!"); return; }
if (pLen == )
{
pStreamWriter.Write(pString);
}
else
{
pStreamWriter.Write(pString.Substring(, pLen));
}
UTF8_WriteSymbol(pStreamWriter, pSymbol);
}
#endregion #region * 写入分列符号和回车换行符
/// <summary>
/// 写入分列符号和回车换行符
/// </summary>
/// <param name="pStreamWriter"></param>
/// <param name="pType">[1]:Add Tab [2]:Enter</param>
public static void UTF8_WriteSymbol(StreamWriter pStreamWriter, int pType)
{
//--EFBBBF UTF8识别标识.
byte Symbol1 = 0X0D;
byte Symbol2 = 0X0A;
byte Symbol3 = 0X09;
string vTab = ((char)Symbol3).ToString(); // Tab分列
string vEnter = ((char)Symbol1).ToString() + ((char)Symbol2).ToString(); //回车换行
if (pType == ) { pStreamWriter.Write(vTab); }
if (pType == ) { pStreamWriter.Write(vEnter); }
}
#endregion
}
}
导出TXT的例子:
#region * 导出TXT文件
private void btnExportTxt_Click(object sender, EventArgs e)
{
if (this.txtSaveDir.Text.Trim() != "")
{
if (DemoTb != null && DemoTb.Rows.Count > )
{
ExportTxt.UTF8_SaveToTXT(DemoTb, "姓名,年龄,性别,籍贯,创建时间", "姓名,年龄,性别,籍贯,创建时间", this.txtSaveDir.Text.Trim());
MessageBox.Show("导出文件成功!");
}
else
{
MessageBox.Show("数据为空,不能进行导出!");
}
}
else
{
MessageBox.Show("导出文件目录不能为空!");
}
}
#endregion
导入TXT的例子:
#region * 导入TXT文件
private void btnImportTxt_Click(object sender, EventArgs e)
{
try
{
if (this.txtFindDir.Text.Trim() != "")
{
byte Symbol1 = 0X0D;
byte Symbol2 = 0X0A;
string vEnter = ((char)Symbol1).ToString() + ((char)Symbol2).ToString(); //回车换行
//--
StreamReader reader = new StreamReader(this.txtFindDir.Text.Trim());
string str = string.Empty;
ArrayList arrayList = new ArrayList();
str = reader.ReadToEnd();
if (!string.IsNullOrEmpty(str))
{
string[] arrstr = str.Split(vEnter.ToCharArray());
foreach (string item in arrstr)
{
//去掉空行
if (!string.IsNullOrEmpty(item))
{
arrayList.Add(item);
}
}
}
if (arrayList != null && arrayList.Count > )
{
DemoTb.Clear();
//第二行开始,第一行为标题
for (int i = ; i < arrayList.Count; i++)
{
string[] arr = arrayList[i].ToString().Split("\t".ToCharArray());
DataRow dr = DemoTb.NewRow();
dr["姓名"] = arr[];
dr["年龄"] = arr[];
dr["性别"] = arr[];
dr["籍贯"] = arr[];
dr["创建时间"] = arr[];
DemoTb.Rows.Add(dr);
}
}
this.dataGridView1.DataSource = DemoTb;
}
else
{
MessageBox.Show("导入文件目录不能为空!");
}
}
catch (Exception eMsg)
{
MessageBox.Show("导入数据出错:" + eMsg.ToString());
}
}
#endregion
以上即可完成对TXT文件的导入导出。
C# 导出导入TXT文件的更多相关文章
- 用DataGridView导入TXT文件,并导出为XLS文件
使用 DataGridView 控件,可以显示和编辑来自多种不同类型的数据源的表格数据.也可以导出.txt,.xls等格式的文件.今天我们就先介绍一下用DataGridView把导入txt文件,导出x ...
- mysql使用load导入txt文件所遇到的问题及解决方法
导入txt文件,有导入向导这种方式: 另外可以使用load的方式导入.最开始使用以下代码插入: load data local infile 'F:\\Data\\predict_data.txt' ...
- php 读取网页源码 , 导出成txt文件, 读取xls,读取文件夹下的所有文件的文件名
<?php // 读取网页源码$curl = curl_init();curl_setopt($curl, CURLOPT_URL, $url);curl_setopt($curl, CURLO ...
- mysql中导入txt文件
1 windows 下 mysql导入txt文件(使用mysql的workbench) load data local infile 'path' into table table_name fiel ...
- .Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) 通过MVC控制器导出导入Excel文件(可用于java SSH架构)
.Net MVC 导入导出Excel总结(三种导出Excel方法,一种导入Excel方法) [原文地址] 通过MVC控制器导出导入Excel文件(可用于java SSH架构) public cl ...
- 将Maple输出的LaTex导出到txt文件
将Maple输出的LaTex导出到txt文件 1. 生成LATEX Maple可以把它的表达式转换成LATEX, 使用latex命令即可: > latex(x^2+y^2=z^2); {x}^{ ...
- Mysql 8.0 导入txt文件操作(课程实验)
一.实验准备: 1.实验设备:Dell laptop 7559; 2.实验环境:windows 10操作系统; 3.数据库版本:mysql 8.0; 二.实验目的: 1.将一个宠物表pet.txt文件 ...
- 有道云笔记导入txt文件的方法
有道云笔记pc版迷之不能导入txt文件 尝试很多方法后发现 通过网页版 有道云 可以直接上传 但是pc版不能查看而移动端可以查看 很迷~
- 【其他】【navicat】【1】navicat导入txt文件中文乱码问题解决
正文: TXT文件默认编码为ANSI,另存为编码为UTF-8的文本文件即可 备注: 1,一般需要导入的数据都是一张excel表,需要将excel表另存为“文本文件(制表符分隔)(*.txt)”保存类型 ...
随机推荐
- UVA11426 GCD - Extreme (II)---欧拉函数的运用
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 雨痕 的《Python学习笔记》--附脑图(转)
原文:http://www.pythoner.com/148.html 近日,在某微博上看到有人推荐了 雨痕 的<Python学习笔记>,从github上下载下来看了下,确实很不错. 注意 ...
- 3.Github介绍
很多人都知道,Linus在1991年创建了开源的Linux.从此,Linux系统不断发展,已经成为最大的服务器系统软件了.Linus虽然创建了Linux,但Linux的壮大是靠全世界热心的志愿者参与的 ...
- 聊聊高并发(三十四)Java内存模型那些事(二)理解CPU快速缓存的工作原理
在上一篇聊聊高并发(三十三)从一致性(Consistency)的角度理解Java内存模型 我们说了Java内存模型是一个语言级别的内存模型抽象.它屏蔽了底层硬件实现内存一致性需求的差异,提供了对上层的 ...
- matplotlib 的 subplot, axes and axis
fig = plt.figure('多图', (10, 10), dpi=80) #第一个指定窗口名称,第二个指定图片大小,创建一个figure对象 plt.subplot(222) #2*2的第二个 ...
- (转)CreateThread与_beginthread,内存泄漏为何因(原帖排版有些不好 ,所以我稍微整理下)
在写c++代码时,一直牢记着一句话:决不应该调用CreateThread. 应该使用Visual C++运行时库函数_beginthreadex.好像CreateThread函数就 ...
- Jmeter 之下载图片
利用Jmeter实现文件图片下载 步骤: 1. 新建线程组 2. 线程组右键新建HTTP请求: 添加服务器名称或IP, 路径,协议,方法,端口等信息 3. 线程组右键新建 BeanShell Samp ...
- ORM中的related_name
ORM 的反向查找(related_name) 先定义两个模型,一个是A,一个是B,是一对多的类型. class A(models.Model): name= models.CharField('名称 ...
- C++ error C2064:
error C2064: term does not evaluate to a function 错误原因,非函数,当成函数使用了
- 裁剪TOGAF进行产品架构开发
http://ea.zhoujingen.cn/56.html . 有人和我说“周老师,我的企业条件不适合,学习企业架构没用.” 如果等公司让我用企业架构,估计会比我自己开始晚七八年.我们学习任何内容 ...