如何通过考虑C#中的选定数据来隔离.csv文件 [英] How to segregate .csv file by considering selected data in C#

查看:49
本文介绍了如何通过考虑C#中的选定数据来隔离.csv文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我有  .csv   file
and I want to分隔选定的数据列并将选定的数据写入新的.csv文件。

I have .csv file and I want to separate selected data column and write those selected data to new .csv files.


充电和放电存储在  .csv  文件
,格式固定。每个文件包含2个子项详细信息。此按钮事件处理程序应隔离  main.csv  文件
in以分隔  .csv 文件
,具体取决于条件:

The charging and discharging are stored in a .csv file with a fixed format. Each file contains 2 children details.This button event handler should segregate the main.csv file in to separate .csvfiles depending on conditions:


如果仅通过考虑以下条件生成新的.csv文件。

if only generate new .csv file by considering following condition.


CutMark(1,2)= TRUE,用于特定"Pass"的整个时段


例如:


•如果在"通过"遍历"FALSE-TRUE-FALSE-TRUE"("放电 - 充电 - 放电")的整个过程中,所有都处于活动状态(CutMark1和CutMark2都为TRUE)收费"),这个工具应该创建以下文件[共8个文件]:

• If all are active(CutMark1 and CutMark2 all are TRUE) during the entire period of "Pass" traversal from "FALSE-TRUE-FALSE-TRUE" ("Discharge-Charge-Discharge-Charge"), the following files should be created by this tool [totally 8 files]:


Discharge1_CH1.csv(列标题为Date,Pass,CutMarks1,Marks1)

Discharge1_CH1.csv (with column heders Date,Pass,CutMarks1,Marks1 )


Discharge1_CH2.csv(列标题为Date,Pass,CutMarks2,Marks2)

Discharge1_CH2.csv (with column heders Date,Pass,CutMarks2,Marks2 )


Charge1_CH1.csv(列标题为Date,Pass,CutMarks1,Marks1)

Charge1_CH2.csv(列标题为Date,Pass,CutMarks2,Marks2)

Charge1_CH1.csv (with column heders Date,Pass,CutMarks1,Marks1 )
Charge1_CH2.csv (with column heders Date,Pass,CutMarks2,Marks2 )


Discharge2_CH1.csv(列标题为Date,Pass,CutMarks1,Marks1)

Discharge2_CH1.csv (with column heders Date,Pass,CutMarks1,Marks1 )


Discharge2_CH2.csv(列标题为Date,Pass,CutMarks2,Marks2)

Discharge2_CH2.csv(with column heders Date,Pass,CutMarks2,Marks2 )


Charge2_CH1.csv(列标题为Date,Pass,CutMarks1,Marks1)

Charge2_CH1.csv (with column heders Date,Pass,CutMarks1,Marks1 )


Charge2_CH2.csv(列标题为Date,Pass,CutMarks2,Marks2)

Charge2_CH2.csv (with column heders Date,Pass,CutMarks2,Marks2 )


我希望生成新的  .csv  文件。

Like that I want to generate new .csv file.


这是我的样本.csv文件:

This is my sample .csv file:

Date,Pass,CutMark1,Marks1,CutMark2,Marks2,
22/06/2017 13:04:18,FALSE,TRUE,40,FALSE,35,
22/06/2017 13:04:20,FALSE,TRUE,35,FALSE,35,
22/06/2017 13:04:35,FALSE,TRUE,55,FALSE,55,
22/06/2017 13:04:37,FALSE,TRUE,100,FALSE,55,
22/06/2017 13:04:37,FALSE,TRUE,38,FALSE,55,
22/06/2017 13:04:38,FALSE,FALSE,35,FALSE,55,
22/06/2017 13:04:39,FALSE,FALSE,35,FALSE,38,
22/06/2017 13:04:40,FALSE,FALSE,35,TRUE,38,
22/06/2017 13:04:41,FALSE,FALSE,55,TRUE,38,
22/06/2017 13:04:42,FALSE,FALSE,55,TRUE,55,
22/06/2017 13:04:44,FALSE,FALSE,38,TRUE,55,
22/06/2017 13:04:45,TRUE,FALSE,38,TRUE,40,
22/06/2017 13:04:46,TRUE,FALSE,38,TRUE,40,
22/06/2017 13:04:48,TRUE,FALSE,55,FALSE,40,
22/06/2017 13:04:49,TRUE,FALSE,55,FALSE,25,
22/06/2017 13:04:50,TRUE,FALSE,55,FALSE,45,
22/06/2017 13:04:52,FALSE,TRUE,55,FALSE,60,
22/06/2017 13:04:53,FALSE,TRUE,40,FALSE,80,
22/06/2017 13:04:54,FALSE,TRUE,40,FALSE,80,
22/06/2017 13:04:56,FALSE,TRUE,40,FALSE,75,
22/06/2017 13:04:57,FALSE,TRUE,40,FALSE,90,
22/06/2017 13:04:58,FALSE,TRUE,55,FALSE,88,
22/06/2017 13:05:00,TRUE,TRUE,55,TRUE,23,
22/06/2017 13:05:01,TRUE,TRUE,55,TRUE,45,
22/06/2017 13:05:02,TRUE,TRUE,20,TRUE,78,
22/06/2017 13:05:04,TRUE,TRUE,45,TRUE,45,
22/06/2017 13:05:05,TRUE,TRUE,85,TRUE,69,
22/06/2017 13:05:06,TRUE,TRUE,62,TRUE,45,
22/06/2017 13:05:08,TRUE,TRUE,100,TRUE,35,

