我知道之前已经问过这个问题,但我对答案不太满意(考虑到它没有解释发生了什么)。
我的具体问题是:如何打开一个逗号分隔的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>");
}
我为我在这里明显缺乏经验而道歉。
答案 0 :(得分:2)
您发布的代码示例完全符合您的要求:
让我们分解一下:
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>");
祝你学习顺利!