2017-04-20 73 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; } 
}