我尝试过使用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个文本框和一个数字下拉框我需要将值插入。
答案 0 :(得分:0)
我假设你只需要解析第一个参数的字符串。
您可以使用'?'分割查询字符串。作为分隔符。然后将结果字符串拆分为' ='如果特定参数没有任何值,则将它们分配给匿名对象Name
和Value' 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]);
这给了我这本词典:
答案 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]);
});