我有一个要读入的文本文件(这不是问题),该文件分为三个部分,每个部分都有不同的标题,即块{A},块{B}和块{C}。
在每个块都是文本行之后,每行包含一个我需要捕获的“#”之后的单词。
棘手的一点是,块A中的所有单词都具有第二含义或加权。块A中的所有单词都表示权重为1,而块B表示权重为2,块C表示权重为3。
文本文件中不存在这些权重值,并且无法编辑文本文件以包含它们。
所以我需要一种方法来读取数据(不是问题),检查其中的哪个块(查找'Block {*}')然后将'#'后面的单词与其权重(1或2或3)。
我需要一些关于存储数据的最佳机制的建议,以便可以比较它,因为文本框是逐个字符更新的。
将文本框字符串(每次按键后)与文本文件中的所有单词或从中提取的数据进行比较,如果它们匹配,则代码使用与该单词关联的加权值。 / p>
答案 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格式或数据库表来执行此操作。