Crystal Report中如何每隔n个字符拆分数据生成字符串数组
Crystal Reports 固定间隔拆分字符串生成数组方案
可行性结论
Crystal Reports 完全支持该需求,无需安装额外插件,通过内置公式编辑器编写自定义逻辑即可实现按每隔n个字符的规则拆分字符串,输出结果为字符串数组。
具体实现方法
核心参数说明
先根据业务需求配置两个核心参数,对应你给出的示例:
- 起始偏移量:示例中需要跳过原字符串第1位字符(原串
12345678从第2位开始取数),偏移量设为1;如果不需要跳过开头字符,偏移量设为0即可 - 拆分块长度:即你提到的每隔n个字符的n值,示例中每3个字符为一组,该值设为3
可直接复用的公式代码
打开Crystal Reports的公式工作室,新建公式字段,粘贴以下代码,将其中的数据源字段替换为你实际要处理的报表字段即可:
// 基础配置项 Local StringVar sourceStr := {你的报表数据源.字段名}; // 替换为实际字段 Local NumberVar skipCount := 1; // 开头跳过的字符数,按需调整 Local NumberVar splitStep := 3; // 每段字符长度n,按需调整 Local StringVar Array splitResult; Local NumberVar pos; Local NumberVar index := 1; // 输入长度校验,不足跳过长度直接返回空数组 If Len(sourceStr) <= skipCount Then ( formula := splitResult; ) Else ( // 截取偏移后的有效字符串 sourceStr := Mid(sourceStr, skipCount + 1); // 按固定步长循环拆分 For pos := 1 To Len(sourceStr) Step splitStep Do ( // 仅保留长度刚好等于splitStep的分段,不需要的话可以去掉这个判断,保留不足长度的尾段 If pos + splitStep - 1 <= Len(sourceStr) Then ( Redim Preserve splitResult[index]; splitResult[index] := Mid(sourceStr, pos, splitStep); index := index + 1; ); ); // 返回最终拆分好的数组 formula := splitResult; );
示例效果验证
代入你给出的测试场景:
- 原始输入字符串:
12345678 - 参数配置:skipCount=1,splitStep=3
- 执行过程:先跳过第1位得到子串
2345678,第一次循环取第1-3位得到234,第二次循环取第4-6位得到678,剩余最后1位长度不足3被过滤,最终输出数组正好是你需要的["234","678"]。
注意:Crystal Reports的字符串下标从1开始计数,和多数编程语言从0开始的规则不同,调整起始位置、偏移量时不要搞错计数规则。如果需要单独调用数组中的某一项,直接通过下标取值即可,比如上述示例中
splitResult[1]返回234,splitResult[2]返回678。
内容的提问来源于stack exchange,提问作者i devi
相关产品推荐
相关产品推荐

