Board logo

标题: [文本处理] [收集思路]批处理把信息之间的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列
  1. 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正则表达式挺适合的
  1. Set oFSO = CreateObject("Scripting.FileSystemObject")
  2. With CreateObject("VBScript.RegExp")
  3. .Pattern = " +"
  4. .Global = True
  5. oFSO.CreateTextFile("result.x", True).Write .Replace(oFSO.OpenTextFile("list.txt").ReadAll(), "[Tab]")
  6. End With
复制代码

作者: plp626    时间: 2009-10-7 17:15

只要处理的文字中不含“#plp626#”这8个字符,就可以正确处理

  1. SETLOCAL ENABLEDELAYEDEXPANSION
  2. set s=1225  我靠 你 飞       飞   飞
  3. set s=!s: = #plp626# !&set s=!s:#plp626#  =!&set s=!s: #plp626# = !
  4. echo !s!
复制代码

作者: Seter    时间: 2009-10-7 17:16

...LZ好可怕 - -
没想到啥好办法...我想想先,之前先发个效率很低的,没试过,等等自己试下
本来写了个..看了楼上两位的不敢发了~
PLP大大的思路我想到了...居然被抢了~

[ 本帖最后由 Seter 于 2009-10-7 17:32 编辑 ]
作者: asnahu    时间: 2009-10-7 17:25

行处理sed效果好:

  1. 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

  1. @echo off&setlocal enabledelayedexpansion
  2. set "Tab=        "这里跳格
  3. (for /f "tokens=*" %%i in (list.txt) do (
  4.     set str=%%i
  5.     set str=!str: = %tab%!
  6.     set str=!str:%tab% =!
  7.     echo;!str: =!
  8. ))>result.x
  9. pause
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2