求C#的代码:逐行读取文本文件的内容,把内容整理成CSV文件!

csdner 2007-04-05 06:18:35
文本文件的内容是这样的:

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各式的文件中,用分号相隔所有的列,用双引号包含列的内容。


请大侠出手指教!
一定给分,谢谢!
...全文
1954 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gl860224 2010-11-24
  • 打赏
  • 举报
回复
还在学习中 , 不知道怎么取出username 和 PassWord 之类的东西 , 要单提出来进行比较用 ,跟我需要的很相似
sweet_dogltx 2010-11-22
  • 打赏
  • 举报
回复
回楼上
人家有时间 回复就不错了
happyer_longlong 2010-11-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 zswang 的回复:]
参考代码

C# code
private void button1_Click(object sender, EventArgs e)
{
StreamReader vStreamReader = new StreamReader(@"C:\temp\temp.txt",
Encoding.Default);
string vText = "Use……
[/Quote]
没有注释的代码是垃圾
gl860224 2010-11-22
  • 打赏
  • 举报
回复
学习了 。
heartbeast 2008-08-19
  • 打赏
  • 举报
回复
强!
viena 2007-11-21
  • 打赏
  • 举报
回复
没啥难度,体力活,伴水好勤奋,不得不佩服~
王集鹄 2007-11-21
  • 打赏
  • 举报
回复
参考代码
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 ";""
  • 打赏
  • 举报
回复
伴水楞强。
panzi667 2007-11-20
  • 打赏
  • 举报
回复
up
csdner 2007-04-06
  • 打赏
  • 举报
回复
没有人会么?
csdner 2007-04-06
  • 打赏
  • 举报
回复
顶!
vivek 2007-04-05
  • 打赏
  • 举报
回复
同样想知道
neillove 2007-04-05
  • 打赏
  • 举报
回复
帮顶.
zhangliu_521 2007-04-05
  • 打赏
  • 举报
回复
readline
huming_h 2007-04-05
  • 打赏
  • 举报
回复
一行一行读取,每行都有标志,就可以知道相应的信息,没有的置"",填入到相应的字段,读到下一个userName的时候,就知道是第二个信息了.这时候换行输出.
CathySun118 2007-04-05
  • 打赏
  • 举报
回复
可以逐行读文件,并判断前面的4个字母,用来区分写CSV文件是要换行
Jinwmmail 2007-04-05
  • 打赏
  • 举报
回复
C# 入门经典 还是 C# 高级编程 有这样一模一样的实例,楼主找找.
csdner 2007-04-05
  • 打赏
  • 举报
回复
可否给出源代码?调试成功既给分。谢谢!

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