ソフトウェアでいくつかのベンチマーク実験を行ったので、ラウンドトリップ時間の結果をプロットする必要があります。
実験中に、Syslog 形式 (RFC 5424) で多数のメッセージを生成し、さまざまな制御されたテスト条件下でプログラムがメッセージを処理するのにかかった時間を示しました。現在、6 台のマシンのそれぞれから 1 つずつ、いくつかのログがあり、ほぼ丸 1 日実験を行っています。
Excel を使用して実験時間と RTT のグラフをプロットすることにしたので、Syslog メッセージを解析し、必要なフィールドを選択して CSV に変換する小さな C# ユーティリティを作成しました。
以下は、実験用の 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.340ms ではなく 12.34ms のように見えます。
変換ユーティリティは一部のフィールドのみを選択し、最後の列にタイムスタンプを含む CSV ファイルを生成します。ご覧のとおり、数値形式では小数点が使用されます。残念ながら、イタリアでは小数点のコンマとポイントをグループ セパレータとして使用するため、Excel はそれを無視し、12.419 を 12419、12.34 を 1234 と認識します。Excel がこれらの数値をマイクロ秒と認識しても問題ありませんが、1234μs は 12419μs の 10 分の 1 です。
私の質問は
これらの数値が小数点で意味されていることをExcelに理解させるにはどうすればよいですか? カスタマイズした数値形式を入力すると、0.000
10 進数 2 桁の数値は文字列として扱われ、左揃えになります
あるいは
ログは何度でも再変換できますが、実験全体を繰り返したくないので、C# で double を string に変換して小数点以下 3 桁を強制する方法を教えてください。
前もって感謝します
PS: この質問は、stackoverflow とスーパーユーザーの間のものであることは理解していますが、2 番目のケースでは C# のヘルプも尋ねました。