You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#读取远程CNC程序字节缓冲区并按行拆分至字符串数组的方法

解决CNC程序字节缓冲区拆分多行并在Blazor展示的问题

问题原因

从你提供的字节序列能看到,CNC程序的换行符是Windows标准的\r\n(十六进制0D-0A),但你的代码仅将缓冲区转为单个字符串,且Blazor中直接输出字符串时,HTML会把换行符解析为空格,导致所有内容显示为一行。另外字节序列末尾有两组0D-0A,会产生空行,需要过滤。

代码修改方案

1. 修改读取方法,直接返回字符串数组

调整原方法的输出类型,在读取完成后直接拆分出每一行:

public Int32 doNCK_CopyFromNCAlloc(Int32 connnr, Int32 timeout, string path, out string[] CNC_File_Lines)
{
    Int32 result = 0;
    Byte[] buff = null;
    Int32 bufflen = 0;
    String filename = path;
    CNC_File_Lines = Array.Empty<string>(); // 初始化默认空数组
    result = AGL4.NCK_CopyFromNCAlloc(connnr, filename, out buff, out bufflen, timeout);

    if (result == 0)
    {                
        // 转换为UTF8字符串并清理空字符
        string rawContent = System.Text.Encoding.UTF8.GetString(buff).Replace("\0", string.Empty);
        // 按Windows换行符拆分,自动移除空行
        CNC_File_Lines = rawContent.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    }            
    Return_Read_CNC_File = result;
    return result;
}

2. 保留原方法输出,在Blazor中拆分

如果不想修改原方法的输出类型,可在Blazor组件内对获取到的字符串进行拆分:

// Blazor组件代码块
private string[] cncProgramLines = Array.Empty<string>();

protected override void OnInitialized()
{
    string cncContent = "";
    int result = yourService.doNCK_CopyFromNCAlloc(connnr, timeout, path, out cncContent);
    if (result == 0)
    {
        cncProgramLines = cncContent.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
    }
}

Blazor页面逐行展示

在Razor页面中用循环渲染每一行内容:

@if (cncProgramLines.Any())
{
    <div class="cnc-program-container">
        @foreach (var line in cncProgramLines)
        {
            <div class="cnc-line">@line</div>
        }
    </div>
}
else
{
    <p>未读取到CNC程序内容</p>
}

如果需要保留程序原格式(比如缩进),也可以直接用<pre>标签渲染完整字符串:

@if (!string.IsNullOrEmpty(CNC_File_Out))
{
    <pre class="cnc-pre">@CNC_File_Out</pre>
}

内容的提问来源于stack exchange,提问作者Mdarende

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 12:57:11