Board logo

标题: [文本处理] 如何替换文本内的指定字符并按每列行排头对齐(左对齐)的格式输出为log文件? [打印本页]

作者: YYchen    时间: 2016-3-24 10:07     标题: 如何替换文本内的指定字符并按每列行排头对齐(左对齐)的格式输出为log文件?

本帖最后由 pcl_test 于 2016-3-25 00:58 编辑

我有以下文本数据:
12||我是中国人||56||78||20150607
13||我是俄罗斯人||56||76||20190607
14||我是宾夕法尼亚人||56||76||20190607
15||我是悉尼人||56||76||20190607

通过DOS 批处理后,我希望去掉“||”,得到如下效果(相当于对文本数据进行了一次整形,然后输出到log文件中,每一列分隔符可以是空格,也可以是tab。整完形之后显得很规整的样子,每一列都是以最长的那个字段再输出个指定的字符,不知道我描述的清不清楚,大神们看图就能明白我的意思了。0.0 谢谢了,小弟谢谢了。):
12  我是中国人             56 78 20150607
13  我是俄罗斯人          56 76 20190607
14  我是宾夕法尼亚人    56 76 20190607
15  我是悉尼人             56 76 20190607
作者: flyinnet9    时间: 2016-3-24 11:08

  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3. for /f "tokens=1-5 delims=|" %%a in (test.txt) do (
  4.   set "a=%%a     "
  5.   set "b=%%b     "
  6.   set "c=%%c     "
  7.   set "d=%%d     "
  8.   set "e=%%e     "
  9.   echo.!a! !b:~0,10! !c! !d! !e!
  10. )
复制代码

作者: YYchen    时间: 2016-3-24 11:40

额 没人么 就没有大神来帮帮我么
作者: happy886rr    时间: 2016-3-24 12:31

  1. @echo off&(for /f "tokens=1-5 delims=||" %%i in ('type 把汉字换成你的文件名.txt') do (echo,%%i %%k %%l %%m %%j))>整形后的.log
复制代码
回复 1# YYchen
作者: codegay    时间: 2016-3-24 13:01

回复 4# happy886rr


    ||是特殊字符.
作者: YYchen    时间: 2016-3-24 13:14

本帖最后由 pcl_test 于 2016-3-24 13:31 编辑

回复 2# flyinnet9 回复 4# happy886rr
1.但是 中文会乱码怎么办
2.上面是我造的数据,而且实际中文件的列数都是不固定的。


谢谢你啦
作者: YYchen    时间: 2016-3-24 13:47

本帖最后由 pcl_test 于 2016-3-24 21:12 编辑

回复 5# codegay 回复 2# flyinnet9 回复 4# happy886rr
再问一下 dos下能指定文件输出的编码么。因为dos环境下默认是ANSI,但是我想保存文件格式为UTF-8。即使我先把目标文件夹保存为UTF-8,导出log的时候,还是会变成ANSI,这个时候中文是没法显示的。不知您有什么好的办法
作者: codegay    时间: 2016-3-24 13:52

SB.回复这么多.
作者: happy886rr    时间: 2016-3-24 13:52

回复 5# codegay
delims除了引号,其他符号貌似没事啊。
作者: codegay    时间: 2016-3-24 13:55

回复 12# happy886rr


    哦,那就是我错了.
作者: flyinnet9    时间: 2016-3-24 13:57

windows utf-8:

chcp 65001
作者: WHY    时间: 2016-3-24 16:27

  1. @if (0)==(0) echo off
  2. cscript //nologo //e:jscript "%~f0" < a.txt
  3. pause & exit
  4. @end
  5. var i = 0, arr = [], max = [];
  6. var reg = /[^\x00-\xff]/g;
  7. while(!WSH.StdIn.AtEndOfStream){
  8.     var strLine = WSH.StdIn.ReadLine();
  9.     if(!/^\s*$/.test(strLine)) {
  10.         arr[i] = strLine.split('||');
  11.         for(var j=0; j<arr[i].length; j++) {
  12.             var len = arr[i][j].replace(reg, '..').length;
  13.             if(!max[j] || len > max[j]) max[j] = len;
  14.         }
  15.         i++;
  16.     }
  17. }
  18. for(var i=0; i<arr.length; i++) {
  19.     var s = '';
  20.     for(var j=0; j<arr[i].length; j++) {
  21.         var len = max[j] - arr[i][j].replace(reg, '..').length;
  22.         var space = ' ';
  23.         for (var k=0; k<len; k++) space += ' ';
  24.         s += arr[i][j] + space;
  25.     }
  26.     WScript.Echo(s);
  27. }
复制代码

作者: YYchen    时间: 2016-3-25 09:10

回复 12# WHY
但是把处理完的文件保存到log里的时候 中文会乱码 大哥这个怎么破啊


谢谢你了
作者: YYchen    时间: 2016-3-25 10:29

回复 12# WHY
假设我的数据是这样的,我只想操作中间的有效数据然后保存到log中,那这个循坏体应该怎么改啊。小弟刚刚接触这些东西,希望您能指导一下。我的思路是把首尾先删了,或者是直接在循坏体内部做判断,但是不知道怎么写啊 0.00
SQL>
SQL> SELECT * FROM(
       SELECT
           ACCESS_CLASS_NO
           ||'        '|| FUNCTION_ID
          ||'        '|| ACCESS_PRIV
          ||'        '|| INS_USER_ID
           ||'        '|| INS_TIME
           ||'        '|| UPD_USER_ID
           ||'        '|| UPD_TIME
          ||'        '|| LOGICAL_DELETE
       FROM
         ACCESS_KAHI
      ORDER BY
          ACCESS_CLASS_NO
          ,FUNCTION_ID
  );
12||我是中国人||56||78||20150607
13||我是俄罗斯人||56||76||20190607
14||我是宾夕法尼亚人||56||76||20190607
15||我是悉尼人||56||76||20190607
SQL>
SQL>
SQL> spool off




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