我的目标是创建一个转换用户输入的Web服务(所以只需要两个文本框和一个按钮)。我有一个字典作为.csv文件,其中两列用分号分隔(第一个是用户输入的单词,第二个是翻译)。我是c#的新手,我已经把一些代码拉到了一起,但它没有采取一个输入它采取整个列表
[Empty]
为清晰起见编辑
我正在努力让用户可以输入他们想要翻译的作品,点击按钮然后翻译该单词
输入=文本框 输出=文本框
答案 0 :(得分:2)
首先,最好加载一次字典并将其存储在更合适的集合中,例如Dictionary<K, V>
,其中输入是键,输出是值。
拥有表单的私人成员:
private Dictionary<string, string> _dictionary = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); // let's ignore case when comparing.
加载字典一次,仅在表单加载事件中加载:
using(var reader = new StreamReader(File.OpenRead(@"C:/dictionary.csv")))
{
while(!reader.EndOfStream)
{
string[] tokens = reader.ReadLine().Split(';');
_dictionary[tokens[0]] = tokens[1];
}
}
翻译单词现在很简单:
public string Translate(string input)
{
string output;
if(_dictionary.TryGetValue(input, out output))
return output;
// Obviously you might not want to throw an exception in this basis example,
// you might just go return "ERROR". Up to you, but those requirements are
// beyond the scope of the question! :)
throw new Exception("Sinatra doesn't know this ditty");
}
答案 1 :(得分:-1)
您可能需要在内存中读取文件,然后在集合/数组中搜索用户输入的值。
这是一个非常基本的例子:
List<KeyValuePair<string, string>> items = new List<KeyValuePair<string, string>>();
..
..
// some function called at startup to read the entire file in the collection
private void LoadData()
{
var reader = new StreamReader(File.OpenRead(@"C:\dictionary.csv"));
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(';');
var kvp = new KeyValuePair<string, string>(values[0], values[1]);
items.Add(kvp);
}
}
private string SearchWord(string inputWord)
{
string returnValue = string.Empty;
foreach(var currentItem in items)
{
if (string.Equals(inputWord, currentItem, StringComparison.OrdinalIgnoreCase))
{
returnValue = currentItem.Value;
break;
}
}
return returnValue;
}
它在做什么? 我们在列表中持有一个全局项目集合。列表中的每个项目都包含一个键和一个关联的值。关键是翻译FROM的词,值是翻译的词。
例如,当应用程序启动时,您调用LoadData()将文件加载到集合中。
当用户按下按钮时,您调用“SearchResult”将文本框中的输入值传递给它。然后它会遍历集合以查找输入值,如果找到它,它会将翻译后的单词返回给您,因此您可以将该值设置为另一个文本框,例如。
再次,非常基本和简单。
我没有去词典,但它更好,纯粹是因为我不太了解你的要求。但如果您确定没有重复的单词(键),那么您应该使用字典而不是List&gt;像我一样。