1

以前に質問されたことは知っていますが、答えには満足していませんでした (何が起こっているのかを説明していないことを考慮して)。

私の具体的な質問は、カンマ区切りで行が改行で区切られている csv/text ファイルを開き、C# を使用して HTML テーブルに入れるにはどうすればよいですか?

PHP でこれを行う方法は理解していますが、ASP.Net/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] で指定されたファイルが開かれ、すべての行が文字列配列に読み込まれます (要素ごとに 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.WriteStreamWriter の 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 の形式が適切でなく、レンダリング方法が保証されない可能性があります。

さらに、開いているファイルが存在することをテストすることをお勧めします。おそらく他にもありますが、これらは基本的なものです (そして、既にスタック オーバーフローの範囲を超えている可能性があります)。

于 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 に答える