C#-读取,拆分和扩展CSV文件

时间:2018-12-06 13:57:18

标签: c# list csv

我正坐在一个问题上,我找不到解决办法。

我得到了一个Performancelog.csv,它看起来像这样。

Start;End;Function;Type;Duration
13:37:25;13:37:27;getData();CF;2
13:37:26;13:37:29;initAnything();OS;3
13:37:28;13:37:38;writeData();CF;10
13:37:39;13:37:40;close();OS;1

我还有一个文件,其中写入了用于创建此性能日志的内部版本的当前修订号。

Revision.txt

157

我的目标是使用修订的持续时间将现有的性能日志分为2种类型分隔的日志。而且只有耗时超过1秒的功能。

我想要2个文件

performancelog_CF.csv

Function;Type;Duration(157)
getData();CF;2
writeData();CF;10

performancelog_OS.csv

Function;Type;Duration(157)
initAnything();OS;3

现在,当我获得一个新版本并带有一个新的Performancelog时,我想扩展我现有的performancelog_CF和performancelog_OS。

新的性能日志现在如下所示:

Start;End;Function;Type;Duration
13:37:25;13:37:27;getData();CF;2
13:37:26;13:37:29;initAnything();OS;1
13:37:28;13:37:38;writeData();CF;10
13:37:37;13:37:40;newFunction();CF;3
13:37:39;13:37:40;close();OS;3

现在修订为158

因此,我希望我的文件看起来像这样:

performancelog_CF.csv

Function;Type;Duration(157);Duration(158)
getData();CF;2;2
writeData();CF;10;10
newFunction();CF;;3

您会看到157-Build中newFunction()的空间应该为空,因为该功能在那里不存在或完成时间不超过1秒。

performancelog_OS.csv

Function;Type;Duration(157);Duration(158)
initAnything();OS;3;
13:37:39;13:37:40;close();OS;;3

我希望我能够向大家展示我的目标是什么。也许有人可以帮助我。

干杯

using System.IO;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System;
using System.Globalization;

namespace perfanalyse
{
    class Filterung
    {
        static void Main(string[] args)
        {
            using (var reader = new StreamReader(@"C:\path\deploy\local\logs\perflog.csv"))
            {
                List<string[]> list = new List<string[]>();

                while (!reader.EndOfStream)
                {
                    var line = reader.ReadLine();
                    string[] values = line.Split(';');

                    list.Add(values);
                }

                string revision = File.ReadAllText(@"C:\path\deploy\binary\svnrevision.txt");        

                list.RemoveAt(0); //removing header
                foreach (string[] arr in list)
                {
                    double d = Convert.ToDouble(arr[2]/*Duration*/, CultureInfo.InvariantCulture);


                    //Erstellung CF Result
                    if (!File.Exists("C:/path/result_CF.csv"))
                    {
                        using (var file = File.CreateText("C:/path/result_CF.csv"))
                        {
                            file.WriteLine("Category;Plugin;Context;Duration Revision (" + revision + ")");
                        }
                    }
                    else // Erweiterung CF Result wenn Datei bereits vorhanden ist
                    {
                        if (!arr[5].Equals(string.Empty) && arr[5] /*Type*/ == "CF" && d >= 0.05)
                        {
                            using (var readercf = new StreamReader(@"C:/path/result_CF.csv"))
                            {
                                List<string[]> listcf = new List<string[]>();
                                while (!readercf.EndOfStream)
                                {
                                    var linecf = readercf.ReadLine();
                                    string[] valuescf = linecf.Split(';');

                                    listcf.Add(valuescf);
                                }

                                listcf.RemoveAt(0);
                                int i = 0;
                                foreach (string[] arrcf in listcf)
                                {
                                    if (arr[4]/*Function name of perflog.csv*/.Equals(arrcf[2]/*function name of result_cf.csv*/)) //if Funktionsname (Ursprung) equals Funktionsname (neue Datei)
                                    {
                                        using (StreamWriter sw = File.AppendText("C:/path/result_CF.csv"))
                                        {
                                            sw.WriteLine(string.Join(";", listcf[0], arrcf[1]));
                                        }
                                    }
                                    else
                                    {
                                        using (StreamWriter sw = File.AppendText("C:/path/result_CF.csv"))
                                        {
                                            sw.WriteLine(string.Join(";", arr[5]/*type*/, arr[6]/*plugin*/, arr[4]/*function name*/, arr[2]/*duration*/));
                                        }
                                    }
                                    i++;
                                }
                            }                         
                        }
                    }

                    //This ist just copy-paste of the CF-part for the result_OS and result_init. Wanted to try if it works on result_cf first

                    //Erstellung OS Result
                    if (!File.Exists("C:/path/result_OS.csv"))
                    {
                        using (var file = File.CreateText("C:/path/result_OS.csv"))
                        {
                            file.WriteLine("Category;Plugin;Context;Duration Revision (" + revision + ")");
                        }
                    }
                    else // Erweiterung OS Result wenn Datei bereits vorhanden ist
                    {
                        if (!arr[5].Equals(string.Empty) && arr[5] == "OS" && d >= 0.05)
                        {
                            using (StreamWriter sw = File.AppendText("C:/path/result_OS.csv"))
                            {
                                sw.WriteLine(string.Join(";", arr[5], arr[6], arr[4], arr[2]));
                            }
                        }
                    }


                    //Erstellung INIT Result
                    if (!File.Exists("C:/path/result_INIT.csv"))
                    {
                        using (var file = File.CreateText("C:/path/result_INIT.csv"))
                        {
                            file.WriteLine("Category;Plugin;Context;Duration Revision (" + revision + ")");
                        }
                    }
                    else // Erweiterung INIT Result wenn Datei bereits vorhanden ist
                    {
                        if (!arr[5].Equals(string.Empty) && arr[5].Contains("INIT") && d >= 0.05)
                        {
                            using (StreamWriter sw = File.AppendText("C:/path/result_INIT.csv"))
                            {
                                sw.WriteLine(string.Join(";", arr[5], arr[6], arr[4], arr[2]));
                            }

                        }
                    }                   
                }              
            }
        }
    }
}

0 个答案:

没有答案