您的位置:首页 > 其它

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;
}
//****************************************************************************************
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: