1

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

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

我了解如何在 PHP 中执行此操作,但我刚刚开始学习 ASP.Net/C#,如果有人有一些免费的 C# 资源和/或能够为我提供一段代码并解释发生了什么我会欣赏它。

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

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>");
    }

对于我在这里明显缺乏经验,我深表歉意。

4

2 回答 2

2

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

  1. 打开一个文件。
  2. 将包含步骤 1 中文件内容的表格的 HTML 字符串写入另一个文件。

让我们分解一下:

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

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

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

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

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

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

    foreach (var line in lines)

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

        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>作为分隔符的 by连接起来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 的范围)。

于 2012-04-18T00:19:51.640 回答
1

希望这将帮助您指出正确的方向:

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

祝你学习顺利!

于 2012-04-17T19:00:20.323 回答