标题: [文本处理] [收集思路]批处理把信息之间的n个空格替换为1个跳格 [打印本页]
作者: 523066680 时间: 2009-10-7 16:20 标题: [收集思路]批处理把信息之间的n个空格替换为1个跳格
工作中得到一份电子料单,部分内容如下:
电阻 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】也行)
(跳格符发上来好像会变成连续空格吧,大家用文字表示好了,当然如果
有办法直接发的话,就教教我了。)
[ 本帖最后由 523066680 于 2009-10-7 16:22 编辑 ]
作者: Seter 时间: 2009-10-7 16:27
我记得excel可以用空格做分隔符的....我做做看~第三方可?
假设共3列- for /f "tokens=1-3 delims= " %%a in (in.txt) do echo %%a跳格%%b跳格%%c>>result.x
复制代码
[ 本帖最后由 Seter 于 2009-10-7 16:41 编辑 ]
作者: 523066680 时间: 2009-10-7 16:45
非常标准,偶没想到耶……
现在题目升级,列数未知
作者: rat 时间: 2009-10-7 17:13
用vbs正则表达式挺适合的- Set oFSO = CreateObject("Scripting.FileSystemObject")
-
- With CreateObject("VBScript.RegExp")
- .Pattern = " +"
- .Global = True
- oFSO.CreateTextFile("result.x", True).Write .Replace(oFSO.OpenTextFile("list.txt").ReadAll(), "[Tab]")
- End With
复制代码
作者: plp626 时间: 2009-10-7 17:15
只要处理的文字中不含“#plp626#”这8个字符,就可以正确处理
-
- SETLOCAL ENABLEDELAYEDEXPANSION
- set s=1225 我靠 你 飞 飞 飞
- set s=!s: = #plp626# !&set s=!s:#plp626# =!&set s=!s: #plp626# = !
- echo !s!
复制代码
作者: Seter 时间: 2009-10-7 17:16
...LZ好可怕 - -
没想到啥好办法...我想想先,之前先发个效率很低的,没试过,等等自己试下
本来写了个..看了楼上两位的不敢发了~
PLP大大的思路我想到了...居然被抢了~
[ 本帖最后由 Seter 于 2009-10-7 17:32 编辑 ]
作者: asnahu 时间: 2009-10-7 17:25
行处理sed效果好:
- sed "s/ \{1,\}/\t/g;s/$/\r/" list.txt > result.x
复制代码
[ 本帖最后由 asnahu 于 2009-10-7 17:31 编辑 ]
作者: zqz0012005 时间: 2009-10-7 18:24
看来最近果然很流行重复发帖。。。
批处理替换文本中的连续空格(随风)
http://www.bathome.net/thread-5871-1-1.html
作者: 523066680 时间: 2009-10-7 18:27
随风的是要求替换【连续的空格】,而独立的1个空格是应该留下的。
我的帖子是要求替换n个空格,这里n是包扩1个空格的
不过被指出重复还是感觉很罪过的一件事情……,现在怎么办?
[ 本帖最后由 523066680 于 2009-10-7 18:36 编辑 ]
作者: zqz0012005 时间: 2009-10-7 18:59
随风的帖子内容是:现要求将所有连续空格替换成一个空格。
再进一步,将最终这个空格替换成制表符,不就是你的要求?
所以你的题目算得上是重复。
作者: 523066680 时间: 2009-10-7 19:11
大哥…… 我错了……
作者: terse 时间: 2009-10-7 19:33
老思路 我用 FOR 没新意
作者: netbenton 时间: 2009-10-7 21:09
- @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
复制代码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |