-1

私はこの機能を持っています:

private void button6_Click(object sender, EventArgs e)
{
    crawlLocaly1 = new CrawlLocaly();
    crawlLocaly1.StartPosition = FormStartPosition.CenterParent;
    DialogResult dr = crawlLocaly1.ShowDialog(this);
    if (dr == DialogResult.Cancel)
    {
        crawlLocaly1.Close();
    }
    else if (dr == DialogResult.OK)
    {
        //LocalyKeyWords.Add(crawlLocaly1.getText() + "," + mainUrl);
        if(LocalyKeyWords.ContainsKey(mainUrl)) 
        {
            LocalyKeyWords[mainUrl].Add(crawlLocaly1.getText());


        }
        else
        {
            LocalyKeyWords.Add(mainUrl, new List<string>(new string[]
            {
                crawlLocaly1.getText()
            }
            ));
        } 
        crawlLocaly1.Close();
    }
}

ユーザーが textBox に何かを入力して [OK] をクリックすると、LocalKeyWords の結果は Dictionary> のようになります。

インデックス 0 には、たとえば次のようになります。http://www.google.com ","google google は、 http://www.google.comに属するキーです。

ユーザーがURLにキーワードを1回入力すると、2番目の部分に移動し、ユーザーが同じURLのキーを変更すると最初の部分に移動し、ユーザーがURLを変更した場合は2番目の部分に移動します部。

最初にURLのキーを配置し、2番目に同じURLのキーを更新するか、新しいURLに新しいキーを配置します。

したがって、リストは次のようになります。

index 0 http://www.google.com,google
index 1 http://www.microsoft.com,com

などなど...そして、この関数は正しく機能しています。ハード ディスク上のテキスト ファイルにリストを追加するだけです。したがって、Form1 レベルには streamwriter w = new streamwriter(@"d:\test.txt"); があります。

実際、リストでブレークポイントを使用している場合、左側に url then が表示され、キーワード以外の何かが表示されます。

 [0] = {[http://www.google.co.il, System.Collections.Generic.List`1[System.String]]}

それはバグでも何かでもなく、ブレークポイントにあるだけです。代わりに System.Collections.Generic.List`1[System.String] のようなキーワードが表示されるはずでした: google

テキストファイル形式が次のようになるように、リスト値をテキストファイルに書き込むにはどうすればよいですか。

0 http://www.google.com,google
1 http://www.microsoft.com,hello
2 http://www.cnet.com,Daniel

0 1 2 はインデックスを提示し、url は mainUrl を提示し、右の sie はキー (ユーザーが入力したキーワード) を提示します。

次に、テキスト ファイルから lixtBox に値を読み戻すにはどうすればよいでしょうか。したがって、コンストラクターでプログラムを実行すると、テキスト ファイルが読み取られ、listBox に次の形式で表示されます。

url: http://www.google.com --- keword: google
url: http://www.microsoft.com --- keword: hello
url: http://www.cnet.com --- keword: Daniel

そのため、ユーザーはテキスト ファイルよりも listBox の方が適切に表示されます。

4

2 に答える 2

0

次の簡単なコードを試して、値をテキストファイルに書き込むことができます。

        int count = 0;
        foreach(KeyValuePair<string, string> kvp in LocalyKeyWords)
        {
            w.WriteLine(count.ToString() + " " + kvp.Key + " " + kvp.Value);
            count++;
        }
        w.Close();

また、次のコードを使用してそのテキスト ファイルを読み取ることもできます。テキスト ファイルに 3 つの文字列がすべて空白文字で区切られているかどうかはチェックされないことに注意してください。また、保存しているテキストに空白文字が含まれている場合は、ファイル内の文字列を特殊文字で区切る必要があります。

        TextReader r = new StreamReader(@"d:\test.txt");
        string line = string.Empty;
        while ((line = r.ReadLine()) != null)
        {
            string[] data = line.Split(new char[] { ' ' },  StringSplitOptions.RemoveEmptyEntries);
            ListViewItem lvi = new ListViewItem("url: " + data[1] + " " + data[2]);
            listView1.Items.Add(lvi);
        }
于 2012-10-09T19:01:29.277 に答える
0

デバッガーが伝えていることは正確です。文字列ではなく文字列のリストをコレクションに追加しているため、デバッガーは文字列ではなくリストを表示します。ツールが間違っていると考えるのは初心者の間違いです。

LocalyKeyWords.Add(mainUrl, new List<string>(new string[] 

ちなみに、そのステートメントは構文的にも正しくありません-閉じ括弧がありません.

于 2012-10-09T19:29:23.753 に答える