Данные для хранения текстовых файлов - PullRequest
2 голосов
/ 01 марта 2011

У меня есть текстовый файл для чтения (что не является проблемой), файл разделен на три раздела, каждый из которых имеет разные заголовки, то есть блок {A}, блок {B} и блок {C}.

После каждого блока есть строки текста, каждая строка содержит слово после "#", которое мне нужно записать.

Хитрый бит - все слова в блоке А имеют второе значение или весовое значение. Все слова в блоке A имеют весовые коэффициенты 1, в то время как блок B - весовые коэффициенты 2, а блок C - весовые коэффициенты 3.

Эти значения веса отсутствуют в текстовом файле, и текстовый файл не может быть отредактирован для их включения.

Так что мне нужен метод для чтения данных (не проблема), проверьте, в каком блоке они находятся (ищите 'Block {*}'), затем сохраните слово после '#' с его весом (1 или 2 или 3).

Мне нужны некоторые предложения относительно лучшего механизма хранения данных, чтобы их можно было сравнивать с тем, как текстовое поле обновляется посимвольно.

Строка текстового поля сравнивается (после каждого нажатия клавиши) со всеми словами в текстовом файле или данными, извлеченными из него, и, если они совпадают, весовое значение, связанное с этим словом, используется кодом.

Ответы [ 2 ]

2 голосов
/ 01 марта 2011

Прежде всего, вы можете создать простой класс для хранения ваших данных

public class Words
{
  public string Word{get;set;}
  public int Weigth{get;set;}
}

Затем выполните что-то вроде этого для обработки файла:

  var words = new List<Words>();
  string[] lines = File.ReadAllLines("myFilename");
  int weigth = 0;
  foreach( var line in lines )
  {
    if (line == "block{A}") weigth = 1;
    else if (line == "block{B}") weigth = 2;
    else if (line == "block{C}") weigth = 3;
    else words.Add( new Words{ Word = line.Replace("#",""), Weigth = weigth});
  }

Теперь, так как у вас естьСписок в памяти, поиск должен быть быстрым.Например, чтобы определить, есть ли у вас какие-либо записи, соответствующие написанному тексту, вы можете сделать что-то вроде этого:

var matches = words.Where(w => w.Word.StartsWith(myTextBox.Text)).OrderByDescending(w => w.Weigth);

Теперь совпадения будут содержать список всех ваших слов, начинающихся с того же текста, который написан втекстовое поле и будет уже отсортировано, так что слова с наибольшим весом появятся первыми в списке.

0 голосов
/ 01 марта 2011

Вы можете использовать пользовательский формат XML или таблицу базы данных, чтобы сделать это.

...