Improve output formating
This commit is contained in:
@@ -6,7 +6,6 @@ using Sharp7.Rx;
|
|||||||
using Sharp7.Rx.Enums;
|
using Sharp7.Rx.Enums;
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
using Spectre.Console.Cli;
|
using Spectre.Console.Cli;
|
||||||
using Spectre.Console.Rendering;
|
|
||||||
|
|
||||||
namespace Sharp7.Monitor;
|
namespace Sharp7.Monitor;
|
||||||
|
|
||||||
@@ -31,27 +30,6 @@ internal sealed class ReadPlcCommand : AsyncCommand<ReadPlcCommand.Settings>
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IRenderable FormatCellData(object value)
|
|
||||||
{
|
|
||||||
return value switch
|
|
||||||
{
|
|
||||||
IRenderable renderable => renderable,
|
|
||||||
Exception ex => new Text(ex.Message, CustomStyles.Error),
|
|
||||||
byte[] byteArray => new Text(string.Join(" ", byteArray.Select(b => $"0x{b:X2}")), CustomStyles.Hex),
|
|
||||||
byte => FormatNo(),
|
|
||||||
short => FormatNo(),
|
|
||||||
ushort => FormatNo(),
|
|
||||||
int => FormatNo(),
|
|
||||||
uint => FormatNo(),
|
|
||||||
long => FormatNo(),
|
|
||||||
ulong => FormatNo(),
|
|
||||||
|
|
||||||
_ => new Text(value.ToString() ?? "", CustomStyles.Default)
|
|
||||||
};
|
|
||||||
|
|
||||||
Markup FormatNo() => new($"[lightgoldenrod2_1]0x{value:X2}[/] {value}", CustomStyles.Default);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static async Task RunProgram(Settings settings, CancellationToken token)
|
private static async Task RunProgram(Settings settings, CancellationToken token)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"Connecting to plc [green]{settings.PlcIp}[/], CPU [green]{settings.CpuMpiAddress}[/], rack [green]{settings.RackNumber}[/]. ");
|
AnsiConsole.MarkupLine($"Connecting to plc [green]{settings.PlcIp}[/], CPU [green]{settings.CpuMpiAddress}[/], rack [green]{settings.RackNumber}[/]. ");
|
||||||
@@ -105,8 +83,7 @@ internal sealed class ReadPlcCommand : AsyncCommand<ReadPlcCommand.Settings>
|
|||||||
foreach (var record in variableContainer.VariableRecords)
|
foreach (var record in variableContainer.VariableRecords)
|
||||||
if (record.HasUpdate(out var value))
|
if (record.HasUpdate(out var value))
|
||||||
table.Rows.Update(
|
table.Rows.Update(
|
||||||
record.RowIdx, 1,
|
record.RowIdx, 1, RenderUtil.FormatCellData(value)
|
||||||
FormatCellData(value)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
ctx.Refresh();
|
ctx.Refresh();
|
||||||
|
|||||||
44
Sharp7.Monitor/RenderUtil.cs
Normal file
44
Sharp7.Monitor/RenderUtil.cs
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
using Spectre.Console;
|
||||||
|
using Spectre.Console.Rendering;
|
||||||
|
|
||||||
|
namespace Sharp7.Monitor;
|
||||||
|
|
||||||
|
internal static class RenderUtil
|
||||||
|
{
|
||||||
|
public static IRenderable FormatCellData(object value)
|
||||||
|
{
|
||||||
|
return value switch
|
||||||
|
{
|
||||||
|
IRenderable renderable => renderable,
|
||||||
|
Exception ex => new Text(ex.Message, CustomStyles.Error),
|
||||||
|
byte[] byteArray => FormatByteArray(byteArray),
|
||||||
|
byte => FormatNo(),
|
||||||
|
short => FormatNo(),
|
||||||
|
ushort => FormatNo(),
|
||||||
|
int => FormatNo(),
|
||||||
|
uint => FormatNo(),
|
||||||
|
long => FormatNo(),
|
||||||
|
ulong => FormatNo(),
|
||||||
|
|
||||||
|
_ => new Text(value.ToString() ?? "", CustomStyles.Default)
|
||||||
|
};
|
||||||
|
|
||||||
|
IRenderable FormatNo() => new Paragraph()
|
||||||
|
.Append($"0x{value:X2}", CustomStyles.Hex)
|
||||||
|
.Append(" ")
|
||||||
|
.Append($"{value}", CustomStyles.Default)
|
||||||
|
;
|
||||||
|
|
||||||
|
IRenderable FormatByteArray(byte[] byteArray) =>
|
||||||
|
new Paragraph()
|
||||||
|
.Append("0x " + string.Join(" ", byteArray.Select(b => $"{b:X2}")), CustomStyles.Hex)
|
||||||
|
.Append(Environment.NewLine)
|
||||||
|
.Append(new string(
|
||||||
|
byteArray
|
||||||
|
.Select(b => (char) b)
|
||||||
|
.Select(c => char.IsControl(c) ? '·' : c)
|
||||||
|
.ToArray()
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user