标题: [文本处理] 如何替换文本内的指定字符并按每列行排头对齐(左对齐)的格式输出为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
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- for /f "tokens=1-5 delims=|" %%a in (test.txt) do (
- set "a=%%a "
- set "b=%%b "
- set "c=%%c "
- set "d=%%d "
- set "e=%%e "
- echo.!a! !b:~0,10! !c! !d! !e!
- )
复制代码
作者: YYchen 时间: 2016-3-24 11:40
额 没人么 就没有大神来帮帮我么
作者: happy886rr 时间: 2016-3-24 12:31
- @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
- @if (0)==(0) echo off
- cscript //nologo //e:jscript "%~f0" < a.txt
- pause & exit
- @end
-
- var i = 0, arr = [], max = [];
- var reg = /[^\x00-\xff]/g;
-
- while(!WSH.StdIn.AtEndOfStream){
- var strLine = WSH.StdIn.ReadLine();
- if(!/^\s*$/.test(strLine)) {
- arr[i] = strLine.split('||');
- for(var j=0; j<arr[i].length; j++) {
- var len = arr[i][j].replace(reg, '..').length;
- if(!max[j] || len > max[j]) max[j] = len;
- }
- i++;
- }
- }
-
- for(var i=0; i<arr.length; i++) {
- var s = '';
- for(var j=0; j<arr[i].length; j++) {
- var len = max[j] - arr[i][j].replace(reg, '..').length;
- var space = ' ';
- for (var k=0; k<len; k++) space += ' ';
- s += arr[i][j] + space;
- }
- WScript.Echo(s);
- }
复制代码
作者: 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 |