投稿したコードサンプルは、まさにあなたが求めていることを行います:
- ファイルを開きます。
- 手順 1 のファイルの内容を含むテーブルの HTML の文字列を別のファイルに書き込みます。
それを分解しましょう:
var lines =File.ReadAllLines(args[0]);
これにより、args[0] で指定されたファイルが開かれ、すべての行が文字列配列に読み込まれます (要素ごとに 1 レイヤー)。File.ReadAllLines メソッド (文字列)を参照してください。
using (var outfs = File.AppendText(args[1]))
{
File.AppendText メソッドは、StreamWriter を作成して既存のファイルにテキストを追加します (存在しない場合は作成します)。ファイル名 (および場合によってはパス) は args[1] にあります。このusing
ステートメントは、StreamWriter を 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) インデックスから開始して、文字列 array 内のすべての要素のループを開始します。必要な場合は、(C# リファレンス) の foreach を参照してください。
outfs.Write("<tr><td>" + string.Join("</td><td>", line.Split(',')) + "</td></tr>");
String.Join はここで重要な部分であり、ほとんどの作業がここで行われます。 String.Join Method (String, String[])に技術的な詳細がありますが、本質的にここで起こっていることは、2 番目の引数 ( 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]
コマンド ライン引数 (つまり、MakeMyTable.exe InFile.txt OutFile.txt) を保持するためにargs[1]
使用されますが、(私の経験では) ASP.NET アプリケーションには適用できません。必要なファイル (およびパス) をコーディングするか、ユーザーが入力ファイルや出力ファイルを指定できるようにする必要があります。ASP.NET アプリケーションは、これらのファイルへのアクセスも許可されているアカウントで実行する必要があります。
CSV ファイルで値を引用している場合は、それらを処理する必要があります (たとえば、金額を処理する場合、これは非常に一般的です) ,
。引用符で囲まれたフィールドを非常に簡単に処理できるので、 TextFieldParserを見ることをお勧めします。
ファイル内の各行に同じ数のフィールドが含まれていることが確実でない限り、テーブル内の HTML の形式が適切でなく、レンダリング方法が保証されない可能性があります。
さらに、開いているファイルが存在することをテストすることをお勧めします。おそらく他にもありますが、これらは基本的なものです (そして、既にスタック オーバーフローの範囲を超えている可能性があります)。