2011-01-14 2 views
0

나는 제대로 작동하는 몇 가지 기능을 가지고 있습니다. 하나는 정규식을 사용하여 텍스트 상자의 단어 수를 계산하고 다른 하나는 정규식을 사용하여 동일한 텍스트 상자에서 특정 단어 (문자열)의 인스턴스를 계산합니다. 이 둘 모두 예상 값을 반환하는지 확인했습니다.DataGrid 문제 - 값은 항상 0을 표시합니까?

그러나 필자는 필자의 datagrid를 채우기 위해 함수를 사용하지 않는 것이 분명합니다. 왜냐하면 keywordcount는 항상 밀도와 마찬가지로 0으로 반환되기 때문입니다. 오전 MST이

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; 
} 

편집 8시 반 @ : 문제의 일부를 알아 낸

여기 내 코드입니다. 분할 문자로 "\ n"을 사용하면 작동하지 않습니다. 명백하게 그것은 캐리지 리턴을 포함하고 그것을 제출하는 하나의 방대한 덩어리로 모든 것을 단순히 "쪼개었다". 나는 그것을 "\ r"로 바꿨고 적어도 "Included"와 "Occurences"부분은 잘 작동합니다.

유일한 문제는 "밀도"가 작동하지 않는다는 것입니다. 나는 그것이 int로 선언 될 수 없다는 것을 깨닫는다; 하지만 그것은 여전히 ​​0을 반환합니다 - 심지어 밀도를 float 또는 var로 선언하는 경우에도 마찬가지입니다.

다음과 같은 것이 있습니까?

thedensity = keywordcount/wordcount; 

또한 .ToString() 함수는 소수점 이하의 모든 값을 잘라 버릴 수 있습니까? 예를 들어, 변수의 값이 0.43이면 0으로 변환됩니까? 그런 경우가 아니라면 어떤 변수 유형을 사용해야합니까? 나는 부유가 적절하다고 생각할 것이다.

다시 한번 감사드립니다!

EDIT @ 8:45 MST : 나도 여러 답변을 받아 들일 수 없습니다. '\ r'과 var 유형 모두 문제가되었습니다. 나는 두 개의 정수를 나눔으로써 플로트를 계산할 수 없다는 것을 깨닫지 못했습니다. 소스 변수를 float로 변경했을뿐만 아니라 밀도를 var로 변경했을 때도 효과가있었습니다.

두 번 고맙습니다!

-ootah

+0

DataGrid에서 항목으로 바인딩되는 데이터 형식이 KeywordDensity라고 가정합니다. KeywordCount가 올바르게 작동한다는 것은 우리에게 확실하지 않습니다. KeywordCount가 KeywordDensity의 코드 나 DataGrid의 Xaml 중 하나를 표시하지 못했던 것입니다. – AnthonyWJones

답변

1

정수로 계산합니다. WordCount는 나에게 많은 수의 키워드로 인식됩니다. 어쩌면 그 결과로 당신이 기대 한 결과를 얻지 못했을까요?

또 다른 질문, WordCount가 0을 반환하면 어떻게해야합니까? 이것은 예외를 던질 것이다. 이것은 결코 일어나지 않을까요? (가정하지는 않지만 그것을합니까?) 바인딩에서 예외가 throw되면 앱이 중지되지 않지만 결과는 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을 게시하면 도움이됩니다.

관련 문제