使用Streamreader制作翻译器

时间:2013-11-29 15:53:58

标签: c# .net csv streamreader

我的目标是创建一个转换用户输入的Web服务(所以只需要两个文本框和一个按钮)。我有一个字典作为.csv文件,其中两列用分号分隔(第一个是用户输入的单词,第二个是翻译)。我是c#的新手,我已经把一些代码拉到了一起,但它没有采取一个输入它采取整个列表

   [Empty]

为清晰起见编辑

我正在努力让用户可以输入他们想要翻译的作品,点击按钮然后翻译该单词

输入=文本框 输出=文本框

2 个答案:

答案 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;像我一样。