我的按钮处理程序代码:

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 = int.Parse(valuesCsvLine[3]);                 
                    mngInstance.CutMark2 = (valuesCsvLine[4] == "TRUE" ? true : false);
                    mngInstance.Marks2 = int.Parse(valuesCsvLine[5]); 

                    ObserveData.Add(mngInstance);

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


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

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

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

                    }            
                }
            }

这是用于存储  .csv   file:

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 int Marks1 { get; set; } // property to store ScheduleStep
        public bool CutMark2 { get; set; } // property to store ChargeMode
        public int Marks2 { get; set; } // property to store ScheduleStep 
     }


如果你能纠正我的代码作为我的条件。我想创建新的.csv文件作为我的条件。请帮助我解决这个问题。如果我能非常感激。请
我被阻止有了这个。请帮助我解决问题。







推荐答案

尝试我的测试代码,我不知道哪个条件应该保存哪个文件,根据我的代码,你必须有一些逻辑更改。

Try my test code, I don't know which condition should save what file, base on my code ,some logic you must have changed .

我的逻辑代码是:首先我将csv读到一个列表;然后创建  8 list 来保存符合条件的数据;然后我创建8个csv文件并写入数据来填充csv文件。

My logic code is :first I read the csv to a list; and then create 8 list to save data which meet the conditions; then I create 8 csv files and write data to fill the csv file.

 public partial class Form6 : Form
    {
        public Form6()
        {
            InitializeComponent();
        }
        public static string dateFormatString = "dd/MM/yyyy HH:mm:ss";
        public string filepath = @"C:\Users\v-wedi\Desktop\data.csv";

        private void btnSeperateFile_Click(object sender, EventArgs e)
        {
            if (filepath != null)
            {

                // List to store all available DrawNew objects from the CSV
                List<DrawNew> ObservingData = new List<DrawNew>();
                // Loops through each lines in the CSV
                foreach (string line in System.IO.File.ReadAllLines(filepath).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 = int.Parse(valuesCsvLine[3]);
                    mngInstance.CutMark2 = (valuesCsvLine[4] == "TRUE" ? true : false);
                    mngInstance.Marks2 = int.Parse(valuesCsvLine[5]);

                    ObservingData.Add(mngInstance);
                }
                /// file 1
                string Discharge1_CH1_FilePath = @"C:\Users\v-wedi\Desktop\Discharge1_CH1.csv";
                List<DrawNew> Discharge1_CH1 = new List<DrawNew>();
                ///file 2
                string Discharge1_CH2_FilePath = @"C:\Users\v-wedi\Desktop\Discharge1_CH2.csv";
                List<DrawNew> Discharge1_CH2 = new List<DrawNew>();
                ///file 3
                string Charge1_CH1_FilePath = @"C:\Users\v-wedi\Desktop\Charge1_CH1.csv";
                List<DrawNew> Charge1_CH1 = new List<DrawNew>();
                ///file 4
                string Charge1_CH2_FilePath = @"C:\Users\v-wedi\Desktop\Charge1_CH2.csv";
                List<DrawNew> Charge1_CH2 = new List<DrawNew>();
                ///file 5
                string Discharge2_CH1_FilePath = @"C:\Users\v-wedi\Desktop\Discharge2_CH1.csv";
                List<DrawNew> Discharge2_CH1 = new List<DrawNew>();
                ///file 6
                string Discharge2_CH2_FilePath = @"C:\Users\v-wedi\Desktop\Discharge2_CH2.csv";
                List<DrawNew> ischarge2_CH2 = new List<DrawNew>();
                ///file 7
                string Charge2_CH1_FilePath = @"C:\Users\v-wedi\Desktop\Charge2_CH1.csv";
                List<DrawNew> Charge2_CH1 = new List<DrawNew>();
                ///file 8
                string Charge2_CH2_FilePath = @"C:\Users\v-wedi\Desktop\Charge2_CH2.csv";
                List<DrawNew> Charge2_CH2 = new List<DrawNew>();

                //process list of DrawNew
                foreach (DrawNew mngInstance in ObservingData)
                {
                    //1
                    if (mngInstance.Pass == true && mngInstance.CutMark1 == true)
                    {
                        Discharge1_CH1.Add(mngInstance);
                    }
                    //2
                    if (mngInstance.Pass == true && mngInstance.CutMark1 == false)
                    {
                        Discharge1_CH2.Add(mngInstance);
                    }
                    //3
                    if (mngInstance.Pass == false && mngInstance.CutMark1 == true)
                    {
                        Charge1_CH1.Add(mngInstance);
                    }
                    //4
                    if (mngInstance.Pass == false && mngInstance.CutMark1 == false)
                    {
                        Charge1_CH2.Add(mngInstance);
                    }
                    //5
                    if (mngInstance.Pass == true && mngInstance.CutMark2 == true)
                    {
                        Discharge2_CH1.Add(mngInstance);
                    }
                    //6
                    if (mngInstance.Pass == true && mngInstance.CutMark2 == false)
                    {
                        ischarge2_CH2.Add(mngInstance);
                    }
                    //7
                    if (mngInstance.Pass == false && mngInstance.CutMark2 == true)
                    {
                        Charge2_CH1.Add(mngInstance);
                    }
                    //8
                    if (mngInstance.Pass == false && mngInstance.CutMark2 == false)
                    {
                        Charge2_CH2.Add(mngInstance);
                    }
                }


                //save list to csv


                //file 1 
                if (Discharge1_CH1.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Discharge1_CH1_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {  
                        foreach(DrawNew dn in Discharge1_CH1)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark1,dn.Marks1));
                        }                  
                        
                    }
                }
                //file 2
                if (Discharge1_CH2.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Discharge1_CH2_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in Discharge1_CH2)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark2, dn.Marks2));
                        }
                    }
                }
                //file 3 
                if (Charge1_CH1.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Charge1_CH1_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in Charge1_CH1)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark1, dn.Marks1));
                        }
                    }
                }
                //file 4 
                if (Charge1_CH2.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Charge1_CH2_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in Charge1_CH2)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark2, dn.Marks2));
                        }
                    }
                }
                //file 5 
                if (Discharge2_CH1.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Discharge2_CH1_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in Discharge2_CH1)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark1, dn.Marks1));
                        }
                    }
                }
                //file 6 
                if (ischarge2_CH2.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Discharge2_CH2_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in ischarge2_CH2)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark2, dn.Marks2));
                        }
                    }
                }
                //file 7 
                if (Charge2_CH1.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Charge2_CH1_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in Charge2_CH1)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark1, dn.Marks1));
                        }
                    }
                }
                //file 8 
                if (Charge2_CH2.Count > 0)
                {
                    using (StreamWriter swOutputFile = new StreamWriter(new FileStream(Charge2_CH2_FilePath, FileMode.Create, FileAccess.Write, FileShare.Read)))
                    {
                        foreach (DrawNew dn in Charge2_CH2)
                        {
                            swOutputFile.WriteLine(String.Format("{0},{1},{2},{3}", dn.Date, dn.Pass, dn.CutMark2, dn.Marks2));
                        }
                    }
                }
            }
        }
    }

    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 int Marks1 { get; set; } // property to store ScheduleStep
        public bool CutMark2 { get; set; } // property to store ChargeMode
        public int Marks2 { get; set; } // property to store ScheduleStep 
    }

希望上面的代码很有帮助。

Hope the above code was helpful.

最好的问候,

Bob


这篇关于如何通过考虑C#中的选定数据来隔离.csv文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