当前位置:编程学习 > C#/ASP.NET >>

求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 ";""
--------------------编程问答-------------------- 没啥难度,体力活,伴水好勤奋,不得不佩服~ --------------------编程问答-------------------- 伴水楞强。 --------------------编程问答-------------------- 强! --------------------编程问答-------------------- 学习了 。 --------------------编程问答--------------------
引用 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……

没有注释的代码是垃圾 --------------------编程问答-------------------- 回楼上
人家有时间 回复就不错了
--------------------编程问答--------------------  还在学习中 , 不知道怎么取出username 和 PassWord 之类的东西 , 要单提出来进行比较用 ,跟我需要的很相似
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,