C# 如何在C中使用.csv文件以不同的名称逐个保存另一个新文件#

C# 如何在C中使用.csv文件以不同的名称逐个保存另一个新文件#,c#,csv,C#,Csv,我有.csv文件,该文件的示例如下 Date,Pass,CutMark1,Marks1,CutMark2,Marks2 22/06/2017 13:04:18,FALSE,TRUE,TRUE,FALSE,FALSE 22/06/2017 13:04:20,FALSE,TRUE,TRUE,FALSE,FALSE 22/06/2017 13:04:35,FALSE,TRUE,TRUE,FALSE,FALSE 22/06/2017 13:04:37,FALSE,TRUE,TRUE,FALSE,

我有
.csv
文件,该文件的示例如下

    Date,Pass,CutMark1,Marks1,CutMark2,Marks2
22/06/2017 13:04:18,FALSE,TRUE,TRUE,FALSE,FALSE
22/06/2017 13:04:20,FALSE,TRUE,TRUE,FALSE,FALSE
22/06/2017 13:04:35,FALSE,TRUE,TRUE,FALSE,FALSE
22/06/2017 13:04:37,FALSE,TRUE,TRUE,FALSE,FALSE
22/06/2017 13:04:37,FALSE,TRUE,TRUE,FALSE,FALSE
22/06/2017 13:04:38,FALSE,FALSE,TRUE,FALSE,FALSE
22/06/2017 13:04:39,FALSE,FALSE,TRUE,FALSE,FALSE
22/06/2017 13:04:40,FALSE,FALSE,TRUE,TRUE,FALSE
22/06/2017 13:04:41,FALSE,FALSE,TRUE,TRUE,TRUE
22/06/2017 13:04:42,FALSE,FALSE,FALSE,TRUE,TRUE
22/06/2017 13:04:44,FALSE,FALSE,FALSE,TRUE,TRUE
22/06/2017 13:04:45,TRUE,FALSE,FALSE,TRUE,TRUE
22/06/2017 13:04:46,TRUE,FALSE,FALSE,TRUE,TRUE
22/06/2017 13:04:48,TRUE,FALSE,FALSE,FALSE,TRUE
22/06/2017 13:04:49,TRUE,FALSE,FALSE,FALSE,TRUE
22/06/2017 13:04:50,TRUE,FALSE,FALSE,FALSE,TRUE
22/06/2017 13:04:52,FALSE,TRUE,TRUE,FALSE,TRUE
22/06/2017 13:04:53,FALSE,TRUE,TRUE,FALSE,TRUE
22/06/2017 13:04:54,FALSE,TRUE,TRUE,FALSE,TRUE
22/06/2017 13:04:56,FALSE,TRUE,TRUE,FALSE,TRUE
22/06/2017 13:04:57,FALSE,TRUE,TRUE,FALSE,TRUE
22/06/2017 13:04:58,FALSE,TRUE,TRUE,FALSE,TRUE
22/06/2017 13:05:00,TRUE,TRUE,TRUE,TRUE,FALSE
22/06/2017 13:05:01,TRUE,TRUE,TRUE,TRUE,FALSE
22/06/2017 13:05:02,TRUE,TRUE,TRUE,TRUE,FALSE
22/06/2017 13:05:04,TRUE,TRUE,TRUE,TRUE,FALSE
22/06/2017 13:05:05,TRUE,TRUE,TRUE,TRUE,FALSE
22/06/2017 13:05:06,TRUE,TRUE,TRUE,TRUE,FALSE
22/06/2017 13:05:08,TRUE,TRUE,TRUE,TRUE,FALSE
现在我想保存这个文件,如下所示;在这里
Pass column
数据流是这样的,FALSE>TRUE>FALSE>TRUE..这是我的.csv文件的示例。但是原始文件中有更多原始文件。在这里,我想像下面一样分离这个原始.csv文件

第一次遇到False,所以所有的False细节都是假的,检查Marks1=TRUE,然后保存
Discharge1\u Mark1.csv
,查看Marks2列,如果该列为TRUE,则保存
Discharge1\u Mark2.csv

