文本文件存储数据

时间:2011-03-01 08:44:16

标签: c# text-files streamreader

我有一个要读入的文本文件(这不是问题),该文件分为三个部分,每个部分都有不同的标题,即块{A},块{B}和块{C}。

在每个块都是文本行之后,每行包含一个我需要捕获的“#”之后的单词。

棘手的一点是,块A中的所有单词都具有第二含义或加权。块A中的所有单词都表示权重为1,而块B表示权重为2,块C表示权重为3。

文本文件中不存在这些权重值,并且无法编辑文本文件以包含它们。

所以我需要一种方法来读取数据(不是问题),检查其中的哪个块(查找'Block {*}')然后将'#'后面的单词与其权重(1或2或3)。

我需要一些关于存储数据的最佳机制的建议,以便可以比较它,因为文本框是逐个字符更新的。

将文本框字符串(每次按键后)与文本文件中的所有单词或从中提取的数据进行比较,如果它们匹配,则代码使用与该单词关联的加权值。 / p>

2 个答案:

答案 0 :(得分:2)

首先,您可以创建一个简单的类来存储数据

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

现在匹配将包含所有单词的列表,这些单词以与文本框中所写相同的文本开头,并且已经排序,以便最重要的单词首先出现在列表中。

答案 1 :(得分:0)

您可以使用自定义XML格式或数据库表来执行此操作。