[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 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

1,怎么把文本中的连续两个空格替换成一个,然后排版?直接set "a=%a:  = %"
2,楼主提供的效果看不规律。。。每列左对齐?右对齐?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

1.真的看不懂
2.每列左对齐

TOP

  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
复制代码
一个思路...

TOP

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

谢谢。另外我第一个问题有点改变,就是连续两个空格的保留一个,一个的去除,怎么弄

TOP

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

TOP

@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,享用批处理的方式做掉

TOP

可以用补充空格截取字符串的方法来解决,但要通用,则必须获取文本中最长字符串的长度。。。
***共同提高***

TOP

本帖最后由 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
复制代码
***共同提高***

TOP

本帖最后由 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"
复制代码

TOP

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

TOP

返回列表