|
发表于 2025-7-12 14:52:18
|
显示全部楼层
浙江省湖州市
在易语言中可以通过**定位“(”符号位置**来分割这类格式的文本(每个片段均以“(数字)”开头),以下是通用且简洁的实现方案:### 核心分割代码```易语言.版本 2.支持库 spec.子程序 分割文本到编辑框, 逻辑型.参数 原始文本, 文本型.局部变量 片段数组, 文本型, , "0" // 存储分割后的片段.局部变量 左括号位置, 整数型, , "0" // 存储所有"("的位置.局部变量 i, 整数型.局部变量 片段数量, 整数型 // 1. 查找所有"("的位置(每个片段以"("开头) 左括号位置 = 取所有字符位置 (原始文本, "(") 如果 (取数组成员数 (左括号位置) = 0) 调试输出 ("分割失败:文本格式错误,无'('符号") 返回 (假) 结束 // 2. 分割片段(根据"("位置截取) 片段数量 = 取数组成员数 (左括号位置) 重定义数组 (片段数组, 假, 片段数量) 循环 (i = 1 到 片段数量) .如果 (i < 片段数量) // 截取当前"("到下一个"("之间的内容 片段数组 = 取文本中间 (原始文本, 左括号位置 , 左括号位置 [i + 1] - 左括号位置 ) .否则 // 最后一个片段:从当前"("到文本末尾 片段数组 = 取文本右边 (原始文本, 取文本长度 (原始文本) - 左括号位置 + 1) .如果结束 循环结束 // 3. 赋值到编辑框(最多5个,不足补空) 编辑框1.内容 = 选择 (片段数量 ≥ 1, 片段数组 [1], "") 编辑框2.内容 = 选择 (片段数量 ≥ 2, 片段数组 [2], "") 编辑框3.内容 = 选择 (片段数量 ≥ 3, 片段数组 [3], "") 编辑框4.内容 = 选择 (片段数量 ≥ 4, 片段数组 [4], "") 编辑框5.内容 = 选择 (片段数量 ≥ 5, 片段数组 [5], "") 返回 (真).子程序尾// 辅助函数:获取文本中所有指定字符的位置.子程序 取所有字符位置, 整数型, , "0".参数 原文本, 文本型.参数 目标字符, 文本型.局部变量 位置数组, 整数型, , "0".局部变量 当前位置, 整数型.局部变量 起始位置, 整数型 起始位置 = 1 当前位置 = 寻找文本 (原文本, 目标字符, 起始位置, 假) 循环判断 (当前位置 ≠ 0) 加入成员 (位置数组, 当前位置) 起始位置 = 当前位置 + 1 // 从下一个位置继续找 当前位置 = 寻找文本 (原文本, 目标字符, 起始位置, 假) 循环判断尾 () 返回 (位置数组).子程序尾```### 使用示例```易语言.版本 2.子程序 _按钮1_被单击.局部变量 测试文本1, 文本型.局部变量 测试文本2, 文本型.局部变量 测试文本3, 文本型 // 测试示例1 测试文本1 = "(01)15415067040890(17)270930(10)10566846(91)600194740(30)05" 分割文本到编辑框 (测试文本1) // 结果:编辑框1-5分别对应5个片段 // 测试示例2 测试文本2 = "(01)06949450410240(10)SP4124073109(17)270802" 分割文本到编辑框 (测试文本2) // 结果:编辑框1-3有值,4-5为空 // 测试示例3 测试文本3 = "(01)06936733741368(17)270428(10)202504167(21)AED18533GK" 分割文本到编辑框 (测试文本3) // 结果:编辑框1-4有值,5为空.子程序尾```### 代码说明1. **分割原理**: 利用文本中所有`(`的位置作为分割点(每个片段均以`(数字)`开头),通过查找`(`的位置数组,精准截取每个片段。2. **适配性**: - 无论片段数量是3个、4个还是5个,都能自动适配(不足5个时,后续编辑框自动为空)。 - 支持任意以`(数字)`开头的片段格式(如`(01)`、`(10)`、`(17)`、`(21)`等)。3. **优势**: - 无需硬编码具体标识(如`01`、`10`),通用性强。 - 代码简洁,仅通过“查找位置+截取文本”实现,效率高。直接将代码放入易语言程序中,调用`分割文本到编辑框`并传入原始文本即可实现需求。
变量名 | 类 型 | 静态 | 数组 | 备 注 | 片段数组 | 文本型 | | 0" // 存储分割后的 | 左括号位置 | 整数型 | | 0" // 存储所有"("的 | i | 整数型 | | | 片段数量 | 整数型 | | |
// 1. 查找所有" ("的位置(每个片段以" ("开头) 左括号位置 = 取所有字符位置 (原始文本, " (" )如果 (取数组成员数 (左括号位置 ) = 0 )调试输出 ("分割失败:文本格式错误,无 返回 (假)结束 // 2. 分割片段(根据" ("位置截取) 片段数量 = 取数组成员数 (左括号位置 )重定义数组 (片段数组, 假, 片段数量 )循环 (i = 1 到 片段数量 ) 如果 (i < 片段数量 ) // 截取当前" ("到下一个" ("之间的内容  片段数组 [i ] = 取文本中间 (原始文本, 左括号位置 [i ], 左括号位置 [i + 1 ] - 左括号位置 [i ])  // 最后一个片段:从当前" ("到文本末尾  片段数组 [i ] = 取文本右边 (原始文本, 取文本长度 (原始文本 ) - 左括号位置 [i ] + 1 )循环结束// 3. 赋值到编辑框(最多5个,不足补空) 编辑框1.内容 = 选择 (片段数量 ≥ 1, 片段数组 [1 ], "" )编辑框2.内容 = 选择 (片段数量 ≥ 2, 片段数组 [2 ], "" )编辑框3.内容 = 选择 (片段数量 ≥ 3, 片段数组 [3 ], "" )编辑框4.内容 = 选择 (片段数量 ≥ 4, 片段数组 [4 ], "" )编辑框5.内容 = 选择 (片段数量 ≥ 5, 片段数组 [5 ], "" )返回 (真).子程序尾 // 辅助函数:获取文本中所有指定字符的位置 变量名 | 类 型 | 静态 | 数组 | 备 注 | 位置数组 | 整数型 | | 0 | 当前位置 | 整数型 | | | 起始位置 | 整数型 | | |
起始位置 = 1 当前位置 = 寻找文本 (原文本, 目标字符, 起始位置, 假)循环判断 (当前位置 ≠ 0 )加入成员 (位置数组, 当前位置 )起始位置 = 当前位置 + 1 // 从下一个位置继续找 当前位置 = 寻找文本 (原文本, 目标字符, 起始位置, 假)循环判断尾 ()返回 (位置数组 ).子程序尾
变量名 | 类 型 | 静态 | 数组 | 备 注 | 测试文本1 | 文本型 | | | 测试文本2 | 文本型 | | | 测试文本3 | 文本型 | | |
// 测试示例1 测试文本1 = " (01 )15415067040890 (17 )270930 (10 )10566846 (91 )600194740 (30 )05" 分割文本到编辑框 (测试文本1 )// 结果:编辑框1-5分别对应5个片段 // 测试示例2 测试文本2 = " (01 )06949450410240 (10 )SP4124073109 (17 )270802" 分割文本到编辑框 (测试文本2 )// 结果:编辑框1-3有值,4-5为空 // 测试示例3 测试文本3 = " (01 )06936733741368 (17 )270428 (10 )202504167 (21 )AED18533GK" 分割文本到编辑框 (测试文本3 )// 结果:编辑框1-4有值,5为空 .子程序尾
|
|