返回列表 发帖

[文本处理] [已解决]批处理如何获取文本每一行开头前8个汉字的拼音首字母并插入到行首位置

本帖最后由 hlzj88 于 2016-11-12 23:08 编辑

求助,文本每行前8位汉字生成拼音字头
因工作需要,有几个文本内容有误需人工更改,用于程序调用。

我已经尝试做了p,也能生成要求格式,对于不足8位汉字的,按要求应用空格补足,但我的p他会出错,以别的字母代替填充。

找不到原因。特向论坛求助,帮忙解决一下。
对比.ini的内容如下
吖A
阿A
啊A
锕A
嗄A
哎A
哀A
唉A
……COPY
无字母.txt的内容如下
鼻背缩窄术*                             HGB81301  
鼻部液体人工材料取出术*                 HGA64301  
鼻部肿物切除术*                         HGA73301  
鼻侧壁移位伴骨质充填术*                 HGB89317  
鼻唇沟皮瓣转移鼻部分再造术*             HGB89306  
鼻侧径路鼻咽肿瘤切除术*                 HGJ73303  
……COPY
处理结果如下
BBSZS   鼻背缩窄术*                             HGB81301  
BBYTRGCL鼻部液体人工材料取出术*                 HGA64301  
BBZWQCS 鼻部肿物切除术*                         HGA73301  
BCBYWBGZ鼻侧壁移位伴骨质充填术*                 HGB89317  
BCGPBZYB鼻唇沟皮瓣转移鼻部分再造术*             HGB89306  
BCJLBYZL鼻侧径路鼻咽肿瘤切除术*                 HGJ73303 COPY
文件打包如下,谢谢各位。

按需生成字母  99K
2

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2
    • pcl_test: 未按版规发帖PB -30
目的,学习批处理

回复 7# hlzj88


    跟BAT关系不大,主要是jscript
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

4楼思路非常之妙,五楼代码无能力解读。
目的,学习批处理

TOP

谢谢版主帮助。这两段码效率都非常高。。佩服,就是只能看懂一点,已保留用来测试对比理解。
目的,学习批处理

TOP

//&cls&cscript -nologo -e:jscript "%~f0" "对比.ini" "无字母.txt"&pause&exit
var fso=new ActiveXObject('Scripting.FileSystemObject'),m={},s='';
var a=fso.OpenTextFile(WSH.Arguments(0),1).ReadAll().split(/[\r\n]+/);
var b=fso.OpenTextFile(WSH.Arguments(1),1).ReadAll().split(/[\r\n]+/);
for(var i=0;i<a.length;i++)m[a[i].substr(0,1)]=a[i].substr(1,1);
for(var i=0;i<b.length;i++){
    var t='';
    for(var j=0;j<b[i].length;j++){
        //if(b[i].substr(j,1)!='*'){
            if(m[b[i].substr(j,1)])t+=m[b[i].substr(j,1)];
        //}else{s+=(t+='        ').substr(0,8)+b[i]+'\r\n';break}
    }
    s+=(t+='        ').substr(0,8)+b[i]+'\r\n';
}
WSH.Echo(s);COPY
1

评分人数

    • hlzj88: 效率之高,叹为观止。这码我保留研究。技术 + 1

TOP

回复 3# hlzj88
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('type "对比.ini"') do (
    set "str=%%a"
    set "#!str:~,1!=!str:~1,1!"
)
for /f "delims=" %%a in ('type "无字母.txt"') do (
    set char=
    call :loop "%%a"
    echo;!char:~,8!%%a
)
pause&exit
:loop
set "str=%~1"
for /l %%b in (0 1 100) do (
    if "!str:~%%b,1!" neq "*" (
        for /f "delims=" %%c in ("!str:~%%b,1!") do (
            if defined #%%c set "char=!char!!#%%c!"
        )
    ) else (set "char=!char!        "&goto :eof)
)COPY

TOP

谢谢版主,不辞辛苦。

太忙 ,应该好好学习。

版主给的代码还不会用,见谅;

我的代码经修改可以现可以完成要求了,就是效率不高。
目的,学习批处理

TOP

本帖最后由 pcl_test 于 2016-11-12 09:37 编辑
rem win7及以上系统运行
powershell -c "$a=@{};gc '对比.ini'|%%{$a[$_[0]]=$_[1]};gc '无字母.txt'|%%{$t='';$_[0..($_.length-1)]|%%{if($a[$_]){$t+=$a[$_]}};($t+'        ').Substring(0, 8)+$_}"
pauseCOPY
#*第三方http://www.bathome.net/s/tool/index.html?key=gawk
#*&cls&gawk -f "%~f0"|find /v ""&pause&exit
BEGIN{
    while(getline<"对比.ini">0){split($0,a,"");b[a[1]]=a[2]}
    while(getline<"无字母.txt">0){
        split($0,a,"");s="";
        for(i=1;i<=length(a);i++){if(b[a[i]])s=s""b[a[i]]}
        printf("%-8.8s%s\n",s,$0);
    }
}COPY
1

评分人数

    • hlzj88: 乐于助人 无私版规技术 + 1

TOP

返回列表