

初心者のため、C#に詳しくなくご相談します。

いま、CSVファイルがあり、3列目までが説明変数、  
4列目が目的変数として、4組のデーターを解析したいと思っています。

・「inputfile.csv」

[code]

    　0.00625, 0.03448276, 0.0483871, 0.04
    　0.21875, 0.2068966,  0.2580645, 0.24
    　0.46875, 0.4137931,  0.5483871, 0.52
    　1,　　   1,         1,         1
    
[/code]

これを、コンボボックス1に次の通り埋め込んでコンパイルすると計算が成功します。

[code]

    comboValue == "1"
    
    
      trainData.Add(new NData(new List<double>() { 0.00625, 0.03448276, 0.0483871 }, new List<double>() { 0.04 }));
      trainData.Add(new NData(new List<double>() { 0.21875, 0.2068966, 0.2580645 }, new List<double>() { 0.24 }));
      trainData.Add(new NData(new List<double>() { 0.46875, 0.4137931, 0.5483871 }, new List<double>() { 0.52 }));
      trainData.Add(new NData(new List<double>() { 1, 1, 1 }, new List<double>() { 1 }));
    
[/code]

上述の方法では、データー毎に埋め込んでコンパイルしないといけません。  
汎用的にCSVファイルを読み込んで、説明変数をX、目的変数をYとしてCSV形式で読み込んで、  
実施するコンボボックス「FILE」を作成しました。

説明変数X、目的変数Yは正しく読み込まれていることを確認出来ましたが、最後にXData、YDataに格納する際に、comboValue ==
"1"のように、Xが３配列、Yが１配列になりません。  
さらに、i,jが読み取れないとエラーになります。

[code]

      trainData.Add(new NData(new List<double>() { XData[i, j] }, new List<double>() { YData[i, j7] }));
    
[/code]

単純なCSVファイルを読み込んで、格納するだけの処理ですが、初心者のため失敗続きでした。  
ご助言頂けますと有難く存じます。

記

[code]

    namespace NNet{
        public partial class Form1 : Form{              
    
            private NTrainer trainer;
    
            public Form1()
            {
                InitializeComponent();
    
                comboBox1.Items.AddRange(new string[]{ "1", "2", "3", "File" });
                comboBox1.SelectedIndex = 3;
    
            }
    
            private void button1_Click( object sender, EventArgs e ) {
             
    
    
                    List<NData> trainData = new List<NData>();
    
                if(comboBox1.SelectedIndex == -1) return;
    
                if(trainer == null) {
                    var comboValue = comboBox1.Items[comboBox1.SelectedIndex].ToString();
                    if (comboValue == "1")
                    {
                        trainData.Add(new NData(new List<double>() { 0.00625, 0.03448276, 0.0483871 }, new List<double>() { 0.04 }));
                        trainData.Add(new NData(new List<double>() { 0.21875, 0.2068966, 0.2580645 }, new List<double>() { 0.24 }));
                        trainData.Add(new NData(new List<double>() { 0.46875, 0.4137931, 0.5483871 }, new List<double>() { 0.52 }));
                        trainData.Add(new NData(new List<double>() { 1, 1, 1 }, new List<double>() { 1 }));
                    }
                    else if (comboValue == "2")
    
    
                      ･･････（途中省略）･･････
    
    
                    else if (comboValue == "File")
                    {
    
                        List<double> numbers = new List<double>();
                        foreach (string line in File.ReadAllLines("inputfile.csv"))
                        {
                            foreach (string word in line.Split(',')){
                                numbers.Add(Double.Parse(word));
    
    
                                //確認用　
                       
                                string[] cols = word.Split(',');
                                for (int n = 0; n < cols.Length; n++)
    
                                    MessageBox.Show(cols[n]);
    
                                //確認用終了
    
                            }
                        }
    
                        //確認用
    
                        using (StreamWriter sWriter = new StreamWriter("output.csv", false, Encoding.GetEncoding("Shift_JIS")))
    
                            foreach (var s in numbers)
                            {
                                sWriter.WriteLine("{0} ", s);  
                            }
    
                        //確認用終了
    
    
                        int NDP = 4;
                        int Input_Unit = 3;
                        int Output_Unit = 1;
    
                        double[,] XData = new double[NDP, Input_Unit];
                        double[,] YData = new double[NDP, Output_Unit];
    
                        int line_count = 4; 
                        int col_count = 4; 
    
                        // 2次元配列の定義
                        double[,] InData = new double[line_count, col_count];
                        int a = 0, b = 0;
                        foreach (string line in File.ReadAllLines("inputfile.csv"))
                        {
                            foreach (string word in line.Split(','))
                            {                         
                                InData[a, b] = Convert.ToDouble(word);
                                b++;
                            }
    
    
                            //確認用
    
                            using (StreamWriter sWriter2 = new StreamWriter("output2.csv", false, Encoding.GetEncoding("Shift_JIS")))
    
                                foreach (var t in InData)
                                {
                                    sWriter2.WriteLine("{0} ", t);  
                                }
    
                            //確認用終了
    
    
                            for (int i = 0; i < NDP; i++)
                            {
                                for (int j = 0; j < Input_Unit; j++)
                                {
                                    XData[i, j] = InData[i, j];                                
                                }
    
                                using (StreamWriter sWriter3 = new StreamWriter("outputX.csv", false, Encoding.GetEncoding("Shift_JIS")))
    
                                    foreach (var t in XData)
                                    {
                                        sWriter3.WriteLine("{0} ", t); 
                                    }
    
                                int jb = Input_Unit;
    
                                for (int j7 = 0; j7 < Output_Unit; j7++)
                                {
                                    YData[i, j7] = InData[i, jb + j7];
    
                                    using (StreamWriter sWriter4 = new StreamWriter("outputY.csv", false, Encoding.GetEncoding("Shift_JIS")))
    
                                        foreach (var t in YData)
                                        {
                                            sWriter4.WriteLine("{0} ", t);  
                                        }
    
                                    trainData.Add(new NData(new List<double>() { XData[i, j] }, new List<double>() { YData[i, j7] }));
    
                                 }
    
                            }
    
                            b = 0;
                            a++;
                        }
    
    
                    }
                } else {
                    trainData = trainer.NData;
                }
    
                if(trainData.Count > 0){
                    Run(trainData);
                }
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2022-01-02T04:28:34.810
85439
2022-01-02T10:34:59.793
2022-01-02T05:43:43.440
26370
50731
question
c# csv
csvファイルを任意の列で２つの配列に分割する方法について


csvという決まったルールのファイルを扱う時にパッケージを使った方がいいではないかと思います。

例えばこのパッケージ：

<https://joshclose.github.io/CsvHelper/>


CC BY-SA 4.0
2022-01-02T09:19:07.270
85443
2022-01-02T09:19:07.270
41314
85439
answer