您发布的代码示例完全符合您的要求:
- 打开一个文件。
- 将包含步骤 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 的范围)。