其次,通过列符合真值,然后检查Marks1=真值,然后保存
Charge1\u Mark1.csv
,如果Marks2=真值,则保存
Charge1\u Mark2.csv

现在再次传递column meet False,然后要保存文件
Discharge2\u Marks1.csv
。 就像那样,我想保存我的文件

我想在这里说,相应地,Pass列TRUE,False,你想像我前面提到的那样保存文件,当TRUE,False满足时。1,2,3,…你想用相应的Marks1,Marks2列检查相应的Pass列TRUE,False。 在这里,我想将生成的文件保存到相应的列中

如果我保存Marks1,则列标题应为(日期、通过、剪切标记s1、标记s1) 如果我保存Marks2,则列标题应为(日期、通过、剪切Marks2、Marks2)

请给出我如何生成我前面在代码中提到的文件。我的代码如下

using System.Globalization;

  public static string dateFormatString = "dd/MM/yyyy HH:mm:ss";


  private void btnSeperateFile_Click(object sender, EventArgs e)
        {
            int discharge_counter = 0;
            int charge_counter = 0;

            if (tbOutputFilePath2 != null)
            {

                List<DrawNew> ObservingData = new List<DrawNew>(); // List to store all available DrawNew objects from the CSV

                // Loops through each lines in the CSV
                foreach (string line in System.IO.File.ReadAllLines(outputFilePath.Text).Skip(1)) // .Skip(1) is for skipping header
                {

                    string[] valuesCsvLine = line.Split(',');
                    DrawNew mngInstance = new DrawNew();

                    mngInstance.Date = DateTime.ParseExact(valuesCsvLine[0], dateFormatString, CultureInfo.InvariantCulture); 
                    mngInstance.Pass = (valuesCsvLine[1] == "TRUE" ? true : false);
                    mngInstance.CutMark1 = (valuesCsvLine[2] == "TRUE" ?true: false);
                    mngInstance.Marks1 = (valuesCsvLine[3] == "TRUE" ?true: false);                 
                    mngInstance.CutMark2 = (valuesCsvLine[4] == "TRUE" ? true : false);
                    mngInstance.Marks2 = (valuesCsvLine[5] == "TRUE" ?true: false);

                    ObserveData.Add(mngInstance);

                    if (mngInstance.Pass==true && mngInstance.Marks1==true)
                    {


                    }
                    if (mngInstance.Pass == false && mngInstance.Marks1 == true)
                    {

                    }
                    if (mngInstance.Pass == true && mngInstance.Marks2 == true)
                    {

                    }
                    if (mngInstance.Pass == false && mngInstance.Marks2 == true )
                    {

                    }            
                }
            }
我的问题是如何生成我前面提到的这些文件。请帮助解决我的问题

  • 对于下面列出的每种类型的输出csv文件,您需要4个
    列表。根据每个
    DrawNew
    对象上的if条件,可以将其添加到自己的列表中

    • List dischargeMark1List
    • List dischargeMark2List
    • 列表费用1市场列表
    • List charge1Mark2List

    • 您可以创建一个方法
      generateoutputcv(List selectedData)
      ,将数据写入正确的文件名。您只需执行与在
      btnsperatefile\u Click(…)
      方法中相同的检查
  • 对于下面列出的每种类型的输出csv文件,您需要4个
    列表。根据每个
    DrawNew
    对象上的if条件,可以将其添加到自己的列表中

    • List dischargeMark1List
    • List dischargeMark2List
    • 列表费用1市场列表
    • List charge1Mark2List

    • 您可以创建一个方法
      generateoutputcv(List selectedData)
      ,将数据写入正确的文件名。您只需执行与在
      btnsperatefile\u Click(…)
      方法中相同的检查

  • 我把我的想法草稿写在下面。我只关注4个案例:

    • Pass=True,CutMark1=True
    • Pass=True,CutMark2=True
    • Pass=False,CutMark1=True
    • Pass=False,CutMark2=True
    我想可能还有别的案子

    因此,首先,我创建一个新模型来存储数据

    public class Charge
    {
        public DateTime Date { get; set; } 
        public bool Pass { get; set; } 
        public bool CutMark { get; set; } 
        public int Marks { get; set; } 
    }
    
    然后,我创建4个列表来存储4个案例的数据:

    var discharge1Mark1 = new List<Charge>();
    var discharge1Mark2 = new List<Charge>();
    var charge1Mark1 = new List<Charge>();
    var charge1Mark2 = new List<Charge>();
    
    要以编程方式为CSV创建标题,只需执行以下操作:

    private void ExportToCSV(List<Charge> data, bool discharge, int num)
    {
        var filename = discharge ? "Discharge1" : "Charge1";
        filename += (num == 1) ? "_Mark1.csv" : "_Mark2.csv";
        var headerCol1 = "Date";
        var headerCol2 = "Pass";
        var headerCol3 = (num == 1) ? "CutMark1" : "CutMark2";
        var headerCol4 = (num == 1) ? "Mark1" : "Mark2";
        //your exporting function below
    }
    
    private void ExportToCSV(列表数据、bool放电、int num)
    {
    var文件名=放电?“放电1”:“充电1”;
    文件名+=(num==1)?“\u Mark1.csv”:“\u Mark2.csv”;
    var headerCol1=“日期”;
    var headerCol2=“通过”;
    变量headerCol3=(num==1)?“CutMark1”:“CutMark2”;
    变量headerCol4=(num==1)?“Mark1”:“Mark2”;
    //下面是您的导出功能
    }
    

    希望你能理解,我的想法能有所帮助。

    我把我的想法草稿写在下面。我只关注4个案例:

    • Pass=True,CutMark1=True
    • Pass=True,CutMark2=True
    • Pass=False,CutMark1=True
    • Pass=False,CutMark2=True
    我想可能还有别的案子

    因此,首先,我创建一个新模型来存储数据

    public class Charge
    {
        public DateTime Date { get; set; } 
        public bool Pass { get; set; } 
        public bool CutMark { get; set; } 
        public int Marks { get; set; } 
    }
    
    然后,我创建4个列表来存储4个案例的数据:

    var discharge1Mark1 = new List<Charge>();
    var discharge1Mark2 = new List<Charge>();
    var charge1Mark1 = new List<Charge>();
    var charge1Mark2 = new List<Charge>();
    
    要以编程方式为CSV创建标题,只需执行以下操作:

    private void ExportToCSV(List<Charge> data, bool discharge, int num)
    {
        var filename = discharge ? "Discharge1" : "Charge1";
        filename += (num == 1) ? "_Mark1.csv" : "_Mark2.csv";
        var headerCol1 = "Date";
        var headerCol2 = "Pass";
        var headerCol3 = (num == 1) ? "CutMark1" : "CutMark2";
        var headerCol4 = (num == 1) ? "Mark1" : "Mark2";
        //your exporting function below
    }
    
    private void ExportToCSV(列表数据、bool放电、int num)
    {
    var文件名=放电?“放电1”:“充电1”;
    文件名+=(num==1)?“\u Mark1.csv”:“\u Mark2.csv”;
    var headerCol1=“日期”;
    var headerCol2=“通过”;
    变量headerCol3=(num==1)?“CutMark1”:“CutMark2”;
    变量headerCol4=(num==1)?“Mark1”:“Mark2”;
    //下面是您的导出功能
    }
    

    希望您能理解,我的想法也能有所帮助。

    如果我能正确理解您的问题,我想提出如下建议:

    var date = DateTime.ParseExact(valuesCsvLine[0], dateFormatString, CultureInfo.InvariantCulture);
                var pass = (valuesCsvLine[1] == "TRUE" ? true : false);
                var cutMark1 = (valuesCsvLine[2] == "TRUE" ? true : false);
                var marks1 = int.Parse(valuesCsvLine[3]);
                var cutMark2 = (valuesCsvLine[4] == "TRUE" ? true : false);
                var marks2 = int.Parse(valuesCsvLine[5]);
                if (pass)
                {
                    if (cutMark1)
                        discharge1Mark1.Add(new Charge
                        {
                            Date = date,
                            Pass = pass,
                            Marks = marks1,
                            CutMark = cutMark1
                        });
                    else
                        discharge1Mark2.Add(new Charge
                        {
                            Date = date,
                            Pass = pass,
                            Marks = marks2,
                            CutMark = cutMark2
                        });
                }else
                {
                    if (cutMark1)
                        charge1Mark1.Add(new Charge
                        {
                            Date = date,
                            Pass = pass,
                            Marks = marks1,
                            CutMark = cutMark1
                        });
                    else
                        charge1Mark2.Add(new Charge
                        {
                            Date = date,
                            Pass = pass,
                            Marks = marks2,
                            CutMark = cutMark2
                        });
                }
    
    在DrawNew中,我将添加一个新字段来存储记录应导出到哪个csv文件的文件名

    public class DrawNew
    {
        public DateTime Date { get; set; } // property to store Date 
        public bool Pass { get; set; } // property to store ChargeMode
        public bool CutMark1 { get; set; } // property to store ChargeMode
        public bool Marks1 { get; set; } // property to store ScheduleStep
        public bool CutMark2 { get; set; } // property to store ChargeMode
        public bool Marks2 { get; set; } // property to store ScheduleStep 
        public string FileName { get; set; }
    }
    
    然后,在for循环中,我使用一些参数来确定每条记录的文件名

    List<DrawNew> ObservingData = new List<DrawNew>(); // List to store all available DrawNew objects from the CSV
    
            // Loops through each lines in the CSV
            var fileName = "";
            var previousPassValue = true;
            var count = 0;
            foreach (string line in System.IO.File.ReadAllLines(outputFilePath.Text).Skip(1)) // .Skip(1) is for skipping header
            {
                string[] valuesCsvLine = line.Split(',');
                DrawNew mngInstance = new DrawNew();
    
                mngInstance.Date = DateTime.ParseExact(valuesCsvLine[0], dateFormatString, CultureInfo.InvariantCulture);
                mngInstance.Pass = (valuesCsvLine[1] == "TRUE" ? true : false);
                mngInstance.CutMark1 = (valuesCsvLine[2] == "TRUE" ? true : false);
                mngInstance.Marks1 = (valuesCsvLine[3] == "TRUE" ? true : false);
                mngInstance.CutMark2 = (valuesCsvLine[4] == "TRUE" ? true : false);
                mngInstance.Marks2 = (valuesCsvLine[5] == "TRUE" ? true : false);
                if (count == 0)
                {
                    previousPassValue = mngInstance.Pass;
                    count++;
                }
    
                if (previousPassValue != mngInstance.Pass)
                {
                    previousPassValue = mngInstance.Pass;
                    count++;
                }
    
                if (mngInstance.Pass == true && mngInstance.Marks1 == true)
                {
                    fileName = "Charge" + count + "_Mark1.csv";
    
                }
                if (mngInstance.Pass == false && mngInstance.Marks1 == true)
                {
                    fileName = "DisCharge" + count + "_Mark1.csv";
                }
                if (mngInstance.Pass == true && mngInstance.Marks2 == true)
                {
                    fileName = "Charge" + count + "_Mark2.csv";
                }
                if (mngInstance.Pass == false && mngInstance.Marks2 == true)
                {
                    fileName = "DisCharge" + count + "_Mark2.csv";
                }
    
                mngInstance.FileName = fileName;
    
                ObservingData.Add(mngInstance);
            }
    
    List ObservingData=new List();//列表以存储CSV中所有可用的新对象
    //循环浏览CSV中的每一行
    var fileName=“”;
    var previousPassValue=true;
    var计数=0;
    foreach(System.IO.File.ReadAllLines(outputFilePath.Text.Skip(1))中的字符串行//。Skip(1)用于跳过头
    {
    字符串[]值csvline=line.Split(',');
    DrawNew mngInstance=新DrawNew();
    mnginInstance.Date=DateTime.ParseExact(valuesCsvLine[0],dateFormatString,CultureInfo.InvariantCulture);
    mngInstance.Pass=(valuesCsvLine[1]=“真”?真:假);
    mngInstance.CutMark1=(值SCSVLINE[2]=“真”?真:假);
    mnginInstance.Marks1=(valuesCsvLine[3]=“真”?真:假);
    mngInstance.CutMark2=(valuesCsvLine[4]=“真”?真:假);
    mngInstance.Marks2=(valuesCsvLine[5]=“真”?真:假);
    我