需要从文本文件的单行中读取多个元素
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 框,我需要将值插入其中。
我将假设您只需要解析来自第一个参数的字符串。
您可以使用“?”拆分查询字符串作为分隔符。然后将生成的字符串按“=”拆分,并将它们分配给匿名对象,其中 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;
}
如果您需要定期执行此操作,您可以创建一个小实用程序 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]);
});
我尝试过使用 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 框,我需要将值插入其中。
我将假设您只需要解析来自第一个参数的字符串。
您可以使用“?”拆分查询字符串作为分隔符。然后将生成的字符串按“=”拆分,并将它们分配给匿名对象,其中 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;
}
如果您需要定期执行此操作,您可以创建一个小实用程序 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]);
});