C# 从文本文件中读取行并将其排序为单独的变量
config.txt(内容) C#代码 进展顺利。您可以改用: 为了将成员存储在单独的变量中,可以使用反射或简单地映射硬编码的每个变量。以下是反射方式:C# 从文本文件中读取行并将其排序为单独的变量,c#,C#,config.txt(内容) C#代码 进展顺利。您可以改用: 为了将成员存储在单独的变量中,可以使用反射或简单地映射硬编码的每个变量。以下是反射方式: public class MyVars { public string databaseHost; public string databaseUsername; public string databasePassword; public string databaseName; } var instance
public class MyVars
{
public string databaseHost;
public string databaseUsername;
public string databasePassword;
public string databaseName;
}
var instance = new MyVars();
var type = typeof(MyVars);
File.ReadAllLines("config.txt").
Select(l => l.Split(new char[]{'=',';'})).
ForEach(a => type.GetField(a[0].Trim()).
SetValue(instance, a[1].Trim()));
您可以改为使用:
为了将成员存储在单独的变量中,可以使用反射或简单地映射硬编码的每个变量。以下是反射方式:
public class MyVars
{
public string databaseHost;
public string databaseUsername;
public string databasePassword;
public string databaseName;
}
var instance = new MyVars();
var type = typeof(MyVars);
File.ReadAllLines("config.txt").
Select(l => l.Split(new char[]{'=',';'})).
ForEach(a => type.GetField(a[0].Trim()).
SetValue(instance, a[1].Trim()));
这里有一种方法。同样,有很多工具可以在NuGet.org上重用。这是基于上面列出的格式,名称/值由
=
符号分割。它不会删除尾随的
但我不确定这是出于有意还是出于其他原因而存在于文本文件中。最简单的方法是根本不包括它
// top of code file
using System.Linq;
using System.IO;
// top of code file
public Config config { get; set; }
public void ParseMethod() {
var text = System.IO.File.ReadAllLines("config.txt")
.Select(x => x.Split(new[] {'='}, StringSplitOptions.RemoveEmptyEntries))
.Where(x => x.Length > 1)
.Select(x => new {Name = x[0].Trim(), Value = x[1].Trim()})
.ToList();
config = new Config(){
DatabaseHost = text.FirstOrDefault(x => x.Name == "DatabaseHost")?.Value,
DatabaseUsername = text.FirstOrDefault(x => x.Name == "DatabaseUsername")?.Value,
DatabasePassword = text.FirstOrDefault(x => x.Name == "DatabasePassword")?.Value,
DatabaseName = text.FirstOrDefault(x => x.Name == "DatabaseName")?.Value,
};
}
Config.cs
public class Config
{
public string DatabaseHost { get; set; }
public string DatabaseUsername { get; set; }
public string DatabasePassword { get; set; }
public string DatabaseName { get; set; }
}
这里有一种方法。同样,有很多工具可以在NuGet.org上重用。这是基于上面列出的格式,名称/值由
=
符号分割。它不会删除尾随的
但我不确定这是出于有意还是出于其他原因而存在于文本文件中。最简单的方法是根本不包括它
// top of code file
using System.Linq;
using System.IO;
// top of code file
public Config config { get; set; }
public void ParseMethod() {
var text = System.IO.File.ReadAllLines("config.txt")
.Select(x => x.Split(new[] {'='}, StringSplitOptions.RemoveEmptyEntries))
.Where(x => x.Length > 1)
.Select(x => new {Name = x[0].Trim(), Value = x[1].Trim()})
.ToList();
config = new Config(){
DatabaseHost = text.FirstOrDefault(x => x.Name == "DatabaseHost")?.Value,
DatabaseUsername = text.FirstOrDefault(x => x.Name == "DatabaseUsername")?.Value,
DatabasePassword = text.FirstOrDefault(x => x.Name == "DatabasePassword")?.Value,
DatabaseName = text.FirstOrDefault(x => x.Name == "DatabaseName")?.Value,
};
}
Config.cs
public class Config
{
public string DatabaseHost { get; set; }
public string DatabaseUsername { get; set; }
public string DatabasePassword { get; set; }
public string DatabaseName { get; set; }
}
如果您发布文本文件的内容,这将有所帮助。另外,如果这是标准的CSV文件格式,则现有的工具(search NuGet.org)可以为您进行解析。
“我已经尝试使用String.Split。”
-与问题中的代码不符。你到底尝试了什么?以什么方式没有产生预期的结果?我不知道如何正确地做。对不起,我确实在我的txt上发布了内容file@ShawnCoker-你说得对,我看不出那是内容。我会编辑你的帖子…如果你发布了文本文件的内容,这会有所帮助。另外,如果这是标准的CSV文件格式,则现有的工具(search NuGet.org)可以为您进行解析。“我已经尝试使用String.Split。”
-与问题中的代码不符。你到底尝试了什么?以什么方式没有产生预期的结果?我不知道如何正确地做。对不起,我确实在我的txt上发布了内容file@ShawnCoker-你说得对,我看不出那是内容。我会编辑你的帖子…不知道这如何帮助OP获得他们在问题中提到的那些公共字段。到目前为止,这个问题还无法回答,因为没有提到文件的格式。^这根本不能回答OP。他已经在读了。@Igor,Districia-没有注意到问题的第二部分,我已经编辑并回答了。不确定这如何帮助OP获得他们在问题中提到的公共字段。到目前为止,这个问题还无法回答,因为没有提到文件的格式。^这个问题根本无法回答OP。他已经在阅读了。@Igor,Distisa-没有注意到他的问题的第二部分,我已经编辑并回答了。
// top of code file
using System.Linq;
using System.IO;
// top of code file
public Config config { get; set; }
public void ParseMethod() {
var text = System.IO.File.ReadAllLines("config.txt")
.Select(x => x.Split(new[] {'='}, StringSplitOptions.RemoveEmptyEntries))
.Where(x => x.Length > 1)
.Select(x => new {Name = x[0].Trim(), Value = x[1].Trim()})
.ToList();
config = new Config(){
DatabaseHost = text.FirstOrDefault(x => x.Name == "DatabaseHost")?.Value,
DatabaseUsername = text.FirstOrDefault(x => x.Name == "DatabaseUsername")?.Value,
DatabasePassword = text.FirstOrDefault(x => x.Name == "DatabasePassword")?.Value,
DatabaseName = text.FirstOrDefault(x => x.Name == "DatabaseName")?.Value,
};
}
public class Config
{
public string DatabaseHost { get; set; }
public string DatabaseUsername { get; set; }
public string DatabasePassword { get; set; }
public string DatabaseName { get; set; }
}