【问题标题】:Need to read multiple elements from single line from a text file需要从文本文件的单行读取多个元素
【发布时间】:2015-07-08 04:45:59
【问题描述】:

我尝试过使用 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 框,我需要将值插入其中。

【问题讨论】:

  • 你想打印什么?
  • 请更具体地解释您“无法弄清楚如何使拆分工作”的方式。提供a good, minimal, complete code example,清楚地显示您尝试过的内容,并详细说明代码的作用以及与您希望它做的不同之处。

标签: c# text split line


【解决方案1】:

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

【讨论】:

  • 我很高兴能帮上忙!有人介意告诉我为什么这被否决了吗?如果这里有问题,也许 OP 应该知道。
  • 不知道为什么它被否决了 :( 我已经解决了这个问题!对不起,我对 StackOverflow 还是很陌生 :P 再次感谢你!!!
【解决方案2】:

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

您可以使用 '?' 拆分查询字符串作为分隔符。然后将生成的字符串用 '=' 拆分,并将它们分配给匿名对象,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;
}

如果你需要定期做,你可以创建一个小的实用程序类。

【讨论】:

  • 无缘无故投反对票是没有意义的,你不觉得吗,匿名投反对票?
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

    这给了我这本字典:

    【讨论】:

    • 看来我们有一个猖獗的反对者。每个人都投了反对票。我不明白为什么。我们都错过了 OP 的问题吗?
    【解决方案5】:
    str.Split(' ')[2].Split('?').Where(l => l.Split('=').Length > 1).ToList().ForEach(item =>
                {
                    Console.WriteLine("{0} && {1}", item.Split('=')[0], item.Split('=')[1]);
                });
    

    【讨论】:

      猜你喜欢
      • 2015-01-28
      • 1970-01-01
      • 2017-06-26
      • 2021-02-10
      • 1970-01-01
      • 2020-07-31
      • 2011-11-08
      • 2013-03-22
      相关资源
      最近更新 更多