中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-12 18:43
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [收集思路]把信息之间的n个空格替换为1个跳格 查看 2,424 回复 15
楼 主 [收集思路]把信息之间的n个空格替换为1个跳格 发表于 2009-10-07 16:28 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
工作中得到一份电子料单,部分内容如下:

电阻 100K R0603 1
插脚电容 100uF/16V 6x3 2
电容 104 C0603 3
电容 105 C0603 1
贴片二三极管 2SN3904 SOT-23 3


其中,第一列为物料名称,第二列为规格,第三列为封装,第四列为数量。
但是它们之间是用n个空格区分的,实际料单很长,要导入excel表格并
按excel的方式分列(excle用跳格符作为分列的标记)的话,可能要一个个地
去空格,换tab,纯体力活啊~

感觉当成批处理题目做的话还蛮适合~ 我就当题目发了,顺便看看有哪些
好思路

假定上面给出的料单名为 list.txt
现要求用批处理对该料单进行整理,把数据之间的空格换成1个跳格符
并直接重定向生成结果文件: result.xls (没装excel的 生成【result.x】也行)


(跳格符发上来好像会变成连续空格吧,大家用文字表示好了,当然如果
有办法直接发的话,就教教我了。)

[ Last edited by 523066680 on 2009-10-7 at 16:38 ]
2 发表于 2009-10-07 17:07 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
在bathome进程,seter已经给出了用
for tokens=1-3的办法,%%a跳格%%b跳格%%c 重定向出结果。
但是列数被确定了。

现题目升级,列数未知。

[ Last edited by 523066680 on 2009-10-7 at 18:01 ]
3 发表于 2009-10-07 18:54 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
今天bathome真热闹,一下子就刷了一长串……
4 发表于 2009-10-07 19:48 ·  中国 吉林 延边朝鲜族自治州 延吉市 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%i in (list.txt) do (call :k "%%i"
>>result.x echo.!i!)
exit
:k
set i=%~1&set "i=!i: =#!"
:c
set "i=%i:##=#%"
for /f "delims=" %%i in ('echo %i% ^| find "##"') do goto c
set "i=%i:#= %"这里跳格


好象这个方法处理的太慢了

[ Last edited by Hanyeguxing on 2009-10-8 at 04:37 ]
5 发表于 2009-10-07 20:57 ·  中国 江苏 常州 溧阳市 电信
银牌会员
★★★
积分 2,404
发帖 946
注册 2005-09-08 13:44
20年会员
UID 42345
状态 离线
字符串应该不含空格吧

@echo off&setlocal enabledelayedexpansion
set "Tab= "这里跳格
(for /f "tokens=*" %%i in (list.txt) do (
for %%a in (%%i) do set str=!str!%Tab%%%a
echo!str!&set "str="
))>result.x
pause
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +15 2009-10-07 21:29
简单!简单!再简单!
6 发表于 2009-10-07 21:22 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
@echo off&setlocal enabledelayedexpansion
set "Tab= "这里跳格
(for /f "tokens=*" %%i in (list.txt) do (
set str=%%i
set str=!str: = %tab%!
set str=!str:%tab% =!
echo;!str: =!
))>result.x
pause

[ Last edited by netbenton on 2009-10-7 at 19:25 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
523066680 +15 2009-10-07 21:29
精简
=> 个人网志
7 发表于 2009-10-07 21:28 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
谢谢各位,学习了^_^

[ Last edited by 523066680 on 2009-10-7 at 21:30 ]
8 发表于 2009-10-07 23:09 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
21年会员
UID 44210
状态 离线
按 6 楼netbenton的方法,把TAB跳格改为“,”,输出>result.x改为>result.csv,就可以直接双击打开后进入分列好的excel列表,另存为电子表格文件

PS:前提是必须是正常安装的OFFICE
9 发表于 2009-10-08 10:47 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
前辈出马就是不一样~ 学习学习。
10 发表于 2009-10-08 12:18 ·  中国 陕西 西安 电信
铂金会员
★★★★
积分 5,212
发帖 2,478
注册 2007-02-08 23:39
19年会员
UID 79003
性别 男
状态 离线
如果存在 空格空格
替换 空格空格 为 空格
重复
S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
11 发表于 2009-10-08 17:03 ·  中国 吉林 延边朝鲜族自治州 电信
银牌会员
★★★
正在学习中的菜鸟...
积分 1,039
发帖 897
注册 2009-03-01 15:34
17年会员
UID 140302
性别 男
来自 在地狱中仰望天堂
状态 离线
还可以对每行逐个字符解析,第一个空格输出为制表符,通过set /a或if defined来实现后面的空格不输出。
12 发表于 2009-10-09 15:34 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
如8L所说,转换为csv文件是可以直接用OFFICE打开的。
另外,利用Excel中的"数据","导入外部数据",然后选择要导入的文件,按照提示是可以被Excel识别的。
好久好久没来了,也来练练手(不涉及特殊字符,转换为逗号):

@echo off
for /f "delims=" %%i in (a.txt) do call :MySub %%i
pause
goto :eof

:MySub
set "str="
for %%j in (%*) do call set "str=%%str%%,%%j"
echo %str:~1%
goto :eof
13 发表于 2009-10-09 18:31 ·  中国 湖北 荆门 电信
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
冷清许多了啊,WillSort,无奈何,都不来了吗?
一部《特种部队》都看完了也没引出玉来,再来一个吧:

@echo off
setlocal enabledelayedexpansion
for /f "delims=" %%i in (a.txt) do (
set str=%%i
(set str=!str: =^

!)
rem 上面的空行是个换行符,贴不出来黑点,参见附件
set NewStr=
for /f %%j in ("!str!") do set NewStr=!NewStr!,%%j
echo !NewStr:~1!
)
pause>nul



[ Last edited by 3742668 on 2009-10-9 at 18:32 ]
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
netbenton +15 2009-10-09 19:43
附件
xx.rar (476 bytes, 下载附件所需积分 1 点, 下载次数: 5)
14 发表于 2009-10-09 19:17 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
19年会员
UID 89899
性别 男
状态 离线
WillSort,无奈何确实好几年没有出现过了
15 发表于 2009-10-09 19:31 ·  中国 广东 广州 电信
银牌会员
★★★★
SuperCleaner
积分 2,362
发帖 1,133
注册 2008-02-02 21:36
18年会员
UID 110072
性别 男
状态 离线
3742668
版主改成txt的附件嘛,可以直接打开看并复制,压缩包要解压的哦。
yes……终于有崇拜的前辈来回帖了。

下载附件了,压缩包也有压缩包的好~ 那就压缩包了。

[ Last edited by 523066680 on 2009-10-9 at 19:35 ]
论坛跳转: