中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 18:04
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 【出题】给定一个文本,右对齐原样输出 查看 811 回复 10
楼 主 【出题】给定一个文本,右对齐原样输出 发表于 2008-05-21 19:13 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
这段时间批处理室没人气,希望大家踊跃参与。

要求:
只允许用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学习
2 发表于 2008-05-21 19:18 ·  中国 山东 淄博 联通
银牌会员
★★★
积分 1,604
发帖 646
注册 2008-04-13 23:39
18年会员
UID 115804
性别 男
状态 离线
刚看到题目,就想起得找你以前发的关于函数的帖子。。。否则这题没门
心绪平和,眼藏静谧,无比安稳的火... Purification of soul...Just a false...^_^
3 发表于 2008-05-21 19:21 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
我给的条件还是很宽的,只要是纯P,生成临时文件也可以(只要效率高)
怎么能没门呢,可以借鉴原样输出的帖子加以改进啊
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
4 发表于 2008-05-21 19:27 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
没人吗?

有个findstr /o参数 打印字符偏移量
大家想想也可以借鉴,方法总是有的,
就看能否高效地实现?
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
5 发表于 2008-05-21 19:54 ·  中国 湖南 娄底 电信
银牌会员
★★★
积分 2,268
发帖 879
注册 2006-12-19 16:23
19年会员
UID 73968
性别 男
状态 离线
我来抛砖,
代码够臃肿的,

@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +15 2008-05-21 20:04
致精致简!
6 先占个地: 发表于 2008-05-21 20:06 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线
真是高难度的,亏兄弟想得出啊,呵呵。
想了好久,终于把问题解决在10楼。。。

[ Last edited by zw19750516 on 2008-5-21 at 10:08 PM ]
批处理之家新域名:www.bathome.net
7 发表于 2008-05-21 20:13 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
18年会员
UID 103127
性别 男
状态 离线
Originally posted by 26933062 at 2008-5-21 07:54 PM:
我来抛砖,
代码够臃肿的,

@echo off&setlocal enabledelayedexpansion
set /a dx=0
set "var=^(type a.txt^&echo.^&echo.^)^|findstr /o .*"
for /f "token ...

加15分,代码可以再精简,
还有谁再潜水哪?
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
8 有两行有点问题,先发了: 发表于 2008-05-21 20:52 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@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 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +9 2008-05-21 20:59
批处理之家新域名:www.bathome.net
9 发表于 2008-05-21 21:35 ·  中国 江苏 苏州 电信
初级用户
★★
积分 195
发帖 93
注册 2006-10-28 08:20
19年会员
UID 68626
性别 男
状态 离线
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 ]
10 问题得到最终解决: 发表于 2008-05-21 22:06 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@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
11 修改到兼容文本空格: 发表于 2008-05-22 00:20 ·  中国 湖南 株洲 电信
金牌会员
★★★★
永远的学习者
积分 3,105
发帖 1,276
注册 2008-03-08 13:00
18年会员
UID 112398
性别 男
状态 离线

@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
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +4 2008-07-23 16:48
批处理之家新域名:www.bathome.net
论坛跳转: