中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [共同参与][挑战思路][批处理:轻松译单词]
« [1] [2] [3] [4] »
作者:
标题: [共同参与][挑战思路][批处理:轻松译单词] 上一主题 | 下一主题
pengfei
银牌会员




积分 1218
发帖 485
注册 2006-7-21
来自 湖南.娄底
状态 离线
『第 31 楼』:  

不知哪位兄台能搞到文本格式的英汉字典, 这样做起来更爽...

2006-10-13 02:44
查看资料  发送邮件  发短消息 网志  OICQ (573381312)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 32 楼』:  

  字典的格式需要自己来定义,不用找现成的字典,否则,很难用CMD来处理。

  如果只要字典的内容的话,可以用无奈何兄所发的金山词霸字典提取工具来提取内容,不过提取出来的内容比较凌乱。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-13 06:34
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 33 楼』:  2006-10-14更新

  贴一个中英文互译的初步代码出来,能初步检测一些出错的情况。

  由于加入了显示具有相同头部或具有相同词义的所有单词的功能,不能再用 for /l %%i in (1,1,10000) do (>>词库.txt echo var) 的方法创建上万行的词库文件来测试,所以只做了功能测试而没做效率测试,如果哪位兄弟可以搞到能满足这个代码格式要求的词库文件,请告诉我方法或者放出文件,不胜感激。

  再次强调,成败的关键在于词库文件的格式。
@echo off
:: 功能:
::
::   ① 输入英文,显示该英文条目下的所有内容;
:: 同时显示词库中存在的、词义相同或头部相同的其他单词;
::     ② 输入汉语,显示词义中包含该汉语词汇的所有英文
::
:: 词库文件的格式要求:
::
::   文件第一行内容必须为空,或者不能出现要查找内容的正文
::   一个段落块的首行必须为纯英文词汇
::   中文翻译内容紧接着另起一行(不允许出现纯字母行),可以有多行
::   翻译之下可以有举例内容
::   每个解释后面加中文半角状态下的分号和空格
::     解释内容可以在同一行,也可以在不同行
::   解释之下的举例内容尽量避免出现中文半角状态下的分号和空格连用的情况
::   每个段落块允许使用空行分隔
::
::             code by JM 2006-10-11~14    http://www.cn-dos.net  Thanks to 3742668

:input_var
title 英汉互译器
cls
set line=
set postil=
set postil_content=
set similar=
set input=
set /p input=请输入要查询的内容(要退出请直接回车):
if "%input%"=="" exit

ren ============== 判断输入类型 ==============
cls
echo %input%|findstr "^[a-zA-Z]*$">nul && goto letters || goto not-letters

ren ============== 英译汉 ==============
:letters
title 英汉互译器-英译汉
:: 先提取匹配单词的第一条记录的行数,然后再从这行之下查找第一次出现的单词
:: 两个单词之间的内容就是英文的翻译
for /f "tokens=1* delims=:" %%i in ('findstr /nirc:"^%input%" 词库.txt') do (
    if /i "%%j"=="%input%" set line=%%i&goto word_finded
)
if "%line%"=="" goto no-item
:word_finded
echo _________________________________
echo 要查找的单词:%input%
echo.
setlocal enabledelayedexpansion
for /f "skip=%line% delims=" %%i in (词库.txt) do (
    echo %%i|findstr "^[a-zA-Z]*$">nul &&(goto no-postil)||(
        echo     %%i&if not "%%i"=="" set postil=exist
        echo %%i|findstr /c:"; ">nul &&(
            set postil_content=!postil_content!%%i
        )            
    )
)
:no-postil
if "%postil%"=="" (echo     %input% 条目下没有任何内容 & goto end)
echo _________________________________
echo 词义类似的单词:
echo.
for /f "tokens=1* delims=:" %%i in ('findstr /nr "%postil_content%" 词库.txt') do (
    if not "%%j"=="" set /a line=%%i-2&& call :check_similar
)
if "%similar%"=="" echo     暂无。
echo _________________________________
echo 头部相同的其他词汇:
echo.
set similar=
for /f "tokens=1* delims=:" %%i in ('findstr /nirc:"^%input%" 词库.txt') do (
    echo %%j|findstr "^[a-zA-Z]*">nul && (
        if not "%%j"=="%input%" set similar=exist&echo     %%j
    )
)
if "%similar%"=="" echo     暂无。
:end
echo _________________________________
echo.
pause
goto input_var

:check_similar
:: 查找词义中含有%postil_content%的所有英文词汇
for /f "skip=%line% delims=" %%i in (词库.txt) do (
    echo %%i|findstr "^[a-zA-Z]*$">nul &&(
        if not "%%i"=="%input%" (
            echo     %%i&set similar=exist&goto :eof
            ) else (goto :eof)
    )||(set /a line=%line%-1& goto check_similar)
)
goto :eof

ren ============== 汉译英 ==============
:not-letters
title 英汉互译器-汉译英
:: 先提取包含该汉语词汇的第一条记录的行数,然后再查找位于该行之上的纯字母行
:: 则第一次找到的纯字母行就是要查找的英文单词
:: 重复以上过程就可以查找到词义中包含这个汉语词汇的所有英文词汇
echo _________________________________
echo.
echo %input%:
echo.
for /f "tokens=1* delims=:" %%i in ('findstr /nrc:"%input%; " 词库.txt') do (
    if not "%%j"=="" set /a line=%%i-2&& call :check_word
)
if "%postil%"=="" goto no-item
echo _________________________________
echo.
pause
goto input_var

:check_word
:: 查找词义中含有%input%的所有英文词汇
set postil=exist
for /f "skip=%line% delims=" %%i in (词库.txt) do (
    echo %%i|findstr "^[a-zA-Z]*$">nul &&(echo     %%i&&goto :eof)||(
        set /a line=%line%-1&& goto check_word
    )
)
goto :eof

ren ============== 出错提示 ==============
:no-item
cls
echo _________________________________
echo.
echo %input%:
echo   没有找到该条目!
echo _________________________________
echo.
pause
goto input_var
[ Last edited by namejm on 2006-10-15 at 00:40 ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-13 12:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 34 楼』:  

  今天突然想到,用33F的思路可以写一个公交线路信息查询器之类很实用的东西,预计可以实现如下两个功能:
  

  Quote:
① 输入线路名称,显示该线路的所有站点及发车收车时间;
② 输入上车站点和下车站点,显示可搭乘的车次,并显示每条线路中这两个站点及其之间的所有站点及发车收车时间;

  有兴趣的不妨尝试着去做一做。

——————————————————————————————————————

  公交线路信息查询器的代码已经放出来了,请点 这里 查看。

[ Last edited by namejm on 2006-11-15 at 01:37 PM ]

   此帖被 +1 点积分     点击查看详情   
评分人:【 redtek 分数: +1  时间:2006-10-18 07:09




尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-10-17 12:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 35 楼』:  



  Quote:
② 输入上车站点和下车站点,显示可搭乘的车次,并显示每条线路中这两个站点及其之间的所有站点及发车收车时间;

这个复杂了,要判断这些车次的交汇点估计不是易事,而且有可能有3次以上车次

2006-10-17 13:43
查看资料  发短消息 网志   编辑帖子  回复  引用回复
vkill
金牌会员





积分 4103
发帖 1744
注册 2006-1-20
来自 甘肃.临泽
状态 离线
『第 36 楼』:  

不管做什么."数据库"txt的格式很重要

2006-10-18 05:49
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 37 楼』:  



  Quote:
Originally posted by namejm at 2006-10-17 12:11:
  今天突然想到,用33F的思路可以写一个公交线路信息查询器之类很实用的东西,预计可以实现如下两个功能:
  

  有兴趣的不妨尝试着去 ...

namejm这想法有意思,可要记在本上留好~:)
到处都是公交查询系统,还有学生毕业设计,但是DOS批处理版的估计除了少数DOS高手之外没有什么人可以想像的到DOS照样可以做这些,并且很快:)

给版主加上1分~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-18 07:14
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
redtek
金牌会员





积分 2902
发帖 1147
注册 2006-9-21
状态 离线
『第 38 楼』:  



  Quote:
Originally posted by zxcv at 2006-10-17 13:43:


这个复杂了,要判断这些车次的交汇点估计不是易事,而且有可能有3次以上车次

这些好的思想和创造它的工具可以影响很多人对某一件事情的想法和了解的深度~:)

再难的东东还可以留给 “批处理大赛活动” 中使用~:)

这真是开始接触从底层考虑和分析一些东东了,哈哈……
有多少程序员每天用着SQL查询着n多的东东,并且命令玩得很炫!
但是,又有多少程序员知道他们正在用的SQL或其它查询的底层里到底做的什么……

这些可能对99%的都不重要,应用就是生产的过程:)
相信还有创造的过程也是非常精彩,它将留给更喜欢它的人去做得更精彩~:)

zxcv有什么好想法和算法快说出来啊~:)



    Redtek,一个永远在网上流浪的人……

_.,-*~'`^`'~*-,.__.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._,_.,-*~'`^`'~*-,._
2006-10-18 07:20
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
goodfile
初级用户




积分 112
发帖 6
注册 2005-6-29
状态 离线
『第 39 楼』:  

多谢~~~~~

2006-10-23 01:02
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 40 楼』:  

20F namejm 版主的脚本查找 10W 行未发现问题,结果转瞬间就出来了。

[ Last edited by zxcv on 2006-10-29 at 02:02 AM ]

2006-10-28 12:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zouzhxi
中级用户

蝴蝶之吻


积分 430
发帖 177
注册 2006-9-20
来自 广东深圳
状态 离线
『第 41 楼』:  

只要把namejm版主的BAT稍稍改了一下,就成了DOS版的通讯录了...
下面我把截图给大家看看...

  Quote:
第一张

第二张是 增加和删除窗口

第三张是 查询窗口

第四张是 所以需文件

这样是主文件和一个库文件。
Tel.db文件一开始是没有的。只有用户增加了联系人才会出现。

暂时还不能实现修改功能,只能手工去库里边修改。



Butterfly Kiss Blog
计算机DIY联盟论坛
2006-11-15 07:43
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (234693993)  编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 42 楼』:  



  Quote:
Originally posted by zouzhxi at 2006-11-14 18:43:
只要把namejm版主的BAT稍稍改了一下,就成了DOS版的通讯录了...
下面我把截图给大家看看...

暂时还不能实现修改功能,只能手工去库里边修改。

  请问你想修改成什么样子?是用某些字符去替换另外一些字符,还是增添内容,或者删除记录?我所问到的这些功能,有些是可以在批处理里解决的。

[ Last edited by namejm on 2006-11-14 at 07:23 PM ]



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-15 08:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 43 楼』:  

他的意思是修改或删除某人的资料,添加倒是很方便,echo>>就OK了

2006-11-15 09:29
查看资料  发短消息 网志   编辑帖子  回复  引用回复
namejm
荣誉版主

batch fan


积分 5226
发帖 1737
注册 2006-3-10
来自 成都
状态 离线
『第 44 楼』:  

  删除某项记录也挺方便的,只不过是要生成临时文件,思路是:用 findstr /v 来过滤你要删除的内容,然后把要保留的内容 echo 到临时文件中去,再用这个临时文件覆盖掉当前数据库。难点有两处:1:如何精确地过滤掉想删除的记录。可通过 findstr 的正则表达式来解决;2、如何获取要过滤的信息块。可配合 for 语句中的 skip 来解决。



尺有所短,寸有所长,学好CMD没商量。
考虑问题复杂化,解决问题简洁化。
2006-11-15 09:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 45 楼』:  

删除某项电话本记录:

bat
@echo off
echo.
set /p 删除人员=  删除人员:
>TelN.db echo ::电话本数据库
>>TelN.db echo --------------------------------------------------
>>TelN.db echo.
setlocal EnableDelayedExpansion
for /f "delims=" %%i in (Tel.db) do (
  if "%%i" == "::" set /a Num+=1
)

set Delete=echo
for /f "skip=3 delims=" %%i in (Tel.db) do (
  if "%%i" == "%删除人员%" set Delete=rem&&set /a N-=1
    !Delete! %%i>>TelN.db
  if "%%i" == "::" !Delete!.>>TelN.db&&set /a N+=1&&cls&&echo.&&echo   !N!/%Num%&&set Delete=echo
)
pause
exit
Tel.db
::电话本数据库
--------------------------------------------------

张三
联系人姓名:张三
联系人电话:张三
联系人地址:张三
联系人单位:张三
::

李四
联系人姓名:李四
联系人电话:李四
联系人地址:李四
联系人单位:李四
::

王五
联系人姓名:王五
联系人电话:王五
联系人地址:王五
联系人单位:王五
::
[ Last edited by zxcv on 2006-11-15 at 09:24 AM ]

2006-11-15 13:12
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: