简单的csv逗号分隔html表格

时间:2012-04-17 18:36:45

标签: c# csv html-table

我知道之前已经问过这个问题,但我对答案不太满意(考虑到它没有解释发生了什么)。

我的具体问题是:如何打开一个逗号分隔的csv / text文件,并用返回值分隔行,并使用C#将其放入HTML表中?

我理解如何在PHP中执行此操作,但我刚开始学习ASP.Net/C#,如果有人有一些C#的免费资源和/或能够为我提供一段代码,并解释了最新情况我会很感激的。

我有这段代码,但我不确定如何使用它,因为A)我不知道C#数组是如何工作的,B)我不知道如何在ASP.Net C#中打开文件:< / p>

var lines =File.ReadAllLines(args[0]);
    using (var outfs = File.AppendText(args[1]))
    {
        outfs.Write("<html><body><table>");
        foreach (var line in lines)
            outfs.Write("<tr><td>" + string.Join("</td><td>", line.Split(',')) + "</td></tr>");
        outfs.Write("</table></body></html>");
    }

我为我在这里明显缺乏经验而道歉。

2 个答案:

答案 0 :(得分:2)

您发布的代码示例完全符合您的要求:

  1. 打开文件。
  2. 为表格写一个HTML字符串,其中包含步骤1中文件的内容到另一个文件。
  3. 让我们分解一下:

    var lines =File.ReadAllLines(args[0]);
    

    这将打开args [0]中指定的文件,并将所有行读入字符串数组,每个元素一个。请参阅File.ReadAllLines Method (String)

    using (var outfs = File.AppendText(args[1])) 
    {
    

    File.AppendText Method创建一个StreamWriter,将文本附加到现有文件(如果不存在,则创建它)。文件名(和路径,可能)在args [1]中。 using语句将StreamWriter放入所谓的using块中,以确保在使用块离开后正确处理流。有关详细信息,请参阅using Statement (C# Reference)

        outfs.Write("<html><body><table>"); 
    

    outfs.Write调用StreamWriter的Write方法(StreamWriter.Write Method (String))。实际上,在您的代码片段的情况下,在退出using块之前不会将任何内容写入文件 - 它会写入缓冲区。退出using块将刷新缓冲区并写入文件。

        foreach (var line in lines)
    

    此命令启动循环遍历字符串数组lines中的所有元素,并与第一个(元素0)索引一起开始。如果需要,请参阅foreach, in (C# Reference)以获取更多信息。

            outfs.Write("<tr><td>" + string.Join("</td><td>", line.Split(',')) + "</td></tr>");
    

    String.Join是这里的关键部分,大部分工作都在这里完成。 String.Join Method (String, String[])有技术细节,但基本上这里发生的是第二个参数(line.Split(','))传入一个字符串数组,然后该数组中的字符串与第一个字符串连接在一起参数(</td><td>)作为分隔符,表行正在打开和关闭。

    例如,如果该行是“1,2,3,4,5,6”,则Split会为您提供一个6元素数组。然后,</td><td>将此数组与String.Join作为分隔符连接,因此您拥有"1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6""<tr><td>"添加到前面,"</td></tr>"添加到结尾,最后一行是"<tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr>"

        outfs.Write("</table></body></html>");     
    }
    

    这会将HTML的结尾写入缓冲区,然后刷新并写入指定的文本文件。

    有几点需要注意。 args[0]args[1]用于保存命令行参数(即MakeMyTable.exe InFile.txt OutFile.txt),这些参数不是(根据我的经验)适用于ASP.NET应用程序。您需要对必要的文件(和路径)进行编码,或者允许用户指定输入文件和/或输出文件。 ASP.NET应用程序需要在有权访问这些文件的帐户下运行。

    如果CSV文件中有引用值,则需要处理这些值(例如,这在处理货币金额时非常常见),因为,上的拆分可能会导致错误拆分。我建议您查看TextFieldParser,因为它可以非常轻松地处理引用的字段。

    除非您确定文件中的每一行都具有相同数量的字段,否则您可能会在表格中形成格式不正确的HTML,并且无法保证其呈现方式。

    此外,建议您测试您正在打开的文件是否存在。可能还有更多,但这些是基础知识(可能已超出Stack Overflow的范围)。

答案 1 :(得分:1)

希望这有助于指明您正确的方向:

line = "<table>" + line;
foreach (string line in lines)
{
    line = "<tr><td>" + line;
    line.Replace(",", "</td><td>");
    line += "</td></tr>";
}
Response.Write(line + "</table>");

祝你学习顺利!