使用Engee块处理字符串
在这个例子中,我们将创建几个"自定义块",这将允许我们以数组的形式对字符串执行操作。
任务说明
有时处理字符串需要使用基本的数学仪器,这通常通过流程图在教育材料和文章中呈现(例如,在密码学中)。 在这些任务中,能够快速建模解决方案,探索替代方案并执行实验非常有用。 以块的形式表示算法提高了可读性并简化了其结构的工作,使算法易于与其他信息处理阶段相结合,可视化界面等。
我们为此示例创建的自定义块旨在演示使用Engee中的图形建模工具处理字符串的方法之一。
在每个块的属性中有一个字段,您可以通过它输入字符串。
此字符串的进一步工作在掩码编辑器中进行,该编辑器使用所需的方法将其转换为数值向量。:
*转换为位表示,
*或通过其在拉丁字母中的位置(小写)对每个字母进行编码 - AbC 它将成为 123),
*或者在西里尔字母中做同样的事情(бвГ 它将成为 234).
掩码执行预处理并将在"文本"字段中输入的字符串转换为所需的编码。 也可以将编码选择直接安排在掩码中。
块掩码做什么?
每个自定义块的掩码:
- 将文本转换为所需的编码并将其设置为参数
Value街区Constant隐藏在面具下, - 附加块
Constant特殊采样时间(SampleTime),从而在通过块Unbuffer输出参数的向量每秒输出一个字符。, - 更新块的外观。
这些块返回一个一定长度的数组。 为了更容易处理单个位或字符,块的输出值的采样步骤被做成等于字符串的长度。 在1c模型的积分步骤中,常量块只会每5秒输出一个5个字符的字符串。 在每个这样的块之后,有一个Unbuffer块,它将输入向量分解为单独的元素,并为模拟的每个步骤返回一个元素。
启动模型
使用软件控制命令启动此模型:
# Загрузим модель, если она еще не открыта на холсте
if "string_to_bytes_model" ∉ getfield.(engee.get_all_models(), :name)
engee.load( "$(@__DIR__)/string_to_bytes_model.engee");
end
model_data = engee.run( "string_to_bytes_model" );
让我们为第一个块的输出构建一个图表 Unicode String To Bytes:
data_frames = collect( model_data["Unicode String To Bytes.1"] );
data_stream = collect( model_data["Unbuffer.1"] );
plot(
plot( data_frames.time, hcat( data_frames.value... )' .+ (0.01.*collect(1:8))', st=:step, markershape=:circle, title="Кадры (8 бит в каждом + смещение для визуализации)" ),
plot( data_stream.time, data_stream.value, st=:step, markershape=:circle, title="Поток битов" ),
layout=(2,1), legend=false, titlefont=font(10)
)
我们得到字符串"a"(拉丁字符 A,代码 0x41 或 65 在十进制系统中)在二进制表示: 0100 0001.
您可以使用命令获取"逐字节表示"中的字符串
codeunits(ваша_строка)但值得记住的是,源字符串是用Unicode编码的,这就是为什么西里尔字符将是双字节。
codeunits( "Привет" )'
结论
将术语表示为数字数组在协议分析和加密任务中很有用。
使用这些块可以隐藏相关专家对字符串的不必要的技术工作级别,并专注于演示模拟过程或算法。
