2017-04-20 75 views
1

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

进行的很好。

+1

,如果你发布你的文本文件的内容,这将有助于。此外,如果这是一种标准的CSV文件格式,现有工具(搜索NuGet.org)可以为您解析。 – Igor

+2

''我试过使用String.Split。“ - 不是根据你没有的问题中的代码。你究竟尝试了什么,它以什么方式不产生期望的结果? – David

+0

我不知道如何正确地做到这一点。抱歉。 –

回答

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

不知道如何帮助OP获得他们在问题中提到的公共字段。截至目前,这个问题无法回答,因为没有提及文件的格式。 – Igor

+1

^这绝不会回答OP。他已经在阅读他们了。 – Dispersia

+0

@Igor,Dispersia - 没有注意到他的问题的第二部分,我已经编辑和回答。 –

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