txtol——bat文本处理库——bat库化构思
bat吧
全部回复
仅看楼主
level 11
完美突破bat的特殊符号!!!
当前支持:文本分割(和易语言的一样) 反转字符串 取字符串长度
由于%1 %2...的会被吞空格一类的特殊符号
所以关于参数的传送都采用固定变量进行
set /p str=">"
call :lostr
echo 文本长度%return%
==========txtol.bat============
@goto :txtolend
::txtol bat文本操作库 BY L.W.C. QQ 1269719868
::当前版本 V0.0001
::需要 setlocal EnableDelayedExpansion
:fzstr
::反转字符串 设定变量str=要翻转的字符
set i=0
:afzstr
if "!str:~%i%,1!" neq "" set /a i+=1&set stxt[%i%]=!str:~%i%,1!&goto :afzstr
for /l %%i in (0,1,!i!) do set r=!stxt[%%i]!!r!
for /l %%i in (0,1,!i!) do set stxt[%%i]=
set i=&set str=
set return=!r!
set r=
exit/b
:lostr
::取字符串长度 设定变量str=要去长度的字符
set i=0
:alostr
if "!str:~%i%,1!" neq "" set /a i+=1&goto :alostr
set return=!i!
set i=&set str=
exit/b
:fgstr
::分割字符串 设定变量str=分割的字符 fg=用于分割的字符 save=储存结果的变量
set r=&set c=1&set i=0
:afgstr
if "!str:~%i%,1!" neq "" set /a i+=1&if /i "!str:~%i%,1!" neq "!fg!" (set r=!r!!str:~%i%,1!&goto :afgstr ) else (set !save![!c!]=!r!&set/a c+=1&set r=&goto :afgstr )
set !save![!c!]=!r!
set i=&set str=&set r=&set c=&set fg=&set save=
exit/b
:txtolend
===================================
==============例子==============
@echo off&@setlocal EnableDelayedExpansion
set "str=a|b|c"&set "fg=|"&set save=yx
call :fgstr
echo !yx[1]!
pause
================================
当然,不能直接使用,还要从编译器过一遍
==============编译器==============
for /f "delims=" %%i in (%~fs1) do echo %%i>>%~fs2
for /f "delims=" %%i in (txtol.bat) do echo %%i>>%~fs2
==================================
总使用流程如下
写好bat
执行:
编译器.bat [预编译的bat] [编译后保存到的bat]
关于bat库化
就是上面的库,只不过编译器升级下,可执行bat中一些伪代码
关于编译器及伪代码构成的bat ,就叫做bat+吧[滑稽]
@tmxk0411
@超人硬汉
申精
如果不能加精也至少请重开一个精且置顶的帖子来说明bat+
2015年06月10日 12点06分 1
level 11
没亮再来下 @tmxk0411 @超人硬汉
2015年06月10日 12点06分 2
@aiwozhonghuaba 过来围观
2015年06月10日 12点06分
level 14
二分回溯查表法求字符串长度(变量型函数版)
原创:plp626 @bathome
@echo off
set "
#1=~@!#
%%$^&*()_+|:"
setlocal enabledelayedexpansion
set "_strlen=set $=^!
#1^!#
&set ##=&(for %%a in (2048 1024 512 256 128 64 32 16)do if ^!$:~%%a^!. NEQ . set/a##+=%%a&set $=^!$:~%%a^!)&set $=^!$^!fedcba9876543210&set/a##+=0x^!$:~16,1^!"
(%_strlen%)
echo 字符串!#1!的长度是%##%
pause
2015年06月10日 15点06分 3
[滑稽]会收录的
2015年06月10日 16点06分
回复
���d1269719868
:[滑稽]其实bathome还有一大堆好算法,干脆都挖过来算了
2015年06月11日 03点06分
@aiwozhonghuaba [滑稽]那你收集起来做一个非原创库不就好了
2015年06月11日 04点06分
回复
���d1269719868
:[滑稽]
2015年06月11日 05点06分
level 11
@goto :txtolend
::txtol bat文本操作库 BY L.W.C. QQ 1269719868
::当前版本 V0.0002
::需要 setlocal EnableDelayedExpansion
:fzstr
::反转字符串 设定变量str=要翻转的字符
set i=0
:afzstr
if "!str:~%i%,1!" neq "" set /a i+=1&set stxt[%i%]=!str:~%i%,1!&goto :afzstr
for /l %%i in (0,1,!i!) do set r=!stxt[%%i]!!r!
for /l %%i in (0,1,!i!) do set stxt[%%i]=
set i=&set str=
set return=!r!
set r=
exit/b
:lostr
::取字符串长度 设定变量str=要去长度的字符
set i=0
:alostr
if "!str:~%i%,1!" neq "" set /a i+=1&goto :alostr
set return=!i!
set i=&set str=
exit/b
:fgstr
::分割字符串 设定变量str=分割的字符 fg=用于分割的字符 save=储存结果的变量 cl=[/i不区分大小写] [NULL]
set r=&set c=1&set i=0
:afgstr
if "!str:~%i%,1!" neq "" set /a i+=1&if %CL% "!str:~%i%,1!" neq "!fg!" (set r=!r!!str:~%i%,1!&goto :afgstr ) else (set !save![!c!]=!r!&set/a c+=1&set r=&goto :afgstr )
set !save![!c!]=!r!
set return=!c!
set i=&set str=&set r=&set c=&set fg=&set save=
exit/b
:fistr
::寻找字符串 设定变量str=被寻找的字符 fg=寻找的字符 sadr=开始寻找的位置 cl=[/i不区分大小写] [NULL]
set "str2=%str%"
set "str=%fg%"
call :lostr
set lofg=!return!&set "str=%str2%"
set str2=
set i=%sadr%
:afistr
if "!str:~%i%,1!" neq "" set /a i+=1&if %CL% "!str:~%i%,%lofg%!" neq "!fg!" (goto :afistr ) else (set return=%i%&exit/b)
set return=-1
exit/b
:txtolend
增加了不区分大小写&寻找字符串==易语言寻找文本 关于aiwozhonghuaba的取文本长度方法下一版本加
2015年06月10日 16点06分 4
level 14
取字符串长度直接用set就可以实现了,如set b=%b:~2,3%
2015年06月11日 09点06分 5
[滑稽]set b=%b:~2,3% 这叫截取文本 取字符串长度是“abc”返回3
2015年06月11日 10点06分
回复
���d1269719868
:[黑线]我好像只看了字面意思,没看代码。。。。
2015年06月11日 11点06分
回复
������321
:[汗]取字符串一段长度才是set b=%b:~2,3%
2015年06月11日 12点06分
回复
���d1269719868
:[汗]别跟我玩文字游戏。。。
2015年06月12日 00点06分
level 11
[滑稽]新功能预告:
成型的bat+编译器
文本加密功能(不支持中文[滑稽]你可以选择用vbs转换为URL编码)
倒找文本
ASCII编码功能
2015年06月11日 11点06分 6
level 13
支持下,不过感觉开发这个有些麻烦……
2015年06月11日 19点06分 7
[咦]有何麻烦
2015年06月12日 09点06分
回复
���d1269719868
:[滑稽]话说申精批准吗?
2015年06月12日 09点06分
level 11
[阴险]附件下载0次什么鬼
2015年06月12日 09点06分 8
我帮你打破了零次
2015年06月13日 23点06分
@- [滑稽]好的
2015年06月14日 03点06分
回复
���d1269719868
:[开心]
2015年06月14日 04点06分
level 11
#include "stdafx.h"
#include <windows.h>
#include <iostream>
using namespace std;
typedef int ( _stdcall *lpN2New)(char*,int);
typedef void ( _stdcall *lpN2Load)(int,char*);
typedef char* ( _stdcall *lpN2Start)(int);
int main(int argc, char *argv[])
{
if(argc!=2){cout<<"参数错误";exit(0);}
int N2ID(0);
HMODULE N2=LoadLibraryA("N2.dll");
if(N2!=0)
{
lpN2New N2_New=(lpN2New)GetProcAddress(N2,"N2_New");
N2ID=N2_New("",0);
}
FILE *hfile=fopen(argv[1],"r");
while(!feof(hfile))
{
char sth[260]={0};
fgets(sth,261,hfile);
char *head=strtok(sth,",");
if(strcmp(head,"MessageBox")==0)
{
char *head=strtok(NULL,",");
char *txt=strtok(NULL,",");
char *title=strtok(NULL,",");
char *type=strtok(NULL,",");
MessageBoxA((HWND)atoi(head),txt,title,atoi(type));
}
if(strcmp(head,"N2")==0)
{
if(N2==0)
{MessageBoxA(0,"N2脚本解释器加载失败","ERROR",16);}
else
{
lpN2Load N2_Load=(lpN2Load)GetProcAddress(N2,"N2_Load");
lpN2Start N2_Start=(lpN2Start)GetProcAddress(N2,"N2_Start");
N2_Load(N2ID,strtok(NULL,"@"));
N2_Start(N2ID);
}
}
}
return 0;
}
@tmxk0411 C++调用N2的方法例子
2015年06月13日 13点06分 9
[阴险]卧槽你肯定用的是VS
2015年06月13日 14点06分
#include "stdafx.h", 我最痛恨这个预处理了………… 原来是Loadlibrary的方法,你不能编译一个静态库么……
2015年06月13日 19点06分
还有就是,为什么你不用c++的string,我觉得这个封装很实用啊。
2015年06月14日 02点06分
2015年06月14日 03点06分
level 8
不错不错
2015年06月14日 04点06分 10
level 10
嗯点个赞
2015年06月14日 04点06分 11
level 11
伟大的度娘啊,遵循古老的盟约,倾听吾之耳语,打破时空的界限。
吾以契约呼唤
以血脉请求
以吾身为器
以吾灵魂为贡献
籍远古精灵之语言,诵念汝之真名:公寓!北京 !洋房 !东五环 !
听吾之命,为吾而战!
出现吧: 卖房兽!
2015年06月14日 05点06分 12
1