C # - чтение, разделение и расширение CSV-файла - PullRequest
0 голосов
/ 06 декабря 2018

Я сижу над проблемой, и я не могу найти решение.

Я получаю 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

Далее у меня естьфайл, в который записывается текущий номер редакции сборки, с которой был создан этот perfomancelog.

Revision.txt

157

Моя цель - разделить мой существующий perfomancelogв 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_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

Как вы можете видеть пространство для newFunction () в 157-Buildдолжно быть пустым, потому что этой функции там не было или она не занимала более 1 секунды.

performancelog_OS.csv

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

Я надеюсь, что смог показать вам, ребятацель есть.Может быть, кто-то может помочь мне.

Cheers Shoe

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

                        }
                    }                   
                }              
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...