2011-01-14 11 views
0

私は正常に動作することがわかっている機能をいくつか持っています。正規表現を使ってテキストボックス内の単語数を数えるだけで、もう1人は正規表現を使って同じテキストボックス内の特定の単語(文字列)のインスタンスを数えます。私はこれらの両方が期待値を返すことを確認しました。DataGridの問題 - 値は常に0を表示しますか?

しかし、私は明らかに、何かの理由で、キーワードカウントが常にゼロとして返されるので、私のデータグリッドに何らかの形でデータを取り込むという機能を台無しにしています。

は、ここに私のコードです:

public List<KeywordDensity> LoadCollectionData() 
{ 
    string thearticle = txtArticle.Text; 
    string[] keywordsarray = txtKeywords.Text.Split('\n'); 

    bool isincluded = false; 
    int keywordcount = 0; 
    int thedensity = 0; 

    List<KeywordDensity> lsikeywords = new List<KeywordDensity>(); 
    foreach (string s in keywordsarray) 
    { 
     if (s.Trim() != "") 
     { 
     keywordcount = KeywordCount(thearticle, s); 
     thedensity = keywordcount/WordCount(thearticle); 

     if (thearticle.Contains(s)) 
     { 
      isincluded = true; 
     } 
     else 
     { 
      isincluded = false; 
     } 

     lsikeywords.Add(new KeywordDensity() 
     { 
      included = isincluded,  
      keyword = s, 
      occurences = keywordcount.ToString(), 
      density = thedensity.ToString() 
     }); 
     } 
    } 
    return lsikeywords; 
} 

EDIT 8:30 MST @:問題の一部を考え出しました。分割文字として「\ n」を使用していませんでした。明らかに、キャリッジリターンを含めてそれを提出することは、単に全体を1つの大規模な塊に「分割する」ことでした。私はそれを "\ r"に変更し、少なくとも "Included"と "Occurences"の部分はうまく動作します。

ここで唯一の問題は、「濃度」が機能していないことです。私はintとして宣言することはできませんが実現します。しかし、それはまだ0を返す - 私が密度をfloatまたはvarとして宣言しても。

何か問題がありますか?

thedensity = keywordcount/wordcount; 

また、.ToString()関数は、小数点に加えてそれより前のすべてを切り捨てますか?例えば、変数の値が0.43の場合、それは単に0に変換されますか?そうでない場合は、どのような変数タイプを使用する必要がありますか?私はフロートが適切だと思うだろう。

もう一度おねがいします!

EDIT @ 8:45 MST:多すぎる回答を受け入れることはできません。 '\ r'とvarの両方のタイプが問題でした。 2つの整数を分割して浮動小数点数を計算することができないことに気づいていませんでした。ソース変数を浮動小数点数に変更しただけでなく、密度変数を変更したときも同様に動作しました。

二重の感謝!

-ootah

+0

DataGridの項目としてバインドされているデータ型がKeywordDensityであると仮定します。 KeywordCountが正しく動作していることを保証しているので、KeywordDensityのコードとDataGridのXamlのどちらも表示していないというのは残念です。 – AnthonyWJones

答えて

1

あなたは整数で計算しています。 WordCountは大きな数字で私には聞こえるが、キーワードカウントはない。たぶんあなたが期待した結果が得られなかったのでしょうか?

もう1つの質問ですが、WordCountでゼロが返されたらどうなりますか?これは例外をスローします。これは決して起こらないのですか?バインディングで例外がスローされると、アプリケーションはハングしませんが、結果はfalseになります。

1

ここではいくつか変更します。最初は、それに接続されたスペースが含まれないことを確認するキーワードを再割り当てするために、次のようになります。

foreach (string s in keywordsarray) 
{ 
    string key_word = s.Trim(); 
    if (key_word != "") 
    { 
     // Replace all uses of s with key_word 
     if(thearticle.Contains(key_word)) 
     // ... 

第二には、直接isincludedを割り当てるには、次のようになります。

isincluded = thearticle.Contains(key_word);

その後、私はちょうどことを確認してしまいますtxtKeywordsが実際に改行で区切られたリストです:

// Is this really strings separated by newlines? 
string[] keywordsarray = txtKeywords.Text.Split('\n'); 
1

はい、SwDevMan81は良い点を持っています - keywordsarray []に実際にいくつかの単語が含まれていることを確認してください。

ユーザーがSilverlightテキストボックスに入力すると、区切り記号は '\ r'(少なくとも私はそれがそのように動作するのを知っていることは分かっています)。

分割を行うために正規表現を使用する方が良いかもしれません。

0

キーはどこにこのデータを埋めているのですか? LoadCollectionDataへの呼び出しは、リストを使用しているためコードのコンストラクタにある必要があります。それ以外の場合はObservableCollectionを使用してください。また、GridのXAMLを投稿することも役立ちます。

関連する問題