|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
 『楼 主』:
[原创]列表输出文档,一些学习心得
使用 LLM 解释/回答一下
昨天看贴子有列表输出的,仔细想了下办法,做了个简单工具,在精简过程中发现set /a的一些特性,提出来大家探讨一下
set /a var1=(x...),var2=var1(x...),var3=var2(x...)
计算过程中,不因为一行命令的延缓约束来传送变量
例如以上,var2的计算过程中引用的var1就是前式结果
此例在for中依然有效,但call之后就不行了,不知什么原因
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION 2>nul 3>nul
set arg= 1
:cfgf
if "%~1" == "" (set /p df=datafile:) else set df="%1"
set df=%df:"=%&&if not exist "%df%" goto cfgf
cls&echo file "%df%" line:10.
for /f "usebackq delims=" %%i in ("%df%") do set /a vvv+=1,1/(vvv%%10)&&echo %%i||echo.&&goto cfgc
:cfgc
set /p column=column:
set /a 0/column||goto cfgc
for /l %%i in (1,1,%column%) do set /p wcol%%i=col%%i:&&set /a 0/!wcol%%i!||goto cfgc
set /a wcol0=!wcol%column%!
cls&echo FILE:%df% COLUMN:%column%
for /l %%i in (1,1,%column%) do echo COL%%i WIDTH:!wcol%%i!byte
echo setup ...&pause>nul
cls&for /f "usebackq" %%i in ("%df%") do (
set /a xxx+=1,zzz=xxx%%%column%
call set /a yyy=%%wcol!zzz!%%
set rga=%%i%arg%
call set/p=%%rga:~0,!yyy!%%<nul
set/p= <nul
set /a 1/zzz||echo.
)
echo/&pause
此帖被 +12 点积分 点击查看详情 评分人:【 kcdsw 】 | 分数: +4 | 时间:2007-3-25 08:15 | 评分人:【 lxmxn 】 | 分数: +8 | 时间:2007-3-25 16:14 |
|
|
|
2007-3-25 05:00 |
|
|
lxmxn
版主
       
积分 11386
发帖 4938
注册 2006-7-23
状态 离线
|
『第 2 楼』:
使用 LLM 解释/回答一下
To everest79:
兄的代码有很多亮点,其中巧妙利用了set/a的很多特性,比如set /a 1/zzz||echo.,set的连续赋值(不知道说的对不对),值得好好的学习一下,支持!
今天把分用完了,改天给兄加分。
|
|
2007-3-25 07:04 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 3 楼』:
使用 LLM 解释/回答一下
re lxmxn
谢谢你的分,嘿嘿,平常在使用set/a时习惯性的都加了引用符号,反而把一些东西错过了,原来set/a连续赋值时各变量按先后顺序是有延缓特性,并且可以很好的工作在for这类命令中,一些简单的计数操作再也不用特意开启延缓了
|
|
2007-3-25 08:41 |
|
|
kcdsw
中级用户
  
积分 404
发帖 179
注册 2006-3-30
状态 离线
|
|
2007-3-25 08:44 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2007-3-25 08:47 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2007-3-26 02:19 |
|
|
stornager
中级用户
   scriptlover
积分 328
发帖 131
注册 2007-3-25
状态 离线
|
『第 7 楼』:
求教
使用 LLM 解释/回答一下
brother everest79:可否详细解释一下set/a的用法?????????
|
|
2007-3-27 06:30 |
|
|
lagunazeng
新手上路

积分 12
发帖 5
注册 2006-8-8
状态 离线
|
|
2007-3-27 07:50 |
|
|
flyinspace
银牌会员
    
积分 1206
发帖 517
注册 2007-3-25
状态 离线
|
|
2007-3-27 09:45 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
『第 10 楼』:
使用 LLM 解释/回答一下
Originally posted by stornager at 2007-3-26 05:30 PM:
brother everest79:可否详细解释一下set/a的用法?????????
这个原理什么的讲不通,举个例子吧
set /a A=6-1,B=A*A,C=B-1,D=C/2
这个运算结果A=5 B=25 C=24 D=12,","是表达式分隔符,这条命令可以看作是一个表达式的集合,由结果可以发现不同于大多数命令的两个特点,第一,表达式是按先后次序来分层进行计算的,第二,每个表达式的结果也就是赋值在各个表达式间是可以按先后产生顺序来调用的,这是因为第一个特点产生的延时效果,这种延时效果在for之类命令中有较大的作用
通常我们在判断一个数是否为偶数时采用以下方法
set /a a=8%2 ;求除以2的余数
if %a% equ 0 echo %a%是偶数 ;判断余数是否为零,若是则为偶数
现在直接用set来完成
set /a 1/(8%2) 2>nul ||echo %a%是偶数
这样节省了变量空间,并简化了代码
这种方法在配合前边提到的两个特点,可以将一些工作变得简单起来
|
|
2007-3-27 10:14 |
|
|
flyinspace
银牌会员
    
积分 1206
发帖 517
注册 2007-3-25
状态 离线
|
『第 11 楼』:
使用 LLM 解释/回答一下
set /a 1/(8%2) 2>nul ||echo %a%是偶数
不明白这一句??
变量a从那里来的??
|
|
2007-3-27 10:24 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2007-3-27 10:26 |
|
|
flyinspace
银牌会员
    
积分 1206
发帖 517
注册 2007-3-25
状态 离线
|
『第 13 楼』:
使用 LLM 解释/回答一下
这么说吧.
set /a a=8%2 ;求除以2的余数
if %a% equ 0 echo %a%是偶数 ;判断余数是否为零,若是则为偶数
上面这段话很好理解.
我知道什么变量做了一些什么事?
而set /a 1/(8%2) 2>nul ||echo %a%是偶数
而这一句.若是单独用出来.
就会在屏幕上显示%a%
至于你说的复制来的。
我就更加不明白从那里复制来的..
|
|
2007-3-27 10:52 |
|
|
everest79
金牌会员
      一叶枝头,万树皆春
积分 2564
发帖 1127
注册 2006-12-25
状态 离线
|
|
2007-3-27 23:52 |
|