您發佈的代碼示例做你問什麼:
- 打開文件。
- 將表格的HTML字符串從步驟1寫入另一個文件。
讓我們把它分解:
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 Statement (C# Reference)。
outfs.Write("<html><body><table>");
outfs.Write
調用的StreamWriter(StreamWriter.Write Method (String))的Write方法。實際上,在你的代碼片段中,除非你退出使用塊,否則什麼都不寫入文件 - 它被寫入緩衝區。退出使用塊將刷新緩衝區並寫入文件。
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,因爲它可以輕鬆處理引用的字段。
除非您確定文件中的每一行具有相同數量的字段,否則您可能會冒着在表格中形成格式不良的風險,並且無法保證它將如何呈現。
此外,建議您測試打開的文件是否存在。可能還有更多,但這些是基礎知識(可能已經超出了Stack Overflow的範圍)。
數組:http://msdn.microsoft.com/en-us/library/aa288453%28v=vs.71%29.aspx – 2012-04-17 18:38:26
閱讀文本文件:http://www.csharp-station.com/HowTo /ReadWriteTextFile.aspx – 2012-04-17 18:39:20
你的具體問題是什麼? – 2012-04-17 18:39:57