标题: [文本处理] [已解决]批处理如何获取文本每一行开头前8个汉字的拼音首字母并插入到行首位置 [打印本页]
作者: hlzj88 时间: 2016-11-11 23:37 标题: [已解决]批处理如何获取文本每一行开头前8个汉字的拼音首字母并插入到行首位置
本帖最后由 hlzj88 于 2016-11-12 23:08 编辑
求助,文本每行前8位汉字生成拼音字头
因工作需要,有几个文本内容有误需人工更改,用于程序调用。
我已经尝试做了p,也能生成要求格式,对于不足8位汉字的,按要求应用空格补足,但我的p他会出错,以别的字母代替填充。
找不到原因。特向论坛求助,帮忙解决一下。
对比.ini的内容如下- 吖A
- 阿A
- 啊A
- 锕A
- 嗄A
- 哎A
- 哀A
- 唉A
- ……
复制代码
无字母.txt的内容如下- 鼻背缩窄术* HGB81301
- 鼻部液体人工材料取出术* HGA64301
- 鼻部肿物切除术* HGA73301
- 鼻侧壁移位伴骨质充填术* HGB89317
- 鼻唇沟皮瓣转移鼻部分再造术* HGB89306
- 鼻侧径路鼻咽肿瘤切除术* HGJ73303
- ……
复制代码
处理结果如下- BBSZS 鼻背缩窄术* HGB81301
- BBYTRGCL鼻部液体人工材料取出术* HGA64301
- BBZWQCS 鼻部肿物切除术* HGA73301
- BCBYWBGZ鼻侧壁移位伴骨质充填术* HGB89317
- BCGPBZYB鼻唇沟皮瓣转移鼻部分再造术* HGB89306
- BCJLBYZL鼻侧径路鼻咽肿瘤切除术* HGJ73303
复制代码
文件打包如下,谢谢各位。
按需生成字母 99K
作者: pcl_test 时间: 2016-11-12 08:29
本帖最后由 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)+$_}"
- pause
复制代码
- #*第三方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);
- }
- }
复制代码
作者: hlzj88 时间: 2016-11-12 23:07
谢谢版主,不辞辛苦。
太忙 ,应该好好学习。
版主给的代码还不会用,见谅;
我的代码经修改可以现可以完成要求了,就是效率不高。
作者: pcl_test 时间: 2016-11-12 23:53
回复 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)
- )
复制代码
作者: pcl_test 时间: 2016-11-13 00:13
- //&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);
复制代码
作者: hlzj88 时间: 2016-11-13 20:24
谢谢版主帮助。这两段码效率都非常高。。佩服,就是只能看懂一点,已保留用来测试对比理解。
作者: hlzj88 时间: 2016-11-13 22:03
4楼思路非常之妙,五楼代码无能力解读。
作者: Batcher 时间: 2016-11-15 08:58
回复 7# hlzj88
跟BAT关系不大,主要是jscript
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |