返回列表 发帖

【练习-008】批处理实现文本内容横列变纵列

因为论坛会吞掉文本每行的第一个空格,现截图上来。

每行的字符数都一样,但未知多少个字符。
注意,文本第三行r之后有一个空格。第四行x之后有一个空格。
输出为:

即横列变纵列,并保留原来空格。
要求,高效,不生成临时文件。
心绪平和,眼藏静谧。

@echo off
setlocal enabledelayedexpansion
set /a num=-1
:main
set "ot="
set /a num+=1
for /f "delims=" %%a in (a.txt) do call :ie "%%a"
echo.%ot%
goto :main
:ie
set "var=%~1"
if "!var:~%num%,1!"=="" (pause&exit)
call,set "ot=!ot!%%var:~%num%,1%%"
goto :eofCOPY
1

评分人数

不大可能的事也许今天实现,根本不可能的事也许明天会实现

TOP

我试了一下,这题能在5句之内解决。
心绪平和,眼藏静谧。

TOP

@echo off&setlocal enabledelayedexpansion
for /l %%a in (0,1,10) do (
    for /f "delims=" %%i in (a.txt) do (
        set ke=%%i
        set /p=!ke:~%%a,1!<nul
    )
    echo.
)
pause
1

评分人数

TOP

4楼的代码够简洁,但仍不通用。
每行的字符数是未知的。
心绪平和,眼藏静谧。

TOP

先贴一种方案吧:
@echo off&setlocal enabledelayedexpansion
set "n=0"&set "m=0"
:lp
for /f "delims=" %%+ in (1.txt) do (
    set /a x+=1&set "str=%%+"
    if "!str:~%n%,1!" equ "" (
       set /a m+=1
       if !m! equ !x! pause>nul&goto :eof
       ) else (
       set /p=!str:~%n%,1!<nul
    )
)
echo.&set /a n+=1,x=0&goto lpCOPY
***共同提高***

TOP

再来段貌似高深的代码:
@echo off
for /f "delims=" %%. in (1.txt) do set "_=0"&set "..=%%."&call :{}
for /l %%+ in (1,1,%_%) do call,echo.%%..%%+%%
pause>nul&goto :eof
:{}
set "#=%..:~,1%"&call,set "..=%%..:~1%%"&set /a _+=1&call,set "..%_%=%%..%_%%%%#%"&if defined .. goto {}COPY


说明下:
       之所以写下这么一段怪异的代码,就是想告诉大家,只要你运用得得当,批处理真的是可以随心所欲地写,这也就
是其中乐趣所在了。。。

[ 本帖最后由 batman 于 2008-8-3 00:50 编辑 ]
3

评分人数

    • keen: 太高深了,看不懂,不过好像少了一行!PB + 6
    • tireless: 看你这代码真累,真的~_~PB + 1
    • ieutk: 看你这代码真累,真的~_~PB + 6
***共同提高***

TOP

这道题并不难啊,大家都来锻炼下思维,踊跃答题啊!
***共同提高***

TOP

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do set str=%%i&set/a n+=1,m=0&call:lp
   for /l %%i in (0 1 %m%) do if not "!%%ip!"=="" echo !%%ip!
pause&goto :eof
:lp
   set "%m%p=!%m%p!!str:~%m%,1!"
   if not "!str:~%m%,1!"=="" set/a m+=1&goto lpCOPY

TOP

行的字符不同处理
@echo off&setlocal enabledelayedexpansion
set t=0
for /f "delims=" %%i in (a.txt) do set str=%%i&set/a n+=1,m=1&call:lp
   for /l %%i in (1 1 %t%) do (
      for /l %%j in (1 1 %n%) do if "!%%jp%%i!"=="" (set/p= <nul)else set/p=!%%jp%%i!<nul
      echo.
)
pause&goto :eof
:lp
   set "%n%p%m%=%str:~,1%"
   set "str=%str:~1%"
   if defined str set/a m+=1&goto lp
   if %m% gtr %t% set/a t=mCOPY

TOP

第一题

发错了!还是先向别人学习

[ 本帖最后由 sjzong 于 2009-4-24 18:38 编辑 ]

TOP

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
    set v=%%i
    set n=0
    call :lp
)
for /l %%i in (1 1 %n%) do (
    set num=%%i
    call,echo %%_!num!%%
)
pause&exit/b
:lp
    set /a n+=1
    set _%n%=!_%n%!%v:~0,1%
    set v=%v:~1%
    if not "%v%"=="" goto lp
goto :eofCOPY
1

评分人数

    • batman: 自己提高的同时更应去乐心助人PB + 5
(*^_^*)

TOP

回复batman

不是说我不想帮助别人,只是不知道怎么样去帮助别人。

我觉得自己的技术还不够成熟,怕给别人说错了,误导别人,这个责任我担不起。
(*^_^*)

TOP

@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (set v=%%i&call :lp)
for /l %%i in (0 1 %n%) do (echo.!#%%i!)
pause&goto :eof
:lp
for /l %%a in (0,1,100) do (if "!v:~%%a,1!"=="" (set n=%%a&goto :eof) else (set #%%a=!#%%a!!v:~%%a,1!))COPY

TOP

新人,来学习学习,支持楼主了,说实话看了就头大,吼吼

TOP

返回列表