标题: 【出题】给定一个文本,右对齐原样输出
[打印本页]
作者: plp626
时间: 2008-5-21 19:13
标题: 【出题】给定一个文本,右对齐原样输出
这段时间批处理室没人气,希望大家踊跃参与。
要求:
只允许用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=^
作者: pusofalse
时间: 2008-5-21 19:18
刚看到题目,就想起得找你以前发的关于函数的帖子。。。否则这题没门
作者: plp626
时间: 2008-5-21 19:21
我给的条件还是很宽的,只要是纯P,生成临时文件也可以(只要效率高)
怎么能没门呢,可以借鉴原样输出的帖子加以改进啊
作者: plp626
时间: 2008-5-21 19:27
没人吗?
有个findstr /o参数 打印字符偏移量
大家想想也可以借鉴,方法总是有的,
就看能否高效地实现?
作者: 26933062
时间: 2008-5-21 19:54
我来抛砖,
代码够臃肿的,
@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
作者: bat-zw
时间: 2008-5-21 20:06
标题: 先占个地:
真是高难度的,亏兄弟想得出啊,呵呵。
想了好久,终于把问题解决在10楼。。。
[
Last edited by zw19750516 on 2008-5-21 at 10:08 PM ]
作者: plp626
时间: 2008-5-21 20:13
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分,代码可以再精简,
还有谁再潜水哪?
作者: bat-zw
时间: 2008-5-21 20:52
标题: 有两行有点问题,先发了:
@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 ]
作者: metoo
时间: 2008-5-21 21:35
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 ]
作者: bat-zw
时间: 2008-5-21 22:06
标题: 问题得到最终解决:
@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
作者: bat-zw
时间: 2008-5-22 00:20
标题: 修改到兼容文本空格:
@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