2

String.Splitメソッドを使用して、文字列のリストを行ごとに分割しようとしていますが、以下のメソッドと正規表現メソッドの両方が機能しませんでした。{0} 0. System.String[]代わりに、実際の文字列の配列ではなく、次の結果が返されました。以下のコードでエラーを見つけるのを手伝ってください:

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

前もって感謝します!

4

3 に答える 3

7

ReadAllLinesこのように使うだけ

m_settings = File.ReadAllLines(dialog.FileName);

これstring[]により、選択したファイルの各行に with 要素が表示されます。このコードを実行した後にm_settings要素がない場合、選択したファイルは空でした。


m_settingsコンソール アプリの内容を調べたい場合は、次のようにします。

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

これにより、配列の内容が一度に 1 要素ずつ出力されます。ToStringこのように for am arrayの実装を使用した場合、

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]);
     }
}
于 2012-08-13T10:28:48.970 に答える
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);
}
于 2012-08-13T10:31:12.967 に答える
1
m_settings = m_settings_temp
    .Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
于 2012-08-13T10:28:32.127 に答える