处理“汉字编码.txt”的全过程:- sed "y/abcdefghijklmnopqrstuüwxyz/abcdefghijklmnopqrstuvwxyz/" 汉字编码.txt>2.txt
- :: 替换拼音为英文字符
复制代码
- sed -n "H;/^$/{x;s/\n/ /g;p;s/.*//;x}" 2.txt>3.txt
- ::合并拼音与其对应内容为一行
复制代码
- sed "s/[0-9]//g;s/ *[a-z] 返回↑/\n /g;s/ *$//g;s/ / /g" 3.txt>4.txt
- ::去除多余内容
复制代码
- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1*" %%a in (4.txt) do (
- set max=&set min=祚
- for %%c in (%%b) do (
- if %%c lss !min! set min=%%c
- if %%c gtr !max! set max=%%c
- )>con
- if !min! gtr !lax! echo %%a !min!>>6.txt
- set lax=!max!
- set lin=!min!
- echo %%a@!min!@!max!
- ))>5.txt
- pause
- ::分别提取每个拼音的最大最小字符到 5.txt 和 6.txt
复制代码
- sed -n "H;${g;s/\n/ /g;p}" 6.txt>7.txt
- ::合并行
复制代码
- ::生成 8.txt 时以为大功告成,结果发现字符顺序有误(有多音字的原因)导致结果出错,代码未保留。
复制代码
- @echo off&setlocal enabledelayedexpansion
- set lit=吖
- set input=埃 挨 哎 唉 哀 皑 癌 蔼 矮 艾 碍 爱 隘 捱 嗳 嗌 嫒 瑷 暧 砹 锿 霭
- set lpy=ai
- for /f "skip=2 delims=" %%A in (4处理.txt) do (
- set str=
- for /f "tokens=1*" %%B in ("%%A") do set py=%%B&set next=%%C
- for /f %%a in ("!next!") do set big=%%a
- echo !lit!~!big!:!input!
- for %%a in (!input! !G!) do (
- if %%a gtr !lit! (
- if %%a lss !big! (
- set str=!str! %%a
- set G=!G: %%a=!
- ) else echo G %%a&set G=!G: %%a=! %%a
- ) else echo L %%a&set /p=%%a <nul>>Lit.txt
- )
- echo>>9.txt !lpy! !str!
- echo @!str!@
- for /f %%B in ("!input!") do set lit=%%B
- set input=!next!
- set lpy=!py!
- echo;
- pause
- cls
- )
- pause
- ::重新排序,将位置超前的字符安置到相应的拼音下,而位置滞后的字符输出到 Lit.txt 准备进行手工处理,生成 9.txt
复制代码
- ::手工处理,将 Lit.txt 中的字符按其可能的拼音依次尝试,补全 9.txt 中缺失的内容。
复制代码
- @echo off&setlocal enabledelayedexpansion
- set A=吖
- for /f "skip=1 tokens=2" %%a in (9.txt) do (
- if !A! lss %%a (echo !A! lss %%a) else echo !A! gtr %%a!!!!!!!&echo !A! lss %%a>>10.txt
- set A=%%a
- pause
- )
- echo end
- ping /t localhost>nul
- ::修正拼音顺序,生成 10.txt,用于对 9.txt 纠错
复制代码
- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1*" %%a in (9.txt) do (
- set str=%%b
- for /f %%c in ("%%b") do set last=%%c
- for %%c in (%%a) do (
- for %%d in (!str!) do (
- if %%d lss !last! (
- for %%e in (!last!) do (
- set str=!str:%%e %%d=%%d %%e!
- set last=%%e
- )
- ) else set last=%%d
- )
- )
- echo %%a !str!
- ))>11.txt
- pause
- ::修正行内汉字顺序为从小到大
复制代码
- @echo off
- (for /f "tokens=1,2" %%a in (11.txt) do set /p=%%b %%a )<nul>12.txt
- ::再手工加上 11.txt 中的最后一个汉字作为拼音 zuo 的上限。历经 11 关磨难,终于搞定,泪奔...
复制代码
|