IRC聊天命令解析

时间:2014-04-12 14:29:39

标签: c# string

固定 我把代码放在这里给其他需要帮助解决自己问题的人(假设他们遇到了问题。

FIXED CODE THAT WORKS

    public static bool CommandExists(String value)
    {
        string[] commands = File.ReadAllText("commands.txt")
                       .Split()
                       .Where(x => x.StartsWith(value))
                       .Distinct()
                       .ToArray();
        return commands.Contains(value);
    }
    public static string CommandParse(String value, string nick)
    {
        IEnumerable<string> lines;
        lines = File.ReadLines("commands.txt");
        IEnumerable<string> command = lines
            .Where(d => d.StartsWith(value, 
                StringComparison.CurrentCultureIgnoreCase));
        foreach (string line in command) {
            string vals = line
                .Replace("@nick", nick)
                .Replace("@upnick", nick.ToUpper())
                .Replace(value + " ", "");
            return vals;
        }
        return null;
    }

所以我已经尝试了几个小时,我环顾四周,找不到任何与我想做的事情有关的事情。

我有一个文本文件我读的名为&#34; commands.txt&#34;我试图解析文本。这是内容:

  

!help Hello, current commands are: !help, !ver
  !ver Testing this

现在,如果我拉

string x1 = File.ReadAllLines("commands.txt").ToString();
string[] x2 = x1.Split(' ');
string x3 = x2[0];
Console.WriteLine(x3);

我得到的数据超出了数组的范围&#39;。我不知道我做错了什么。我也试图使用静态布尔&#39;如果命令存在则调用,到目前为止我得到了

public static bool CommandExists(String value)
{
    if (File.ReadAllLines("commands.txt").Contains(value.ToString())) {
        return true;
    }
    else
    { 
        return false; 
    }
}

并且它也不起作用。

导致该异常的原因是什么?

编辑:CommandParse()

    public static string CommandParse(string value, string nick)
    {
        string[] commands = File.ReadAllText("commands.txt")
               .Split()
               .Where(x => x.StartsWith("!"+value.ToLower()))
               .Distinct()
               .ToArray();
        string cmd = commands[1]
            .Replace("@nick", nick)
            .Replace("@nickup", nick.ToUpper());
        return cmd;
    }

现在我知道返回True,如何让它不返回true,但返回命令本身

1 个答案:

答案 0 :(得分:4)

ReadAllLines返回一个字符串数组,你正在使用ToString而不是获取行,你得到的字符串数组的类型名称不包含任何while-space所以{ {1}}不会更改任何内容。如果您想阅读所有文字,请使用Split(' ')方法。

ReadAllText

似乎您的所有命令都以string x1 = File.ReadAllText("commands.txt"); 开头,因此您可以将所有命令放入这样的数组中:

!

然后你的方法将如下所示:

string[] commands = File.ReadAllText("commands.txt")
                   .Split()
                   .Where(x => x.StartsWith("!"))
                   .Distinct()
                   .ToArray();

如果您想排除,请在public static bool CommandExists(String value) { string[] commands = File.ReadAllText("commands.txt") .Split() .Where(x => x.StartsWith("!")) .Distinct() .ToArray(); return commands.Contains(value); } 之后添加!