Board logo

标题: [文本处理] 怎么把文本中的连续两个空格替换成一个,只有一个的删除,然后排版 [打印本页]

作者: lilarcor    时间: 2011-4-7 17:12     标题: 怎么把文本中的连续两个空格替换成一个,只有一个的删除,然后排版

本帖最后由 lilarcor 于 2011-4-7 17:53 编辑

rt ,然后能不能根据这个空格来排版
比如修改空格后文本如下,每个字段的长度都是不等的
XXX aaa bbb ccc dddd
VVVVVV bbb aaa dddd eee
PPPP sss aaa jjj sss

排版后,能不能达到下面的效果
XXX       aaa bbb ccc   dddd
VVVVVV bbb aaa dddd eee
PPPP      sss  aaa jjj     sss
作者: hanyeguxing    时间: 2011-4-7 17:20

1,怎么把文本中的连续两个空格替换成一个,然后排版?直接set "a=%a:  = %"
2,楼主提供的效果看不规律。。。每列左对齐?右对齐?
作者: lilarcor    时间: 2011-4-7 17:34

1.真的看不懂
2.每列左对齐
作者: CrLf    时间: 2011-4-7 17:36

  1. @echo off
  2. (for /f "delims=" %%a in (a.txt) do (
  3. for %%b in (%%a) do set /p=%%b【此处换成tab键】<nul
  4. echo;
  5. ))>b.txt
  6. more /t8 b.txt>c.txt
复制代码
一个思路...
作者: lilarcor    时间: 2011-4-7 17:53

本帖最后由 lilarcor 于 2011-4-7 18:03 编辑

谢谢。另外我第一个问题有点改变,就是连续两个空格的保留一个,一个的去除,怎么弄
作者: tmplinshi    时间: 2011-4-7 18:02

5# lilarcor
  1. sed "s/  /\t/g; s/ //g" 1.txt|more /t8
复制代码

作者: lilarcor    时间: 2011-4-7 18:09

@echo off
(for /f "delims=" %%a in (a.txt) do (
for %%b in (%%a) do set /p=%%b【此处换成tab键】b.txt
more /t8 b.txt>c.txt一个思路...
zm900612 发表于 2011-4-7 17:36


直接用tab还是有点问题的,因为每个字段长度可能会有不同。似乎会很复杂。
vim中有个align插件能够做到,但是不想用vim,享用批处理的方式做掉
作者: batman    时间: 2011-4-7 18:32

可以用补充空格截取字符串的方法来解决,但要通用,则必须获取文本中最长字符串的长度。。。
作者: batman    时间: 2011-4-7 18:48

本帖最后由 batman 于 2011-4-7 18:53 编辑
  1. @echo off&setlocal enabledelayedexpansion
  2. set /a max=0
  3. for /f "delims=" %%a in (a.txt) do (
  4.      for %%b in (%%a) do (
  5.           set "str=%%b"&set "n="
  6.           for /l %%c in (1,1,80) do if "!str:~%%c!" equ "" if not defined n set "n=%%c"         
  7.           if !max! lss !n! set /a max=n
  8.     )
  9. )
  10. for /l %%a in (1,1,%max%) do set "k=!k! "
  11. set /a max+=2
  12. for /f "delims=" %%a in (a.txt) do (
  13.      for %%b in (%%a) do set "str=%%b!k!"&set "var=!var!!str:~,%max%!"
  14.      echo !var!&set "var="
  15. )
  16. pause>nul
复制代码

作者: tmplinshi    时间: 2011-4-7 18:52

本帖最后由 tmplinshi 于 2011-4-7 19:06 编辑

直接替换源文件;
英文感叹号会被删除;
空行会被删除;
每一行中不能含有 , ; = * ?
  1. @echo off
  2. set "file=a.txt"
  3. set "Tab=【此处换成tab键】"
  4. SetLocal EnableDelayedExpansion
  5. set MaxLen=0
  6. (for /f "usebackq tokens=*" %%a in ("%file%") do (
  7.     set var=%%a
  8.     set var=!var:  =%Tab%!
  9.     set var=!var: =!
  10.     echo,!var!
  11.     for %%a in (!var!) do (
  12.         set s=%%a
  13.         rem ---------- 计算字符个数 ----------
  14.         set /a a = 8189, c = 0
  15.         for /l %%a in (1 1 13) do (
  16.             set /a "b = (a - c) / 2 + c"
  17.             for %%b in (!b!) do (
  18.                 if "!s:~%%b,1!"=="" (set a=!b!) else set c=!b!
  19.             )
  20.         )
  21.         rem ---------- / 计算字符个数 ----------
  22.         if !a! gtr !MaxLen! set MaxLen=!a!
  23.     )
  24. )) >"%file%.tmp"
  25. set /a MaxLen += 1
  26. more /t%MaxLen% "%file%.tmp" >"%file%"
  27. del "%file%.tmp"
复制代码

作者: lilarcor    时间: 2011-4-8 08:50

各位版主大人和网友们,我只得佩服得五体投地,十分感谢,效果一级棒




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