中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【出题】给定一个文本,右对齐原样输出
作者:
标题: 【出题】给定一个文本,右对齐原样输出 上一主题 | 下一主题
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『楼 主』:  【出题】给定一个文本,右对齐原样输出

这段时间批处理室没人气,希望大家踊跃参与。

要求:
只允许用bat,
可以处理特殊字符,
效率尽量高,



文本如下:
"aou"eo

;euou%^>plp626是我
::::ae右对齐原样输出ui
   
:::E2uo alejou 3<o2io|
^aue||%ou

!aue!
aoue eou 2
!str!auoeu!ueo &&
euo 8
ueyi^^^^aueuo2
~ ! @ # $ % ^ & * ( () " ok " No " <>nul
set ok=^




山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-21 19:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
pusofalse
银牌会员




积分 1604
发帖 646
注册 2008-4-13
状态 离线
『第 2 楼』:  

刚看到题目,就想起得找你以前发的关于函数的帖子。。。否则这题没门



心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
2008-5-21 19:18
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 3 楼』:  

我给的条件还是很宽的,只要是纯P,生成临时文件也可以(只要效率高)
怎么能没门呢,可以借鉴原样输出的帖子加以改进啊



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-21 19:21
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 4 楼』:  

没人吗?

有个findstr /o参数 打印字符偏移量
大家想想也可以借鉴,方法总是有的,
就看能否高效地实现?



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-21 19:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
26933062
银牌会员





积分 2268
发帖 879
注册 2006-12-19
状态 离线
『第 5 楼』:  

我来抛砖,
代码够臃肿的,
@echo off&setlocal enabledelayedexpansion
set /a dx=0
set "var=^(type a.txt^&echo.^&echo.^)^|findstr /o .*"
for /f "tokens=1* delims=:" %%a in ('%var%') do (
   if defined n (
      set /a m=%%a-2-n
      set _!h!=!m!
      if !m! geq !dx! set dx=!m!
   )
   set /a n=%%a,h+=1
)
set /a h-=1,m-=1
set _!h!=!m!
if !m! geq !dx! set "dx=!m!"
for /l %%a in (1 1 %h%) do set num=!num! %%a-!_%%a!
endlocal&set num=%num%&set dx=%dx%&set h=%h%
for %%a in (%num%) do (
   for /f "tokens=1,2 delims=-" %%i in ("%%a") do set _%%i=%%j
)
for /f "delims=" %%a in ('findstr /n .* a.txt') do (
   set "var=%%a"
   set /a n+=1
   setlocal enabledelayedexpansion
   set var=!var:*:=!
   set /a bu=dx-_!n!
   set "ko="
   for /l %%i in (1 1 !bu!) do set "ko= !ko!"
   echo.!ko!!var!
   endlocal
)
pause


   此帖被 +15 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2008-5-21 20:04




致精致简!
2008-5-21 19:54
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 6 楼』:  先占个地:

真是高难度的,亏兄弟想得出啊,呵呵。
想了好久,终于把问题解决在10楼。。。

[ Last edited by zw19750516 on 2008-5-21 at 10:08 PM ]



批处理之家新域名:www.bathome.net
2008-5-21 20:06
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by 26933062 at 2008-5-21 07:54 PM:
我来抛砖,
代码够臃肿的,
[code]
@echo off&setlocal enabledelayedexpansion
set /a dx=0
set "var=^(type a.txt^&echo.^&echo.^)^|findstr /o .*"
for /f "token ...

加15分,代码可以再精简,
还有谁再潜水哪?



山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-5-21 20:13
查看资料  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 8 楼』:  有两行有点问题,先发了:


@echo off
for /f "tokens=*" %%i in ('findstr /n .* a.txt') do (
    set str=%%i
    setlocal enabledelayedexpansion
    set str=!str:*:=!
    call :lp
    echo.!str!
    endlocal
)
pause>nul&goto :eof
:lp
set str= !str!
if "!str:~50!"=="" goto lp
[ Last edited by zw19750516 on 2008-5-21 at 09:38 PM ]

   此帖被 +9 点积分       点击查看详情   
评分人:【 plp626 分数: +9  时间:2008-5-21 20:59




批处理之家新域名:www.bathome.net
2008-5-21 20:52
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by zw19750516 at 2008-5-21 08:52 PM:
@echo off
for /f "tokens=*" %%i in ('findstr /n .* a.txt') do (
    set str=%%i@
    setlocal enabledelayedexpansion
    set str=!str:*:=!
    call :lp
    echo.!str!
    e ...

和我的代码思想基本差不多。。。不过汉字占两个位置,有汉字的行会出现对不起的状况。。。想尝试用findstr正则来抽出行内的汉字字数。。但是貌似不怎么会用(觉得正则不强大- -! 明显差于perl)

附偶的代码- -
@echo off&setlocal enabledelayedexpansion
set "ttt=                                                              "
FOR /f "eol= tokens=1* delims=" %%a IN (a.txt) DO (
        set "t=%ttt%%%a"
        if "%%a"=="" ( echo\ ) else echo !t:~-60!
)
pause
我晕。。陷阱真多。。还有带空格的空行。。懒得修改代码了。。睡觉

[ Last edited by metoo on 2008-5-21 at 09:38 PM ]

2008-5-21 21:35
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 10 楼』:  问题得到最终解决:


@echo off
for /f "tokens=*" %%i in ('findstr /n .* a.txt') do (
    set str=%%i
    setlocal enabledelayedexpansion
    set str=!str:*:=!
    set var=!str!&set n=0&call :lp
    echo.!str!
    endlocal
)
pause>nul&goto :eof
:lp
set a=!var:~,1!
if !a! gtr z set /a n+=1
if defined var set var=!var:~1!&goto lp
set /a m=50-%n%
:loop
set str= !str!
if "!str:~%m%!"=="" goto loop




批处理之家新域名:www.bathome.net
2008-5-21 22:06
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复
bat-zw
金牌会员

永远的学习者


积分 3105
发帖 1276
注册 2008-3-8
状态 离线
『第 11 楼』:  修改到兼容文本空格:


@echo off
for /f "tokens=*" %%i in ('findstr /n .* a.txt') do (
    set str=%%i
    setlocal enabledelayedexpansion
    set str=!str:*:=!
    set var=!str!&set n=0&call :lp
    echo.!str!
    endlocal
)
pause>nul&goto :eof
:lp
set a=!var:~,1!
if !a! gtr z set /a n+=1
if "!a!"==" " set /a n+=1
if defined var set var=!var:~1!&goto lp
set /a m=50-%n%
:loop
set str= !str!
if "!str:~%m%!"=="" goto loop


   此帖被 +4 点积分        点击查看详情   
评分人:【 523066680 分数: +4  时间:2008-7-23 16:48




批处理之家新域名:www.bathome.net
2008-5-22 00:20
查看资料  发送邮件  发短消息 网志  OICQ (841615149)  编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: