标题: 【练习-011】批处理按要求将字符串分段输出 [打印本页]
作者: batman 时间: 2008-8-9 22:51 标题: 【练习-011】批处理按要求将字符串分段输出
一、要求用批处理随机输出200个字符到1.txt中的一行,内容类同如下:- xh45q3ma+remgofm54sevhrna4g5r8pl9cjardezqjwj3m8itamh0a4itzd6jz8cmrfmibmhr0wmccyb8qnp2qh4rvlwff6yr2ez4eo063u6viy7ppw+nzxaxe8vrm190eei_0dwx5e2kxbds-ae6e96c9_i9glw8mz+uf6uienx9od8bktfnjlwlqu-e1rcj33_+4bz
复制代码
二、要求用批处理将1.txt中的内容按10个字符为一段输出如下面两种形式:
在一行内输出:- xh45q3ma+r emgofm54se vhrna4g5r8 pl9cjardez qjwj3m8ita mh0a4itzd6 jz8cmrfmib mhr
- 0wmccyb 8qnp2qh4rv lwff6yr2ez 4eo063u6vi y7ppw+nzxa xe8vrm190e ei_0dwx5e2 kxbds-
- ae6e 96c9_i9glw 8mz+uf6uie nx9od8bktf njlwlqu-e1 rcj33_+4bz
复制代码
分行输出:- xh45q3ma+r
- emgofm54se
- vhrna4g5r8
- pl9cjardez
- qjwj3m8ita
- mh0a4itzd6
- jz8cmrfmib
- mhr0wmccyb
- 8qnp2qh4rv
- lwff6yr2ez
- 4eo063u6vi
- y7ppw+nzxa
- xe8vrm190e
- ei_0dwx5e2
- kxbds-ae6e
- 96c9_i9glw
- 8mz+uf6uie
- nx9od8bktf
- njlwlqu-e1
- rcj33_+4bz
复制代码
----------------------------------------------------------------------------------------------------------------------------------------------------
要求:代码高效、通用、简洁、不产生临时文件
ps:请老手们将本题留给新手完成
[ 本帖最后由 batman 于 2008-8-9 22:54 编辑 ]
作者: youxi01 时间: 2008-8-10 00:35
还有个细节问题:
产生的随机字符在什么范围内(主要包括哪些字符)?
作者: more 时间: 2008-8-10 11:25
来赚一点儿积分,哈哈
@echo off
Setlocal Enabledelayedexpansion
set "str=abcdefghijklmnopqrstuvwxyz1234567890+-_"
for /l %%a in (1 1 200) do (
set /a "m=!random!%%39"
call set "var1=%%var1%%%%str:~!m!,1%%"
)
set "var=%var1%"
for /l %%a in (1 1 20) do (
set "var2=!var:~,10!"
set /p =!var2! <NUL
set "var=!var:~10!"
)
echo.&echo.&set "var=%var1%"
for /l %%a in (1 1 20) do (
set "var2=!var:~,10!"
echo.!var2!
set "var=!var:~10!"
)
pause>nul
[ 本帖最后由 more 于 2008-8-10 11:27 编辑 ]
作者: batman 时间: 2008-8-10 11:29
原帖由 youxi01 于 2008-8-10 00:35 发表
还有个细节问题:
产生的随机字符在什么范围内(主要包括哪些字符)?
只要是字符就可以,当然可以不考虑特殊字符问题了。
作者: shqf 时间: 2008-8-10 12:52
- @echo off
- set /p str=<1.txt
- set /p select=1.一行内分节显示 2.分行显示(请选择1-2):
- if %select% equ 2 goto fh
-
- :fj
- set /p=%str:~,10% <nul
- if not "%str:~10%"=="" (set str=%str:~10%&goto fj)
- pause>nul&goto end
-
- :fh
- echo %str:~,10%
- if not "%str:~10%"=="" (set str=%str:~10%&goto fh)
- pause>nul
复制代码
作者: batman 时间: 2008-8-10 13:51
pause>nul&goto end
这句会出错的,应该改成pause>nul&goto :eof或pause>nul&exit
作者: shqf 时间: 2008-8-10 14:48
哦,你的写法规范。不过我这样也不出错呀:goto后面的标签没有定义的话,转至文件尾。
作者: pusofalse 时间: 2008-8-10 15:03 标题: 回复 7楼 的帖子
不是转至文件尾部吧,而是找不到标签而出错,会自动退出,虽然都是退出。
作者: batman 时间: 2008-8-11 22:58
原帖由 shqf 于 2008-8-10 12:52 发表
@echo off
set /p str=nul
我认为此贴不能加分,原因如下:
一、书写不规范,不能加分。
二、第一问被略过,不能加分。
三、有错不改,不能加分。
作者: batman 时间: 2008-8-11 22:59
在本人未给出答案前,各位新人都可来一试下身手,本人将视情况一一评述和加分。
作者: null 时间: 2008-8-11 23:28
为什么我在看到类似问题的时候会感觉无从下手呢?
作者: pusofalse 时间: 2008-8-11 23:35 标题: 回复 11楼 的帖子
勇于迈出第一步,解答出此题,你会觉得自己的批处理水平已经上升了一个台阶。
然后,你会越来越喜爱批处理。
set var=123456789
set s=!var:~%n%,1!
这里少了一句给n赋值的语句,%n%为一个小于9的随机数,为何是小于9,因为大于或等于9之后,%var:~9,1%是个空值了。
然后呢,请自己完成。^_^
作者: terse 时间: 2008-8-12 00:57
我也要分
那里错了 原码都改没了- @echo off&Setlocal Enabledelayedexpansion
- set "str=abcdefghijklmnopqrstuvwxyz1234567890+-_"
- for /l %%i in (1 1 200) do set /a "m=!random!%%39" & call set /p=%%str:~!m!,1%%<nul>>1.txt
- set/p str=<1.txt
- for /l %%i in (1 1 20) do call set /p=%%str:~!n!,10%% <nul&call set "%%i=%%str:~!n!,10%%"&set/a n+=10
- echo.
- for /l %%i in (1 1 20) do echo.!%%i!
- pause>nul
复制代码
第一次上的码没了 不知道错在那里- @echo off&Setlocal Enabledelayedexpansion
- set "var=abcdefghijklmnopqrstuvwxyz1234567890+-_"
- for /l %%i in (1 1 200) do set /a "m=!random!%%39"&call set str=!str!%%var:~!m!,1%%
- >1.txt echo %str%
- for /l %%i in (1 1 20) do set /p=!str:~,10! <nul&set "%%i=!str:~,10!"&set "str=!str:~10!"
- echo.
- for /l %%i in (1 1 20) do echo.!%%i!
- pause>nul
复制代码
[ 本帖最后由 terse 于 2008-8-12 14:49 编辑 ]
作者: batman 时间: 2008-8-12 09:48
原帖由 terse 于 2008-8-12 00:57 发表
我也要分
@echo off&Setlocal Enabledelayedexpansion
set "var=abcdefghijklmnopqrstuvwxyz1234567890+-_"
for /l %%i in (1 1 2000) do set /a "m=!random!%%39"&call set str=!str!%%var:~!m!,1%%
...
代码有多处错误,请修改后再拿分。
作者: terse 时间: 2008-8-12 09:59
原帖由 batman 于 2008-8-12 09:48 发表
代码有多处错误,请修改后再拿分。
多处错误?望兄指正。
作者: pusofalse 时间: 2008-8-12 10:03
- @echo off&setlocal enabledelayedexpansion
- set var=abcdefghijklmnopqrstuvwxyz0123456789+-_
- for /l %%a in (1 1 200) do (
- set/a n=!random!%%39
- call,set a=!a!%%var:~!n!,1%%
- )
- echo %a%&pause>nul&echo.
- :lp
- for /l %%i in (0 10 190) do if not defined b (set/p=!a:~%%i,10! <nul) else echo !a:~%%i,10!
- if not defined b set b=b&pause>nul&echo.&echo.&goto lp
- pause
复制代码
[ 本帖最后由 pusofalse 于 2008-8-12 10:07 编辑 ]
作者: batman 时间: 2008-8-12 11:05
原帖由 terse 于 2008-8-12 09:59 发表
多处错误?望兄指正。
这是你第一次的代码:
作者: batman 时间: 2008-8-12 12:31
下面给出本人的解吧:- @echo off
- rem 随机生成200个字符
- set "var=abcdefghijklnmopqrstuvwxyz0123456789+_/-"
- :begin
- set /a a=%random%%%40,n+=1
- call,set "str=%str%%%var:~%a%,1%%"
- if %n% neq 200 goto begin
- rem 在一行内分段输出
- :lp
- set /a m+=1
- set /p=%str:~,10% <nul&set "_%m%=%str:~,10%"
- set "str=%str:~10%"
- if defined str goto lp
- rem 分行输出分段后字符
- echo.&echo.&for /l %%i in (1,1,%m%) do call,echo %%_%%i%%
- pause>nul
复制代码
[ 本帖最后由 batman 于 2008-8-12 12:40 编辑 ]
作者: terse 时间: 2008-8-12 14:44
原帖由 batman 于 2008-8-12 11:05 发表
这是你第一次的代码:
208
谢谢 第一次的代码在我的短消息里找到
不过 我这里运行没出现问题
我想知道兄指的多处错误是否就是生成数和行呢?如是的话 那是我测试没改过来的
作者: keen 时间: 2009-5-1 23:56
- @echo off
- set "str=0123456789abcdefghijklmnopqrstuvwxyz-+/_"
- :start
- set /a n=%random%%%40,m+=1
- call,set num=%%str:~%n%,1%%&set var=%num%%var%
- if %m%==201 (echo %var%>>1.txt&goto next) else (goto start)
- :next
- echo 分行输出:&set /p a=<1.txt&set b=0
- :lp
- call,set c=%%a:~%b%,10%%
- if "%c%"=="" goto end
- call,set d=%%d%%%c% &echo %c%&set /a b+=10
- goto :lp
- :end
- echo.&echo.&echo.&echo 一行输出:&echo %d%&pause
复制代码
[ 本帖最后由 keen 于 2009-5-3 17:53 编辑 ]
作者: inittab 时间: 2009-5-3 09:52
- @echo off&setlocal enabledelayedexpansion
- set "str=1234567890abcdefghijklmnopqrstuvwxyz@#$_+-"
- for /l %%i in (0,1,199) do (
- set/a ran=!random!%%42&call set "st=!st!%%str:~!ran!,1%%"
- )
- echo 整行输出: !st!&echo.&echo 分列输出:
- for /l %%j in (0,10,190) do (
- set /a m=%%j
- call set "st1=!st1!%%st:~!m!,10%% "
- call echo %%st:~!m!,10%%
- )
- echo.&echo 分段输出: !st1!
- pause
复制代码
作者: netbenton 时间: 2009-5-4 11:08
根据楼上的再精简、提速
- @echo off&setlocal enabledelayedexpansion
- set "str=1234567890abcdefghijklmnopqrstuvwxyz@#$_+-"
- for /l %%i in (0,1,199) do set/a ran=!random!%%42&for %%a in (!ran!) do set "st=!st!!str:~%%a,1!"
- echo 整行输出: !st!&echo.&echo 分列输出:
- for /l %%j in (0,10,190) do echo !st:~%%j,10!&set "st1=!st1!!st:~%%j,10! "
- echo.&echo 分段输出: !st1!
- pause
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |