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

Need to read multiple elements from single line from a text file

我尝试过使用 Streamwriter、readline、设置 var 和 if 语句与 .Contains("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 个文本框和一个 numericupdown 框,我需要将值插入其中。

我将假设您只需要解析来自第一个参数的字符串。

您可以使用“?”拆分查询字符串作为分隔符。然后将生成的字符串按“=”拆分,并将它们分配给匿名对象,其中 NameValue' properties, withValue` 默认为空字符串,如果特定参数没有任何值:

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;
}

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

我想您可以从文本文件中读取字符串,现在您需要检索其中的信息。尝试 .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]);                    
            }
        }

要获得所需的值,请使用来自 content 的适当键和 foreach 循环。

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

你可以使用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);

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

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

这给了我这本字典:

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