我正坐在一个问题上,我找不到解决办法。
我得到了一个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]));
}
}
}
}
}
}
}
}