从文本文件中读取行并分类为单独的变量

时间:2017-04-20 16:53:49

标签: c#

config.txt (内容)

databaseHost = localhost;
databaseUsername = root;
databasePassword = root;
databaseName = test;

C#代码

List<string> list = new List<string>();
using (StreamReader reader = new StreamReader("config.txt"))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        list.Add(line); // Add to list.

        Console.WriteLine(line); // Write to console.
    }
}
Console.ReadKey();

目前打印出文本文件中的所有内容。 我想将文本存储到公共变量(我已经声明)。我尝试过使用String.Split。我想我错了,但如果这里有人能引导我朝着正确的方向前进,我将非常感激。我还在学习,我还很年轻!

我取得了一些进展: 继承我的新C#文件

 char[] equals = { '=' };
        List<string> list = new List<string>();
        using (StreamReader reader = new StreamReader("config.txt"))
        {
            string line;
            while ((line = reader.ReadLine()) != null)
            {
                list.Add(line); // Add to list.
                string[] linr = line.Split(equals);





                Console.WriteLine(linr[1]); // Write to console.
            }
        }
        Console.ReadKey();
        }

并输出

 localhost;
 root;
 root;
 test;

一切顺利。

2 个答案:

答案 0 :(得分:1)

这是一种方法。同样,有很多工具可以在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; }
}

答案 1 :(得分:-1)

您可以改为使用System.IO.File.ReadAllLines

var list = File.ReadAllLines("config.txt");

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

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()));