Я сижу над проблемой, и я не могу найти решение.
Я получаю 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]));
}
}
}
}
}
}
}
}