中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: 请教一个文本排列问题 上一主题 | 下一主题
haiyuey
新手上路





积分 10
发帖 10
注册 2008-11-4
状态 离线
『楼 主』:  请教一个文本排列问题 使用 LLM 解释/回答一下

文本为:
王一,2
王一,5
张二,4
张二,5
张二,8
刘三,2
求输出结果为:
王一,2 5
张二,4 5 8
刘三,2

Last edited by haiyuey on 2009-4-21 at 00:11 ]


2009-4-20 23:51
查看资料  发短消息  网志   编辑帖子  回复  引用回复
haiyuey
新手上路





积分 10
发帖 10
注册 2008-11-4
状态 离线
『第 2 楼』:   使用 LLM 解释/回答一下

没人知道吗?


2009-4-21 03:21
查看资料  发短消息  网志   编辑帖子  回复  引用回复
hongewuyan
初级用户





积分 65
发帖 29
注册 2008-3-24
状态 离线
『第 3 楼』:   使用 LLM 解释/回答一下



@echo off
setlocal ENABLEDELAYEDEXPANSION
if exist b.txt del b.txt
set m=""
for /f "tokens=1,2 delims=," %%i in (a.txt) do (
if /i not "%%i"=="!m!" (
>>b.txt echo %%i,%%j
set m=%%i
) else (
sed -i "s/^%%i.*/& %%j/" b.txt
sed -i "s/$/\r/" b.txt
set m=%%i
)
)



以上代码我测试是可以的,不过需要你系统里面有sed这个命令,论坛上很好找到的,4.07版本以上应该可以.


2009-4-21 03:53
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 4 楼』:   使用 LLM 解释/回答一下

@echo off&setlocal enabledelayedexpansion
set "file=a.txt"
set /p var=<"%file%"
set "var2=%var:*,=%" & set var=!var:,%var:*,=%=!
(for /f "usebackq skip=1 tokens=1,2 delims=," %%a in ("%file%") do (
if "%%a" neq "!var!" (
echo !var!,!var2!
set "var=%%a" & set var2=%%b
) else set var2=!var2! %%b
)
echo !var!,!var2!)>result.txt
start result.txt


   此帖被 +2 点积分    点击查看详情   
评分人:【 freeants001 分数: +2  时间:2009-4-21 07:29


2009-4-21 04:23
查看资料  发短消息  网志   编辑帖子  回复  引用回复
haiyuey
新手上路





积分 10
发帖 10
注册 2008-11-4
状态 离线
『第 5 楼』:   使用 LLM 解释/回答一下

三楼这个好像不行,数据换一个排列再执行就没用了!

Last edited by haiyuey on 2009-4-21 at 04:35 ]


2009-4-21 04:29
查看资料  发短消息  网志   编辑帖子  回复  引用回复
haiyuey
新手上路





积分 10
发帖 10
注册 2008-11-4
状态 离线
『第 6 楼』:   使用 LLM 解释/回答一下

三楼的不行,四楼的应该可以,先谢过,再试下


2009-4-21 04:34
查看资料  发短消息  网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 7 楼』:   使用 LLM 解释/回答一下

名字是连着排列的吗? 还是打乱的?


2009-4-21 07:19
查看资料  发短消息  网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 8 楼』:   使用 LLM 解释/回答一下

不管是打乱,还是连着的都可以
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1,2 delims=, " %%a in (%~n0.txt) do (set "#%%a=!#%%a!%%b ")
for /f "tokens=1,2 delims==#" %%a in ('set #') do (echo %%a,%%b)
pause


Last edited by netbenton on 2009-4-21 at 05:29 ]




精简
=> 个人网志
2009-4-21 07:27
查看资料  发送邮件  发短消息  网志  OICQ (37659560)  编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 9 楼』:   使用 LLM 解释/回答一下

set "var2=%var:*,=%"中竟然可以使用通配符,感谢tireless的代码,学了一招,呵呵~~


2009-4-21 07:29
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sady2009
初级用户





