需要从文本文件中读取单行中的多个元素

时间:2015-07-08 04:46:00

标签: c# text split line

我尝试过使用Streamwriter,readline,使用.Contains设置var&if和if语句(" stuff");但我无法打印出文本的特定部分

start ShooterGameServer.exe TheIsland?QueryPort=27015?SessionName=Cain532?MaxPlayers=10?listen?ServerPassword=12345?ServerAdminPassword=******** -nosteamclient -game -server -log

我需要阅读" SessionName"," MaxPlayers"," ServerPassword"," ServerAdminPassword"

之后的内容

我无法弄清楚如何让Split工作:(

我有3个文本框和一个数字下拉框我需要将值插入。

5 个答案:

答案 0 :(得分:0)

我假设你只需要解析第一个参数的字符串。

您可以使用'?'分割查询字符串。作为分隔符。然后将结果字符串拆分为' ='如果特定参数没有任何值,则将它们分配给匿名对象NameValue' properties, with Value`默认为空字符串:

var queryString = "TheIsland?QueryPort=27015?SessionName=Cain532?MaxPlayers=10?listen?ServerPassword=12345?ServerAdminPassword=********";
var result = queryString
    .Split('?')
    .Select(p => p.Split('=')
    .Select(d => new {Name = d[0], Value= d.Count() >=2 ? d[1] : string.Empty});
var sessionNameParam = result.FirstOrDefault(r => r.Name == "SessionName");
if (sessionNameParam != null) {
    var sessionNameValue = sessionNameParam.Value;
}
var maxPlayersParam = result.FirstOrDefault(r => r.Name == "MaxPlayers");
if (maxPlayersParam != null) {
    var maxPlayersValue = maxPlayersParam.Value;
}

如果您需要定期执行此操作,则可以创建一个小型实用程序类。

答案 1 :(得分:0)

我想您可以从文本文件中读取字符串,现在您需要检索其中的信息。尝试 .Split() 分隔您需要的字符串并检索相应的信息。

        string fileContent = @"start ShooterGameServer.exe TheIsland? QueryPort=27015?SessionName=Cain532?MaxPlayers=10?listen?ServerPassword=12345?ServerAdminPassword=******** -nosteamclient -game -server -log";
        Dictionary<string, string> content = new Dictionary<string, string>();
        string selectedSection = fileContent.Split(' ')[2];
        foreach (var singleOption in selectedSection.Split('?'))
        {
            if (singleOption.Split('=').Length == 2)
            {
                content.Add(singleOption.Split('=')[0], singleOption.Split('=')[1]);                    
            }
        }

要获得所需的值,请使用带有foreach循环的 content 中的相应键。

        foreach (var singleContent in content)
        {
            Console.WriteLine(singleContent.Key + " : " + singleContent.Value);
        }

答案 2 :(得分:0)

您可以使用C#string.Split()方法来分离出您需要的内容。

        string input = "start ShooterGameServer.exe TheIsland?QueryPort=27015?SessionName=Cain532?MaxPlayers=10?listen?ServerPassword=12345?ServerAdminPassword=******** -nosteamclient -game -server -log";
        string[] parts = input.Split('?', ' '); // Split string by '?' and ' '
        string output = "";
        foreach(var part in parts)
        {
            if(part.StartsWith("ServerAdminPassword")) // Put what you are looking for here
                output = part.Split('=')[1]; // Get right side of '='
        }
        Console.WriteLine(output);

答案 3 :(得分:0)

我会这样做(如果文本的一般格式保持不变):

var @params =
    text
        .Split(' ')[2]
        .Split('?')
        .Skip(1)
        .Where(x => x.Contains("="))
        .Select(x => x.Split('='))
        .ToDictionary(x => x[0], x => x[1]);

这给了我这本词典:

parameters

答案 4 :(得分:0)

str.Split(' ')[2].Split('?').Where(l => l.Split('=').Length > 1).ToList().ForEach(item =>
            {
                Console.WriteLine("{0} && {1}", item.Split('=')[0], item.Split('=')[1]);
            });