Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从文本文件中读取行并将其排序为单独的变量_C# - Fatal编程技术网

C# 从文本文件中读取行并将其排序为单独的变量

C# 从文本文件中读取行并将其排序为单独的变量,c#,C#,config.txt(内容) C#代码 进展顺利。您可以改用: 为了将成员存储在单独的变量中,可以使用反射或简单地映射硬编码的每个变量。以下是反射方式: public class MyVars { public string databaseHost; public string databaseUsername; public string databasePassword; public string databaseName; } var instance

config.txt(内容)

C#代码

进展顺利。

您可以改用:

为了将成员存储在单独的变量中,可以使用反射或简单地映射硬编码的每个变量。以下是反射方式:

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