2012-08-13 21 views
2

我想在每個單獨的行使用String.Split方法拆分我的字符串列表,但下面的方法和正則表達式方法都不起作用。相反,他們返回了以下結果{0} 0. System.String[]而不是實際的字符串數組。請幫忙找到下面的代碼中的錯誤:C#:使用String.Split方法拆分每個單獨的行的字符串列表?

string m_settings_temp; 
    string[] m_settings; 
    public void ShowSettingsGui() { 
     var dialog = new OpenFileDialog { Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*" }; 
     if (dialog.ShowDialog() != DialogResult.OK) return; 
     m_settings_temp = File.ReadAllText(dialog.FileName); 
     m_settings = m_settings_temp.Split(new [] { '\r', '\n' }); 
     //This regex method failed as well: 
     //m_settings = Regex.Split(m_settings_temp,"\r\n|\r|\n"); 
    } 

    //The method below is to evaluate the output 
    protected override void SolveInstance(IGH_DataAccess DA) 
        { 
         if (m_settings == null) 
         { 
          AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "You must declare some valid settings"); 
          return; 
         } 
         DA.SetData(0, m_settings); 
        } 

在此先感謝!

+1

該方法返回一個字符串數組 - 而不是一個字符串。 – Oded 2012-08-13 10:28:49

+0

您選擇閱讀多少個文件? – 2012-08-13 10:32:30

+0

@ user861114只有一個。 – 2012-08-13 11:19:23

回答

7

只使用ReadAllLines這樣

m_settings = File.ReadAllLines(dialog.FileName); 

這會給你一個string[]與選定文件中的每一行的元素。如果在運行此代碼後,m_settings沒有元素,則選擇的文件爲空。


如果我想interrgoate的m_settings內容在一個控制檯應用程序我可以做財產以後等。

for (var i = 0; i < m_settings.Length; i ++) 
{ 
    Console.WriteLine(m_settings[i]); 
} 

這將輸出數組的內容,一次一個元素。如果我用的ToString爲上午陣列,像這樣實施,

Console.WriterLine(m_settings); 

我會得到數組類型的字符串表示,它包含的元素個數。


我在你的情況下,懷疑你想要做財產以後像

protected override void SolveInstance(IGH_DataAccess DA) 
{ 
    if (m_settings == null || m_settings.Length == 0) 
    { 
     AddRuntimeMessage(
       GH_RuntimeMessageLevel.Warning, 
       "You must declare some valid settings"); 

     return; 
    } 

    for (var i = 0; i < m_settings.Length; i ++) 
    { 
     DA.SetData(i, m_settings[i]); 
    } 
} 
+0

+1爲內置的方法 – Manatherin 2012-08-13 10:31:26

+0

+1這比自己分裂它更好。它保持代碼清潔。 – pjvds 2012-08-13 10:31:53

+2

在某些情況下,最好使用File.ReadLines()(http://msdn.microsoft.com/zh-cn/library/dd383503),它使您可以枚舉文件中的所有行,而不將它們全部存儲在內存中。這對於非常大的文件很重要。 – 2012-08-13 10:41:15

1
m_settings = m_settings_temp 
    .Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
1
string m_settings_temp; 
string[] m_settings; 
public void ShowSettingsGui() 
{ 
    var dialog = new OpenFileDialog { Filter = "Data Sources (*.ini)|*.ini*|All Files|*.*" }; 
    if (dialog.ShowDialog() != DialogResult.OK) return; 

    m_settings_temp = File.ReadAllText(dialog.FileName); 
    m_settings = m_settings_temp.Split(new string[] { Environment.NewLine }, StringSplitOptions.None); 
} 
相關問題