求C#的代码:逐行读取文本文件的内容,把内容整理成CSV文件!
文本文件的内容是这样的:UserName: u1
Email: e1
Address: a1
Telephone: t1
UserName: u2
Email: e2
Telephone: t2
UserName: u3
Telephone: t3
......
程序需要读取每行数据,并且格式化数据保存为如下各式的CSV文件:
UserName; Email; Telephone; Address
"u1"; "e1"; "t1"; "a1"
"u2"; "e2"; "t2"; ""
"u3"; ""; ""; "t3";
......
程序的难点在于:
1,每个User不一定具备有所有信息,比如User2没有Address, User3只有Telephone,而且,如果用户没有这个数据,那么这行并不出现在原文件里比如User2只有2行数据,User3只有1行数据;
2,要求输出到标准的CSV各式的文件中,用分号相隔所有的列,用双引号包含列的内容。
请大侠出手指教!
一定给分,谢谢! --------------------编程问答-------------------- C# 入门经典 还是 C# 高级编程 有这样一模一样的实例,楼主找找. --------------------编程问答-------------------- 可以逐行读文件,并判断前面的4个字母,用来区分写CSV文件是要换行 --------------------编程问答-------------------- 一行一行读取,每行都有标志,就可以知道相应的信息,没有的置"",填入到相应的字段,读到下一个userName的时候,就知道是第二个信息了.这时候换行输出. --------------------编程问答-------------------- readline --------------------编程问答-------------------- 帮顶. --------------------编程问答-------------------- 同样想知道 --------------------编程问答-------------------- 可否给出源代码?调试成功既给分。谢谢! --------------------编程问答-------------------- 顶! --------------------编程问答-------------------- 没有人会么? --------------------编程问答-------------------- up --------------------编程问答-------------------- --------------------编程问答-------------------- 参考代码
private void button1_Click(object sender, EventArgs e)
{
StreamReader vStreamReader = new StreamReader(@"C:\temp\temp.txt",
Encoding.Default);
string vText = "UserName;Email;Telephone;Address\r\n";
string vUserName = string.Empty;
string vEmail = string.Empty;
string vTelephone = string.Empty;
string vAddress = string.Empty;
string vLine;
while ((vLine = vStreamReader.ReadLine()) != null)
{
if (vLine.IndexOf("UserName:", StringComparison.OrdinalIgnoreCase) == 0)
{
if (vUserName != string.Empty)
{
vText += string.Format("\"{0}\";\"{1}\";\"{2}\";\"{3}\"\r\n",
vUserName.Replace("\"", "\"\""), vEmail.Replace("\"", "\"\""),
vTelephone.Replace("\"", "\"\""), vAddress.Replace("\"", "\"\""));
vUserName = string.Empty;
vEmail = string.Empty;
vTelephone = string.Empty;
vAddress = string.Empty;
}
if (vLine.Length > "UserName:".Length)
vUserName = vLine.Substring("UserName:".Length).Trim();
}
if (vLine.IndexOf("Email:", StringComparison.OrdinalIgnoreCase) == 0
&& vLine.Length > "Email:".Length)
vEmail = vLine.Substring("Email:".Length).Trim();
if (vLine.IndexOf("Telephone:", StringComparison.OrdinalIgnoreCase) == 0
&& vLine.Length > "Telephone:".Length)
vTelephone = vLine.Substring("Telephone:".Length).Trim();
if (vLine.IndexOf("Address:", StringComparison.OrdinalIgnoreCase) == 0
&& vLine.Length > "Address:".Length)
vAddress = vLine.Substring("Address:".Length).Trim();
}
vStreamReader.Close();
if (vUserName != string.Empty)
{
vText += string.Format("\"{0}\";\"{1}\";\"{2}\";\"{3}\"\r\n",
vUserName.Replace("\"", "\"\""), vEmail.Replace("\"", "\"\""),
vTelephone.Replace("\"", "\"\""), vAddress.Replace("\"", "\"\""));
}
StreamWriter vStreamWriter = new StreamWriter(@"C:\temp\temp.cvs",
false, Encoding.Default);
vStreamWriter.Write(vText);
vStreamWriter.Close();
}
输入
UserName: u1
Email: e1
Address: a1
Telephone: t1
UserName: u2
Email: e2
Telephone: t2
UserName: u3
Telephone: t3
输出
UserName;Email;Telephone;Address--------------------编程问答-------------------- 没啥难度,体力活,伴水好勤奋,不得不佩服~ --------------------编程问答-------------------- 伴水楞强。 --------------------编程问答-------------------- 强! --------------------编程问答-------------------- 学习了 。 --------------------编程问答--------------------
"u1";"e1";"t1";"a1"
"u2";"e2";"t2";""
"u3";"";"t3 ";""
没有注释的代码是垃圾 --------------------编程问答-------------------- 回楼上
人家有时间 回复就不错了
--------------------编程问答-------------------- 还在学习中 , 不知道怎么取出username 和 PassWord 之类的东西 , 要单提出来进行比较用 ,跟我需要的很相似
补充:.NET技术 , C#