1

テキストファイルで特定のフレーズを検索し、その中にフレーズが含まれている場合はその行をテキストボックスに入力するコードを作成しようとしています。このコードにエラーはありませんが、まったく機能しません。誰が何が悪いのか知っていますか?私がやっていることがリモートで正しいかどうかはよくわかりません。

  {
    tuitDisplayTextBox.Text = "";
    string[] tuitFilePath = File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt");

    for (int i = 0; i < tuitFilePath.Length; i++)
    {
        if (tuitFilePath[i].Contains(searchTextBox.Text))
        {
            tuitDisplayTextBox.Text += tuitFilePath[i];
        }
    }
4

2 に答える 2

1

あなたのソリューションはうまくいくはずです...一致する最後の行、そしてその行だけです。

ただし、ここでは LINQ が役立ちます。これがうまくいくはずの解決策です。

tuitDisplayTextBox.Text = 
    File.ReadLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt")
        .Where(n => n.Contains(searchTextBox.Text)).Aggregate((a, b) =>
            a + Enviroment.NewLine + b);

ここでは、ファイルの行を に読み込み、IEnumerable<string>それをメソッドでフィルタリングしますWhere。これは基本的に、「この要素の条件が true の場合、この要素を返すもののリストに追加し、そうでない場合は、追加しないでください。」そしてAggregate、もう少し複雑です。基本的には、コレクションから最初の 2 つの項目を取得し、それらを介して値を返すラムダを渡します。次に、その結​​果と 3 番目の要素を使用してラムダを再度呼び出します。そして、その結果を受け取り、4 番目の要素でそれを呼び出します。等々。

これも機能する、あなたのものに似たいくつかのコードです:

tuitDisplayTextBox.Text = "";
IEnumerable<string> lines = 
    File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt");
StringBuilder sb = new StringBuilder
foreach (string line in lines)
{
    if (line.Contains(searchTextBox.Text))
    {
        sb.AppendLine(line);
    }
}
tuitDisplayTextBox.Text = sb.ToString();

ここは少し違います。最初に、すべての行をIEnumerable<string>呼び出された行に読み込みます。次に、StringBuilderオブジェクト (基本的には変更可能string) を作成します。その後、行を foreaches しIEnumerable<string>(ここではより適切だと思いました)、行に必要なテキストが含まれている場合は、その行と改行をStringBuilderオブジェクトに追加します。その後、インスタンスのstring表現を取得することにより、テキストボックスのテキストをそのすべての結果に設定します。StringBuilder

本当にfor ループが必要な場合は、for ループを使用するように変更されたコードを次に示します。

tuitDisplayTextBox.Text = "";
string[] lines =
    File.ReadAllLines(Server.MapPath("~") +"/App_Data/tuitterMessages.txt");
StringBuilder sb = new StringBuilder
for (int i = 0; i < lines.Length; i++)
{
    if (lines[i].Contains(searchTextBox.Text))
    {
        sb.AppendLine(lines[i]);
    }
}
tuitDisplayTextBox.Text = sb.ToString();
于 2013-06-01T07:36:13.497 に答える