0

我在一个软件上做了一些基准测试,现在我必须绘制往返时间的结果。

在实验过程中,我们生成了大量 Syslog 格式 (RFC 5424) 的消息,表明在不同和受控的测试条件下程序处理消息需要多长时间。现在我们有几条日志,6 台机器各有 1 条,用于几乎一整天的实验。

我决定使用 Excel 绘制实验时间和 RTT 图表,因此我创建了一个小 C# 实用程序来解析 Syslog 消息并将它们转换为 CSV 选择我想要的字段。

以下是用于实验的一些 Syslog 消息的示例

<167>1 2010-10-07T13:29:53+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="50"] RTT: 12.353
<167>1 2010-10-07T13:29:56+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="51"] RTT: 12.775
<167>1 2010-10-07T13:29:59+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="52"] RTT: 12.979
<167>1 2010-10-07T13:30:02+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="53"] RTT: 20.899
<167>1 2010-10-07T13:30:05+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="54"] RTT: 12.971
<167>1 2010-10-07T13:30:08+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="55"] RTT: 12.419
<167>1 2010-10-07T13:30:11+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="56"] RTT: 12.34
<167>1 2010-10-07T13:30:14+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="57"] RTT: 13.622
<167>1 2010-10-07T13:30:17+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="58"] RTT: 12.873
<167>1 2010-10-07T13:30:20+02:00 rosy717 RTTMonitor 4669 - [CallerData@8289 ClassName="RTTMonitor.Program" MethodName="source_MessageReceived" ModuleName="RTTMonitor" LogName="Logfile"][timeQuality tzKnown="1"][origin ip="10.0.0.58" enterpriseId="8289" software="Logbus-ng-sharp" swVersion="1.8.3"][meta sequenceId="59"] RTT: 12.474

消息的格式都相同。RTT 时间以毫秒为单位。不幸的是,当我生成这些日志时,我并不关心指定固定的小数位数,所以一些 RTT 结果看起来像 12.34 毫秒而不是 12.340 毫秒,正如我将要讨论的那样

转换实用程序仅选择一些字段并生成一个 CSV 文件,其中最后一列中包含时间戳。如您所见,数字格式使用小数点。不幸的是,在意大利,我们使用十进制逗号和点作为组分隔符,因此 Excel 忽略它并认为 12.419 是 12419,而 12.34 是 1234。如果 Excel 认为这些数字是微秒就可以了,但 1234μs 比 12419μs 小 10 倍。

我的问题是

如何强制 Excel 理解这些数字是带小数点的?如果我输入自定义的数字格式0.000,那些具有 2 个十进制数字的数字将被视为字符串并左对齐

或者

由于我可以根据需要多次重新转换日志,但我不想重复整个实验,你能提醒我在 C# 中如何将双精度数转换为强制 3 位小数的字符串吗?

先感谢您

PS:我知道这个问题是在stackoverflow和超级用户之间,但我也在第二种情况下询问了C#帮助

4

1 回答 1

1

对于您的替代方案,这样的事情应该可以工作:

myDouble.ToString("f3")

或者,如果您愿意:

string.Format("{0:f3}", myDouble)
于 2010-11-09T16:37:14.730 回答