2017-05-05 3 views
3

텍스트 파일에서 검색하고 모델 뷰 뷰 모델을 사용하여 필요한 데이터를 가져 오는 방법을 알 수 없습니다. 기본적으로 사전 앱을 만들어야하며 단어, 언어 및 설명이 텍스트 파일에 있습니다. Like :MVVM에서 텍스트 파일의 데이터 가져 오기

cat; e 영어; 그것은 4 다리 동물입니다

모델에서 나는 클라이언트가 단어와 단어의 설명이 표시되어야하는 두 개의 다른 상자와 단어를 쓰는 텍스트 상자가 있습니다.

방금이 파일을 검색하는 방법을 알 수 없습니다. 나는 온라인 검색을 시도했지만 아무 것도 내 정확한 질문을 만나는 것처럼 보였다.

답변

1

파일을 변경하지 않으면 응용 프로그램을 실행할 때 전체 파일을 읽지 않고 뷰 모델의 모델 목록에 데이터를 넣을 수 있습니다. 이 같이

는 기본적으로 CSV 파일이며, 각 항목을 가정하는 것은 우리가 당신의 모델로 파일을 처리하기 위해 닷넷 CSV 파서를 사용할 수있는 구분 기호로 세미콜론을 사용하여 라인 :

기본 모델 :

public class DictionaryViewModel { 

    // This will be a INotify based property in your VM 
    public List<DictionaryEntryModel> DictionaryEntries { get; set; } 

    public DictionaryViewModel() { 
     DictionaryEntries = new List<DictionaryEntryModel>(); 

     // Create a parser with the [;] delimiter 
     var textFieldParser = new TextFieldParser(new StringReader(File.ReadAllText(filePath))) 
     { 
      Delimiters = new string[] { ";" } 
     }; 

     while (!textFieldParser.EndOfData) 
     { 
      var entry = textFieldParser.ReadFields(); 
      DictionaryEntries.Add(new DictionaryEntryModel() 
       { 
        Word = entry[0], 
        Language = entry[1], 
        Description = entry[2] 
       }); 
     } 

     // Don't forget to close! 
     textFieldParser.Close(); 
    } 
} 

이제 부동산 DictionaryEntries를 사용하여보기를 바인딩 할 수 있습니다 : 생성자와

public class DictionaryEntryModel { 
    public string Word { get; set; } 
    public string Language { get; set; } 
    public string Description { get; set; } 
} 

예보기 모델은 모델을 작성하는 앱이 열려있는 한 전체 파일은 DictionaryEntryModel의 목록으로 보존됩니다.

희망이 도움이됩니다.

+1

대단히 감사합니다. 그것은 작동하고 정말 감사합니다! –

+0

@TatianaGancheva 나는 그것이 당신을 위해 일하고있어 기뻐요! :) 당신의 질문이 해결되었다고 생각되면 답변으로 체크하는 것을 고려해주십시오. –

0

여기서는 MVVM 부분을 다루지 않지만 대/소문자를 구분하지 않는 정규 표현식을 사용하여 검색어에 따라 결과 데이터를 얻는 방법은 텍스트 파일을 검색하는 방법입니다.

string dictionaryFileName = @"C:\Test\SampleDictionary.txt"; // replace with your file path 
string searchedTerm = "Cat"; // Replace with user input word 

string searchRegex = string.Format("^(?<Term>{0});(?<Lang>[^;]*);(?<Desc>.*)$", searchedTerm); 

string foundTerm; 
string foundLanguage; 
string foundDescription; 

using (var s = new StreamReader(dictionaryFileName, Encoding.UTF8)) 
{ 
    string line; 
    while ((line = s.ReadLine()) != null) 
    { 
     var matches = Regex.Match(line, searchRegex, RegexOptions.IgnoreCase); 
     if (matches.Success) 
     { 
      foundTerm = matches.Groups["Term"].Value; 
      foundLanguage = matches.Groups["Lang"].Value; 
      foundDescription = matches.Groups["Desc"].Value; 
      break; 
     } 
    } 
} 

그런 다음 결과 문자열을 사용자에게 표시 할 수 있습니다.

일반적인 입력 단어에서는 작동하지만 사용자가 정규식 구문을 방해하는 특수 문자를 입력하면 이상한 결과가 발생할 수 있습니다. 이 중 대부분은 Regex.Escape(searchedTerm)을 사용하여 해결할 수 있습니다.

관련 문제