中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [收集思路]把信息之间的n个空格替换为1个跳格
« [1] [2] »
作者:
标题: [收集思路]把信息之间的n个空格替换为1个跳格 上一主题 | 下一主题
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『楼 主』:  [收集思路]把信息之间的n个空格替换为1个跳格

工作中得到一份电子料单,部分内容如下:

  Quote:
电阻 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 ]



综合型编程论坛

我的作品索引
  
2009-10-7 16:28
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 2 楼』:  

在bathome进程,seter已经给出了用
for tokens=1-3的办法,%%a跳格%%b跳格%%c  重定向出结果。
但是列数被确定了。

现题目升级,列数未知。

[ Last edited by 523066680 on 2009-10-7 at 18:01 ]



综合型编程论坛

我的作品索引
  
2009-10-7 17:07
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 3 楼』:  

今天bathome真热闹,一下子就刷了一长串……



综合型编程论坛

我的作品索引
  
2009-10-7 18:54
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 4 楼』:  


@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 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-10-7 19:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 5 楼』:  

字符串应该不含空格吧
@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


   此帖被 +15 点积分         点击查看详情   
评分人:【 523066680 分数: +15  时间:2009-10-7 21:29




简单!简单!再简单!
2009-10-7 20:57
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 6 楼』:  

@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 ]

   此帖被 +15 点积分         点击查看详情   
评分人:【 523066680 分数: +15  时间:2009-10-7 21:29




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-10-7 21:22
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 7 楼』:  

谢谢各位,学习了^_^

[ Last edited by 523066680 on 2009-10-7 at 21:30 ]



综合型编程论坛

我的作品索引
  
2009-10-7 21:28
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 8 楼』:  

按 6 楼netbenton的方法,把TAB跳格改为“,”,输出>result.x改为>result.csv,就可以直接双击打开后进入分列好的excel列表,另存为电子表格文件

PS:前提是必须是正常安装的OFFICE



2009-10-7 23:09
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 9 楼』:  

前辈出马就是不一样~ 学习学习。



综合型编程论坛

我的作品索引
  
2009-10-8 10:47
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
slore
铂金会员





积分 5212
发帖 2478
注册 2007-2-8
状态 离线
『第 10 楼』:  

如果存在 空格空格
替换 空格空格 为 空格
重复



S smile 微笑,L love 爱,O optimism 乐观,R relax 放松,E enthusiasm 热情...Slore
2009-10-8 12:18
查看资料  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 11 楼』:  

还可以对每行逐个字符解析,第一个空格输出为制表符,通过set /a或if defined来实现后面的空格不输出。



批处理之家 http://bbs.bathome.net/forum-5-1.html
2009-10-8 17:03
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 12 楼』:  

如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


2009-10-9 15:34
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 13 楼』:  

冷清许多了啊,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 ]

   此帖被 +15 点积分         点击查看详情   
评分人:【 netbenton 分数: +15  时间:2009-10-9 19:43


附件 1: xx.rar (2009-10-9 18:32, 476 bytes, 下载附件所需积分 1 点 ,下载次数: 5)
2009-10-9 18:31
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 14 楼』:  

WillSort,无奈何确实好几年没有出现过了



2009-10-9 19:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 15 楼』:  

3742668
版主改成txt的附件嘛,可以直接打开看并复制,压缩包要解压的哦。
yes……终于有崇拜的前辈来回帖了。

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

[ Last edited by 523066680 on 2009-10-9 at 19:35 ]



综合型编程论坛

我的作品索引
  
2009-10-9 19:31
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: