精易论坛
标题: 汇编极速分割文本演示带源码无模块 [打印本页]
作者: jr21066 时间: 2018-9-10 22:30
标题: 汇编极速分割文本演示带源码无模块
易语言的分割文本速度真的慢.偏偏论坛里经常有人在用这个功能.这几天基本都没抢回帖.一直在折腾这个了.
过程跳过,最后的结果是这样.不能变成一个很完整的模块功能,在使用上有一点点小限制.但我觉得还是有实用价值的.所以放上来测试一下.
附件里是例子,使用要注意的都有注释.这里也说一下.
易所有使用的变量都是要回收的.在结束的时间.所以定义数组时要进行预定义.我加的大.实际可以根据需要设置.每个成员占一个整数的位置.也就是4字节.怕麻烦的就设置大一些.关系不大.
第一句取数组成员数也是完成数组内存分配的.这个没办法去掉了.
过程很简单.给字节集内容.给数组.分隔符暂时没有考虑.如果功能真的实用了.再考虑.
使用字节集也是为了专门处理大文件.起码可以少转换一次.
最后献上不太长的代码..最后要说的是没有模块.源码是使用了汇编_取随机数做演示才用到了模块.
变量名 | 类 型 | 静态 | 数组 | 备 注 |
文本数组1 | 文本型 | | 99999999 |
文本内容 | 字节集 | | |
计数器 | 整数型 | | |
行数 | 整数型 | | |
时间1 | 整数型 | | |
取数组成员数 (文本数组1
) 文本内容 =
读入文件 (“R:\Desktop\123.txt”) +
{ 0
}
如果真 (取字节集长度 (文本内容
) < 4
)
调试输出 (“文件为空”)
时间1 =
取启动时间 ()汇编_分割文本 (文本内容, 文本数组1
)调试输出 (“分割用时: ”,
取启动时间 () - 时间1
)调试输出 (“共”,
取数组成员数 (文本数组1
),
“成员”)
计次循环首 (4,
)
行数 =
汇编_取随机数 (1,
取数组成员数 (文本数组1
))
调试输出 (行数, 文本数组1
[行数
])
计次循环尾 ()返回 (0
) |
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 字节集 | | | |
参_文本数组 | 文本型 | | | |
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 184, 1, 0, 0, 0, 137, 3, 137, 83, 4, 138, 2, 60, 13, 117, 7, 49, 192, 136, 2, 66, 226, 243, 60, 10, 117, 19, 49, 192, 136, 2, 66, 139, 3, 64, 137, 3, 193, 224, 2, 1, 216, 137, 16, 226, 220, 66, 226, 217, 139, 3, 201, 194, 8, 0
})返回 (0
)
-
-
汇编_分割文本.e
742.19 KB, 下载次数: 258, 下载积分: 精币 -2 枚
作者: e4nzat 时间: 2018-9-10 23:20
谢谢,收下了~
作者: う网淅乄 时间: 2018-9-11 00:30
只能换行符?
作者: 浪漫伊波啦 时间: 2018-9-11 02:22
谢谢,收下了~.很强大
作者: jr21066 时间: 2018-9-11 06:15
先测试吧.其它的分隔符也可以.要另写代码.
如果分隔符太长.就会变慢不少的.
作者: cf2006a 时间: 2018-9-11 06:53
没能 正确取出数据 还是我用法错误!!
作者: cf2006a 时间: 2018-9-11 07:05
本帖最后由 cf2006a 于 2018-9-11 07:10 编辑
mov edx, dword [edx] mov edx, dword [edx]
mov ebx, dword [ebx]
mov ebx, dword [ebx]
请教下为什么要取两次一样的 值
loop Label2 看了下用了三个 循环 那它的结束条件是什么呢
作者: jr21066 时间: 2018-9-11 07:35
数值是传址模式.参数也是传址.就加了两次
结束条件是字节集文本内容的长度.
所以你的例子里没有给文本内容加东西.是空的.因为这里的数据将来是直接给文本数组使用的.可以省掉易重新分配内存的过程.
作者: dice1412 时间: 2018-9-11 09:02
建议再加个参数 自定义分割的字符
作者: hellohexiang 时间: 2018-9-11 09:06
千万级别的 如果连续处理 好像容易崩溃 是不是内存没有释放结束?
作者: jr21066 时间: 2018-9-11 09:33
因为省略了内存分配 过程.所以能使用的最大数量取决于文本数组所定义的数组最大数.
例子里我加的是99999999.好象最大是1410065407.可以试下.
越大.使用的内存越大.大小是整数,四字节.
作者: cf2006a 时间: 2018-9-11 09:33
调试输出 (文本_逐个分割_局部_自编 (“1000W不崩4秒 速度会慢些毕竟内部要取空白填充”, 数组
))
|
文本_逐个分割_局部_自编 | 文本型 | |
|
要寻找的文本 | 文本型 | | | |
返回数组 | 文本型 | | | |
ret =
取空白文本 (取文本长度 (要寻找的文本
) × 2
)置入代码 ({ 139, 125, 8, 139, 63, 49, 201, 138, 31, 128, 251, 0, 116, 20, 128, 251, 127, 118, 7, 136, 28, 8, 71, 65, 138, 31, 136, 28, 8, 65, 65, 71, 235, 229, 198, 68, 8, 255, 0, 201, 194, 4, 0
})返回 (“”)
这个之前写的一直没搞明白怎么加入数组 你能帮看下吗?你现在这个我有点看不明白
能把这个改下 让它加入到数组里 谢谢!
作者: cf2006a 时间: 2018-9-11 09:36
调试输出 (文本_逐个分割_局部_自编 (“1000W不崩4秒 速度会慢些毕竟内部要取空白填充”, 数组
))
|
文本_逐个分割_局部_自编 | 文本型 | |
|
要寻找的文本 | 文本型 | | | |
返回数组 | 文本型 | | | |
ret =
取空白文本 (取文本长度 (要寻找的文本
) × 2
)置入代码 ({ 139, 125, 8, 139, 63, 49, 201, 138, 31, 128, 251, 0, 116, 20, 128, 251, 127, 118, 7, 136, 28, 8, 71, 65, 138, 31, 136, 28, 8, 65, 65, 71, 235, 229, 198, 68, 8, 255, 0, 201, 194, 4, 0
})返回 (“”)
这个是逐个分割的代码 之前就想分割到数组 可惜 刚学又没有这方面的 例子 现在看你的代码 还是不太明白
能帮把这个代码加入到数组里吗?
作者: cf2006a 时间: 2018-9-11 09:37
调试输出 (文本_逐个分割_局部_自编 (“1000W不崩4秒 速度会慢些毕竟内部要取空白填充”, 数组
))
|
文本_逐个分割_局部_自编 | 文本型 | |
|
要寻找的文本 | 文本型 | | | |
返回数组 | 文本型 | | | |
ret =
取空白文本 (取文本长度 (要寻找的文本
) × 2
)置入代码 ({ 139, 125, 8, 139, 63, 49, 201, 138, 31, 128, 251, 0, 116, 20, 128, 251, 127, 118, 7, 136, 28, 8, 71, 65, 138, 31, 136, 28, 8, 65, 65, 71, 235, 229, 198, 68, 8, 255, 0, 201, 194, 4, 0
})返回 (“”)
这个是逐个分割的代码 之前就想分割到数组 可惜 现在看你的代码 还是不太明白
能帮把这个代码加入到数组里吗?
作者: cf2006a 时间: 2018-9-11 09:39
本帖最后由 cf2006a 于 2018-9-11 09:41 编辑
调试输出 (文本_逐个分割_局部_自编 (“1000W不崩4秒 速度会慢些毕竟内部要取空白填充”, 数组
))
|
文本_逐个分割_局部_自编 | 文本型 | |
|
要寻找的文本 | 文本型 | | | |
返回数组 | 文本型 | | | |
ret =
取空白文本 (取文本长度 (要寻找的文本
) × 2
)置入代码 ({ 139, 125, 8, 139, 63, 49, 201, 138, 31, 128, 251, 0, 116, 20, 128, 251, 127, 118, 7, 136, 28, 8, 71, 65, 138, 31, 136, 28, 8, 65, 65, 71, 235, 229, 198, 68, 8, 255, 0, 201, 194, 8, 0
})返回 (“”)
这个是之前写的 逐字分割 本想 直接分割到数组的可惜没这方面的例子所以一直到现在还没弄出来,看了你的代码还是有些不懂,能把这个改下吗?
让它直接分割到数组里
作者: 350246356 时间: 2018-9-11 09:40
分隔符不能自己设置吗
作者: jr21066 时间: 2018-9-11 09:50
数组的格式是先是一个整数,表明成员数.然后是成员地址.
按这个格式来写数组的.
数组成员要申请内存来放自己的.易是自动的.自己用汇编就要找个地方来放这些东西.不然程序会出错.
作者: 84583728 时间: 2018-9-11 10:09
66666666666666
作者: cf2006a 时间: 2018-9-11 10:31
数组 1 = 整数 1 + 数组 1 地址吗
作者: jr21066 时间: 2018-9-11 12:37
数组就是一个整数数组的样子.
第一个整数是成员数.后边的整数是成员的地址
作者: cf2006a 时间: 2018-9-11 15:45
好像你之前也写过逐个分割 写个例子看下
作者: jr21066 时间: 2018-9-11 16:10
因为一直没用上这功能.也感觉不到有啥用处.所以没写这个.
其实都已经逐字处理了.这时速度已经不是第一位了.
我觉得可以转字节集.读字节出来判断加入新变量中.循环处理完成.
作者: 597911291 时间: 2018-9-11 20:51
看看
作者: xxiaoshujjun 时间: 2018-9-12 21:13
找个只能按行数分割吗?如果我里面文本想按自己的特定符号怎么分?
作者: cf2006a 时间: 2018-9-12 21:33
|
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 字节集 | | | |
参_文本数组 | 文本型 | | | |
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 184, 1, 0, 0, 0, 137, 3, 137, 83, 4, 138, 2, 60, 13, 117, 3, 66, 226, 247, 60, 10, 117, 15, 49, 192, 136, 2, 66, 139, 3, 64, 137, 3, 137, 20, 131, 226, 228, 66, 226, 225, 139, 3, 201, 194, 8, 0
})返回 (0
)
大概知道了点意思 就是把 13 10 那个位置的指针 给数组 成员!
作者: jr21066 时间: 2018-9-12 21:36
随后增加.
可能是单字符的分隔
作者: jr21066 时间: 2018-9-12 21:39
13 10修改为0.做为字符串结束标记.
分隔符的下一个位置就是下一个字符串的开始位置写到文本数组的成员中
0只需要一个.所以分隔符是可以有单字符的.多字符的话.判断太多.很影响效率.不想做了.越做越慢不如用系统的.还安全.
作者: cf2006a 时间: 2018-9-13 09:27
|
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 字节集 | | | |
参_文本数组 | 文本型 | | | |
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 138, 2, 60, 10, 117, 13, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 226, 237, 66, 226, 234, 139, 3, 201, 194, 8, 0
})返回 (0
)帮你优化了下代码你看下这样会不会更快些
作者: cf2006a 时间: 2018-9-13 09:29
本帖最后由 cf2006a 于 2018-9-13 10:04 编辑
|
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 字节集 | | | |
参_文本数组 | 文本型 | | | |
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 138, 2, 60, 13, 117, 11, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 66, 226, 236, 139, 3, 201, 194, 8, 0
})返回 (0
)
帮你优化了下不知道 对不对 看看会不会比之前的快
lea edx, dword [ebp+0x08]
mov edx, dword [edx]
mov edx, dword [edx]
mov ecx, dword [edx+0x04]
add edx, 0x08
lea ebx, dword [ebp+0x0C]
mov ebx, dword [ebx]
mov ebx, dword [ebx]
add ebx, 0x04
mov dword [ebx], 0x00000001
mov dword [ebx+0x04], edx 上面没动和你的一样 下面你用三个loop 我给你减掉两个
Label2:
mov al, byte [edx]
cmp al, 0x0D 如果我没理解错的话找到13 开始在尾部加0截断文本 因为换行符 13 后面会跟一个10 所有13 这里截断就不会有换行符出现
jne Label1
mov byte [edx], 0x00000000
inc edx 这应加1后该是10 把10这个地址给 下个数组 当成开始的 位置 当然你也可以Edx加2直接给下个数据段开始地址给它不过我觉得没必要因为10 是控制符是不会显示出来的对你文本输出调用时没什么影响的
inc dword [ebx]
mov eax, dword [ebx]
mov dword [ebx+eax*4], edx
Label1:
inc edx 这里10后面加1 是真正数据开始的位置 所有就可以把两个loop 简化成一个 不会影响取出的数据
loop Label2
mov eax, dword [ebx]
leave
retn 0x0008
作者: jr21066 时间: 2018-9-13 12:45
cf2006a 发表于 2018-9-13 09:29
[/quote
]写0a是没有必要的.只是一种完美心理了.
去掉写0a的代码如下.未测试
[e=4
]lea edx,
[ebp+8
]mov edx,
[edx
]mov edx,
[edx
]mov ecx,
[edx+4
];字节集长度
add edx,8;文本字节集地址
lea ebx,
[ebp+10h
]mov ebx,
[ebx
]mov ebx,
[ebx
]add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov
[ebx
],eax
mov
[ebx+4
],edx
begin:
mov al,byte ptr
[edx
]cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr
[edx
],al
inc edx
inc edx
mov eax,
[ebx
]inc eax
mov
[ebx
],eax;成员数加一
shl eax,2
add eax,ebx
mov
[eax
],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,
[ebx
];取成员数
leave
ret 12
写0a是没有必要的.只是一种完美心理了.
去掉写0a的代码如下.未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4] ;字节集长度
add edx,8 ;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4 ;数组成员数地址
mov eax,1 ;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2 ;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax ;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx ;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx] ;取成员数
leave
ret 12
作者: jr21066 时间: 2018-9-13 12:46
cf2006a 发表于 2018-9-13 09:29
[/quote
]写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4
]lea edx,
[ebp+8
]mov edx,
[edx
]mov edx,
[edx
]mov ecx,
[edx+4
];字节集长度
add edx,8;文本字节集地址
lea ebx,
[ebp+10h
]mov ebx,
[ebx
]mov ebx,
[ebx
]add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov
[ebx
],eax
mov
[ebx+4
],edx
begin:
mov al,byte ptr
[edx
]cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr
[edx
],al
inc edx
inc edx
mov eax,
[ebx
]inc eax
mov
[ebx
],eax;成员数加一
shl eax,2
add eax,ebx
mov
[eax
],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,
[ebx
];取成员数
leave
ret 12
写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4] ;字节集长度
add edx,8 ;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4 ;数组成员数地址
mov eax,1 ;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2 ;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax ;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx ;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx] ;取成员数
leave
ret 12
作者: jr21066 时间: 2018-9-13 12:46
cf2006a 发表于 2018-9-13 09:29
[/quote
]写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4
]lea edx,
[ebp+8
]mov edx,
[edx
]mov edx,
[edx
]mov ecx,
[edx+4
];字节集长度
add edx,8;文本字节集地址
lea ebx,
[ebp+10h
]mov ebx,
[ebx
]mov ebx,
[ebx
]add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov
[ebx
],eax
mov
[ebx+4
],edx
begin:
mov al,byte ptr
[edx
]cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr
[edx
],al
inc edx
inc edx
mov eax,
[ebx
]inc eax
mov
[ebx
],eax;成员数加一
shl eax,2
add eax,ebx
mov
[eax
],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,
[ebx
];取成员数
leave
ret 12
写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4] ;字节集长度
add edx,8 ;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4 ;数组成员数地址
mov eax,1 ;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2 ;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax ;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx ;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx] ;取成员数
leave
ret 12
作者: jr21066 时间: 2018-9-13 12:48
cf2006a 发表于 2018-9-13 09:29
[/quote
]写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4
]lea edx,
[ebp+8
]mov edx,
[edx
]mov edx,
[edx
]mov ecx,
[edx+4
];字节集长度
add edx,8;文本字节集地址
lea ebx,
[ebp+10h
]mov ebx,
[ebx
]mov ebx,
[ebx
]add ebx,4;数组成员数地址
mov eax,1;写入第一组内容
mov
[ebx
],eax
mov
[ebx+4
],edx
begin:
mov al,byte ptr
[edx
]cmp al,13
jnz addr2;回车写回0
xor eax,eax
mov byte ptr
[edx
],al
inc edx
inc edx
mov eax,
[ebx
]inc eax
mov
[ebx
],eax;成员数加一
shl eax,2
add eax,ebx
mov
[eax
],edx;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,
[ebx
];取成员数
leave
ret 12
写0a是没有必要的.只是一种完美心理了.
去掉0a的代码如下,未测试
[e=4]lea edx,[ebp+8]
mov edx,[edx]
mov edx,[edx]
mov ecx,[edx+4] ;字节集长度
add edx,8 ;文本字节集地址
lea ebx,[ebp+10h]
mov ebx,[ebx]
mov ebx,[ebx]
add ebx,4 ;数组成员数地址
mov eax,1 ;写入第一组内容
mov [ebx],eax
mov [ebx+4],edx
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2 ;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax ;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx ;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx] ;取成员数
leave
ret 12
作者: jr21066 时间: 2018-9-13 12:50
只是完美心理的原因. 0a写了一点用也没有.
回帖一直失败.复制一部分看看还出错不
begin:
mov al,byte ptr [edx]
cmp al,13
jnz addr2 ;回车写回0
xor eax,eax
mov byte ptr [edx],al
inc edx
inc edx
mov eax,[ebx]
inc eax
mov [ebx],eax ;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx ;写成员地址
loop begin
addr2:
inc edx
loop begin
mov eax,[ebx] ;取成员数
leave
ret 12
作者: jr21066 时间: 2018-9-13 13:09
疯了.前边多了好多重复帖.
这个是又修改了一下的.
begin:
mov al,byte ptr [edx]
cmp al,13
inc edx
jnz addr1
xor eax,eax
mov byte ptr [edx],al
inc edx
dec ecx
mov eax,[ebx]
inc eax
mov [ebx],eax ;成员数加一
shl eax,2
add eax,ebx
mov [eax],edx ;写成员地址
addr1:
loop begin
mov eax,[ebx] ;取成员数
leave
ret 12
作者: cf2006a 时间: 2018-9-13 13:14
本帖最后由 cf2006a 于 2018-9-13 13:25 编辑
自定义分隔符 截断会改变原文本数据吧 像你这个13 10 可以用0去替换截断 要是自定义的话 往哪里加0 截断啊
加进去数据就被破坏了!不适用这种方法
用我的这个方法不是代码更少,更容易理解!试了几次一样可以按换行符分割
Label2:
mov al, byte [edx]
cmp al, 0x0D
jne Label1
mov byte [edx], 0x00000000
inc edx
inc dword [ebx]
mov eax, dword [ebx]
mov dword [ebx+eax*4], edx
Label1:
inc edx
loop Label2
mov eax, dword [ebx]
leave
retn 0x0008
作者: jr21066 时间: 2018-9-13 13:59
我用的还是低版的汇编工具.是不支持直接对内存数操作的.
另外你没有减ecx.
作者: cf2006a 时间: 2018-9-13 15:29
loop 每循环一次 会自动 在 ecx 里减 1
作者: sx大总管 时间: 2018-9-13 15:40
弄一个可以设置分隔符的吧
作者: zhutao3233 时间: 2018-9-13 18:34
方法不错,但是分割的第一个文本的开头 是乱码!
作者: jr21066 时间: 2018-9-13 19:06
能提供一下文件开头吗.
作者: cf2006a 时间: 2018-9-13 20:30
变量名 | 类 型 | 静态 | 数组 | 备 注 |
文本数组1 | 文本型 | | 99999999 |
文本内容 | 文本型 | | |
文本内容 =
“可以根据您的需要返回任意数值” +
“ ” +
“句来给数组预申请内存空间” +
“ ” +
“汇编_取随机数”调试输出 (汇编_分割文本 (文本内容, 文本数组1,
“ ”), 文本数组1,
#换行符, 文本内容
) |
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 文本型 | | | |
参_文本数组 | 文本型 | | | | 参_分隔符 | 文本型 | | | |
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 139, 77, 16, 139, 9, 138, 41, 138, 10, 128, 249, 0, 116, 20, 56, 233, 117, 13, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 235, 232, 66, 235, 229, 139, 3, 201, 194, 12, 0
})返回 (0
)修改了下可以指定分割符 目前只支持单字符
作者: zhutao3233 时间: 2018-9-13 21:34
锘縣ttps://img02.sogoucdn.com/app/a/100520020/59b3bf5986902026366e0062851cd7a3
https://img02.sogoucdn.com/app/a/100520024/6795f74b35e0297629e7a6a878b6fcc9
作者: jr21066 时间: 2018-9-13 21:43
图很棒.有文本吗?
分割字节集的没有做
作者: cf2006a 时间: 2018-9-13 21:54
|
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 文本型 | | | |
参_文本数组 | 文本型 | | | | 参_分隔符 | 文本型 | | | |
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 139, 77, 16, 139, 9, 138, 41, 138, 10, 128, 249, 0, 116, 20, 56, 233, 117, 13, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 235, 232, 66, 235, 229, 139, 3, 201, 194, 12, 0
})返回 (0
)
这个是带分割符的 只支持一个单字符 多字符还是得你来弄 我弄不来
作者: zhutao3233 时间: 2018-9-14 00:45
文本就是这个啊
https://img02.sogoucdn.com/app/a/100520020/59b3bf5986902026366e0062851cd7a3
https://img02.sogoucdn.com/app/a/100520024/6795f74b35e0297629e7a6a878b6fcc9
作者: jr21066 时间: 2018-9-14 06:53
还是没试出来.这是我这边的结果
正在编译...
正在生成主程序入口代码
程序代码编译成功
正在封装易格式目的代码
开始运行被调试程序
* “分割用时: ” | 0.000000
* “共” | 2 | “成员”
* 2 | “https://img02.sogoucdn.com/app/a/100520024/6795f74b35e0297629e7a6a878b6fcc9”
* 2 | “https://img02.sogoucdn.com/app/a/100520024/6795f74b35e0297629e7a6a878b6fcc9”
* 2 | “https://img02.sogoucdn.com/app/a/100520024/6795f74b35e0297629e7a6a878b6fcc9”
* 1 | “https://img02.sogoucdn.com/app/a/100520020/59b3bf5986902026366e0062851cd7a3”
被调试易程序运行完毕
作者: 太行山搬书 时间: 2018-9-14 12:06
学习了,谢谢分享
作者: cf2006a 时间: 2018-9-14 20:03
.版本 2
.子程序 汇编_分割文本, 整数型, 公开, 返回分割总个数
.参数 参_文本内容, 文本型
.参数 参_文本数组, 文本型, 数组
.参数 参_分隔符, 文本型
置入代码 ({ 139, 85, 8, 139, 18, 139, 93, 12, 139, 27, 131, 195, 4, 199, 3, 1, 0, 0, 0, 137, 83, 4, 139, 77, 16, 139, 9, 138, 41, 138, 10, 128, 249, 0, 116, 25, 56, 233, 117, 18, 56, 106, 1, 116, 13, 198, 2, 0, 66, 255, 3, 139, 3, 137, 20, 131, 235, 227, 66, 235, 224, 201, 194, 12, 0 })
返回 (0)
作者: 陈宁 时间: 2018-9-17 01:01
本帖最后由 15291367 于 2018-9-17 01:13 编辑
发现了点bug,分隔符为,的时候,分割出来的结果只有第一个正确,剩下的都是乱码。
如下:
- <p>.版本 2
- .支持库 spec
- .局部变量 数组, 文本型, , "0"
- .局部变量 i, 整数型
- 汇编_分割文本 (“啊,是,你,嘛”, 数组, “,”)
- .计次循环首 (取数组成员数 (数组), i)
- 调试输出 (数组 [i])
- .计次循环尾 ()
- </p>
复制代码
作者: 天行 时间: 2018-9-17 13:51
不用汇编,汇编在多线程下不稳定,会导致程序崩溃
作者: taohongsen1990 时间: 2018-9-17 15:01
谢谢楼主分享
作者: 09M73 时间: 2018-9-20 14:25
感谢分享~~~
作者: cf2006a 时间: 2018-9-21 14:14
多字符分割弄好了吗 ,弄好了分享个!
作者: jr21066 时间: 2018-9-21 22:27
多字符会比较影响效率.如果超过四字节就很影响了.
不如用系统的.
作者: love`Z 时间: 2018-9-22 15:45
奈斯,支持
作者: siniandd 时间: 2018-9-22 22:20
层主说了 只支持 单字符
中文的, 是双字节吧
作者: 陈宁 时间: 2018-9-22 22:33
表示只看了第一页- -,后面没看
作者: siniandd 时间: 2018-9-22 22:39
汇编的确快好多
手中有个大神给的模块 1000w QQ 500-600毫秒 支持任意字符
层主的 100毫秒左右 可惜只支持 单字符 不过用来分割qq啥的 足够了
作者: 陈宁 时间: 2018-9-22 23:11
求分享啊~~
作者: siniandd 时间: 2018-9-22 23:18
他说的 自己用的模块 你懂的
不过推荐你 空之影 数组支持库
1000w 编译后 1秒左右 问题是 功能多啊 去重复啥的 爽歪歪
作者: jr21066 时间: 2018-9-23 14:57
新的修改代码加简单的测试代码.建议使用新的代码使用前一定要使用 取数组成员数来分配内存.如果你不想这么麻烦.可以把变量修改为静态变量放到调用里.,但这样会占用大量内存的.
表1 =
到字节集 (“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890-_”)表长度 =
取字节集长度 (表1
)
计次循环首 (99999, 计数器
)
计次循环首 (汇编_取随机数 (1, 30
),
)

分割内容.
添加 (取字节集中间 (表1,
汇编_取随机数 (1, 表长度
), 1
))

计次循环尾 ()
分割内容.
添加 ({ 13, 10
})
计次循环尾 ()写到文件 (取特定目录 ( #系统桌面 ) +
“\测试文本_换行符.txt”, 分割内容.
取字节集 (,
))
取数组成员数 (内容数组
)内容 =
读入文件 (取特定目录 ( #系统桌面 ) +
“\测试文本_换行符.txt”)汇编_分割文本 (内容, 内容数组,
)调试输出 (取数组成员数 (内容数组
), 内容数组
[汇编_取随机数 (1,
取数组成员数 (内容数组
))
], 内容数组
[汇编_取随机数 (1,
取数组成员数 (内容数组
))
], 内容数组
[汇编_取随机数 (1,
取数组成员数 (内容数组
))
])|
汇编_分割文本 | 整数型 | |
|
参_文本内容 | 字节集 | | | |
参_文本数组 | 文本型 | | | | 参_分隔符 | 文本型 | | | |
如果真 (取字节集长度 (参_文本内容
) < 4
)
返回 (0
)局_分隔符 = 取代码 (参_分隔符, )
如果 (是否为空 (参_分隔符
))
置入代码 ({ 139, 85, 8, 139, 18, 139, 74, 4, 131, 194, 8, 139, 93, 12, 139, 27, 131, 195, 4, 184, 1, 0, 0, 0, 137, 3, 137, 83, 4, 138, 2, 60, 13, 117, 26, 51, 192, 136, 2, 66, 139, 194, 64, 59, 200, 115, 17, 139, 3, 64, 137, 3, 193, 224, 2, 3, 195, 137, 16, 235, 1, 66, 226, 221, 139, 3, 201, 194, 12, 0
})
置入代码 ({ 141, 85, 8, 139, 18, 139, 18, 139, 74, 4, 131, 194, 8, 141, 93, 12, 139, 27, 139, 27, 131, 195, 4, 139, 117, 252, 184, 1, 0, 0, 0, 137, 3, 137, 83, 4, 15, 182, 2, 59, 198, 117, 26, 51, 192, 136, 2, 66, 139, 194, 64, 59, 200, 115, 17, 139, 3, 64, 137, 3, 193, 224, 2, 3, 195, 137, 16, 235, 1, 66, 226, 220, 139, 3, 201, 194, 12, 0
})
返回 (0
)
作者: jr21066 时间: 2018-9-29 14:18
加上分隔符参数了.使用时注意第一条指令一定是 取数组成员数()
|
汇编_分割文本 | | |
|
参_内容 | 字节集 | | | |
参_文本数组 | 文本型 | | | | 参_分隔符 | 字节集 | | | |
如果真 (取字节集长度 (参_内容
) = 0
)
返回 ()
如果真 (是否为空 (参_分隔符
))

参_分隔符 =
{ 13, 10
}局_内容 = 参_内容
如果真 (取字节集右边 (局_内容,
取字节集长度 (参_分隔符
)) ≠ 参_分隔符
)
局_内容 = 局_内容 + 参_分隔符
取变量地址 (局_内容
)置入代码 ({ 137, 195, 139, 27, 139, 75, 4, 141, 123, 8, 139, 69, 16, 139, 0, 139, 80, 4, 139, 69, 12, 139, 24, 131, 195, 4, 49, 192, 137, 3, 255, 3, 137, 123, 4, 252, 139, 69, 16, 139, 0, 141, 112, 8, 172, 242, 174, 227, 35, 65, 79, 81, 137, 209, 78, 243, 166, 117, 19, 137, 209, 49, 192, 41, 215, 243, 170, 255, 3, 139, 3, 193, 224, 2, 1, 216, 137, 56, 89, 41, 215, 71, 226, 208, 139, 69, 16, 139, 0, 138, 64, 8, 58, 71, 255, 116, 4, 255, 11, 235, 5, 49, 192, 137, 71, 255
})
作者: jr21066 时间: 2018-10-5 15:10
用图片说明一下数组的结构.
易的分割文本为什么慢呢.这是因为每增加一个成员时,都需要先申请内存,写数据内容,写数据指针.修改成员数.次数多了就会很慢的.
好处是增加删除成员时很方便.内存管理也方便.在过程结束时系统会自动释放临时变量使用的内存的.
-
幻灯片1.JPG
(39.63 KB, 下载次数: 0)
-
幻灯片2.JPG
(42.04 KB, 下载次数: 0)
作者: 未离吖 时间: 2018-10-22 16:44
大佬,为啥我运行的时候执行两次分割就会崩啊嘤嘤嘤
作者: jr21066 时间: 2018-10-22 17:11
分割不会出错.但数组成员没有分配内存就不行.
两种.一种是在最开始就设置一个大的成员数.
第二种时在子程序返回前将数组重定义回0
作者: carmen9804 时间: 2019-3-3 20:12










作者: a3960382663 时间: 2019-4-5 00:31
全汇编文本操作模块速度
作者: 遵义静以修身 时间: 2019-5-1 13:27
感谢大神分享
作者: tasbox 时间: 2019-6-16 13:34
很快 使用,比自带的快很多了
作者: 0312 时间: 2019-8-16 00:43
66666666666666
作者: 13804061190 时间: 2020-1-7 21:34
作者吱吱吱吱吱吱吱吱
欢迎光临 精易论坛 (https://125.confly.eu.org/) |
Powered by Discuz! X3.4 |