积分 58
发帖 60
注册 2009-2-18
状态 离线
『第 10 楼』:   使用 LLM 解释/回答一下

终于看懂了8楼老大的代码
set #用的很妙,能把#开头的变量都列出来,再用for 处理。
不知道 cmd最大可以支持多少个变量. 有数量限制吗?


2009-4-21 08:09
查看资料  发短消息  网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 11 楼』:  Re 10楼 使用 LLM 解释/回答一下

http://technet.microsoft.com/en-us/library/bb490954.aspx


The maximum individual environment variable size is 8192bytes.

The maximum total environment variable size for all variables, which includes variable names and the equal sign, is 65,536KB.


Last edited by tireless on 2009-4-21 at 08:14 ]


2009-4-21 08:12
查看资料  发短消息  网志   编辑帖子  回复  引用回复
THENEWLIFE
初级用户




积分 78
发帖 64
注册 2008-8-29
状态 离线
『第 12 楼』:   使用 LLM 解释/回答一下

看了很长时间还是不怎么动下面这2句,还大大门帮忙解释下
set /p var=<"%file%"
这里的VAR=< 里面的这个“<”是转义符的意思吗
意思是把FILE的值附给 VAR吧,然后用SET /P做为输入吗


set "var2=%var:*,=%" & set var=!var:,%var:*,=%=!

"var2=%var:*,=%" 里面的“*和,”的意思是把所有字符和逗号转换成空吗
var=!var:,%var:*,=%=!这句是一个变量替换的嵌套吧
意思是把%var:*,=%替换的值再和, 替换成空吗。看了很多这方便的资料
在实际应用上就不知道怎么下手,不知道我理解的对吗,还请大大门指点,最好举个实例解释下,谢谢了~


2009-4-21 22:16
查看资料  发短消息  网志   编辑帖子  回复  引用回复
jmz573515
银牌会员




积分 1212
发帖 464
注册 2006-12-13
状态 离线
『第 13 楼』:   使用 LLM 解释/回答一下


set fso=createobject("scripting.filesystemobject")
set file=fso.opentextfile("1.txt")
do while file.atendofstream<>true
n=file.readline:s=split(n,","):a=s(0):b=s(1)
if instr(sn,a)=0 then
n=vbcrlf &n:sn=a:sm=sm & n
else
sm=sm & " " &b
end if
loop
file.close
wsh.echo mid(sm,3)


2009-4-21 22:43
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
freeants001
中级用户




积分 330
发帖 244
注册 2006-4-14
来自 湖北
状态 离线
『第 14 楼』:   使用 LLM 解释/回答一下

fso=WScript.createobject("scripting.filesystemobject");
sss=fso.opentextfile("a.txt").readall();
re=/((?:\n|^)(+),+)\r\n((?:.*\r\n)*?)(?:\2,(+\r\n))/
while(re.test(sss))sss=sss.replace(re,"$1 $4$3");
fso.createtextfile("a_dest.txt",1,0).write(sss)


2009-4-22 00:17
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
tireless
银牌会员





积分 2025
发帖 1122
注册 2007-9-5
状态 离线
『第 15 楼』:  Re 12楼 使用 LLM 解释/回答一下

< 是重定向符号。
set /p var= 默认是从控制台(键盘)接受输入源,这句等同于 set /p var=<con。把 con 换成文件,就是把文件作为输入源了。而变量只允许一行字符,所以只有文件的第一行设为了 var 的值。

%var:*,=% 是把第一个 , 及前面所有字符替换为空。
只有这一种通配符用法,其他的如 %var:,*=%%var:?,=% 都无效。

!var:,%var:*,=%=!
假设 var=王一,2
%var:*,=% 取得的值是 2,然后 !var:,2=! 取得的值是 王一

Last edited by tireless on 2009-4-22 at 09:13 ]


   此帖被 +2 点积分    点击查看详情   
评分人:【 THENEWLIFE 分数: +2  时间:2009-4-22 02:34


2009-4-22 00:40
查看资料  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: