[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

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

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

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

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

按需生成字母  99K
2

评分人数

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

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

评分人数

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

TOP

谢谢版主,不辞辛苦。

太忙 ,应该好好学习。

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

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

TOP

回复 3# hlzj88
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in ('type "对比.ini"') do (
  3.     set "str=%%a"
  4.     set "#!str:~,1!=!str:~1,1!"
  5. )
  6. for /f "delims=" %%a in ('type "无字母.txt"') do (
  7.     set char=
  8.     call :loop "%%a"
  9.     echo;!char:~,8!%%a
  10. )
  11. pause&exit
  12. :loop
  13. set "str=%~1"
  14. for /l %%b in (0 1 100) do (
  15.     if "!str:~%%b,1!" neq "*" (
  16.         for /f "delims=" %%c in ("!str:~%%b,1!") do (
  17.             if defined #%%c set "char=!char!!#%%c!"
  18.         )
  19.     ) else (set "char=!char!        "&goto :eof)
  20. )
复制代码

TOP

  1. //&cls&cscript -nologo -e:jscript "%~f0" "对比.ini" "无字母.txt"&pause&exit
  2. var fso=new ActiveXObject('Scripting.FileSystemObject'),m={},s='';
  3. var a=fso.OpenTextFile(WSH.Arguments(0),1).ReadAll().split(/[\r\n]+/);
  4. var b=fso.OpenTextFile(WSH.Arguments(1),1).ReadAll().split(/[\r\n]+/);
  5. for(var i=0;i<a.length;i++)m[a[i].substr(0,1)]=a[i].substr(1,1);
  6. for(var i=0;i<b.length;i++){
  7.     var t='';
  8.     for(var j=0;j<b[i].length;j++){
  9.         //if(b[i].substr(j,1)!='*'){
  10.             if(m[b[i].substr(j,1)])t+=m[b[i].substr(j,1)];
  11.         //}else{s+=(t+='        ').substr(0,8)+b[i]+'\r\n';break}
  12.     }
  13.     s+=(t+='        ').substr(0,8)+b[i]+'\r\n';
  14. }
  15. WSH.Echo(s);
复制代码
1

评分人数

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

TOP

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

TOP

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

TOP

回复 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

返回列表