标题: [文本处理] 【已解决】BAT:如何将文本内的四位数据拆分为两位数据 [打印本页]
作者: 思想之翼 时间: 2015-1-10 13:51 标题: 【已解决】BAT:如何将文本内的四位数据拆分为两位数据
本帖最后由 思想之翼 于 2015-1-15 01:58 编辑
D:/数据/内有若干txt文本,每个文本数据格式如下:
0910
0109 0110 0209 0210
0414 0312
现在欲将各文本内的数据拆分为两位数,并排成一行,一行数据末尾加回车键。比如上例的结果如下:
09 10 01 09 01 10 02 09 02 10 04 14 03 12
这样的代码如何写?恳望得到帮助。
或者先将竖排的四位数,转换为横排:- fr -r:"[\r\n]+" -t:" " "D:\数据\*.txt"
复制代码
即:0910 0109 0110 0209 0210 0414 0312
再将各文本内的数据拆分为两位数。卡在如何拆分了,望能得到帮助。
作者: yu2n 时间: 2015-1-10 17:01
本帖最后由 yu2n 于 2015-1-10 23:34 编辑
方法一:使用 Notepad++ 正则替换,供参考:
第一步:替换
查找目标: (\d{2})(\d{2})(\s*)
替换为: ($1 $2 )
第二步:加回车
查找目标: (.*)
替换为: ($1\r)
方法二:使用 fr.exe 批量替换文本文件
第一步:替换- fr -r:"(\d{2})(\d{2})(\s*)" -t:"\1 \2 " "D:\数据\*.txt"
复制代码
第二步:加回车- fr -r:"(.*)" -t:"\1\r" "D:\数据\*.txt"
复制代码
作者: 再世情緣 时间: 2015-1-10 22:10
给你个思路吧,先弄成1行,然后把空格替换为空,然后在用set截取
作者: terse 时间: 2015-1-10 23:57
- @echo off
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- mshta "javascript:var f=new ActiveXObject('Scripting.FileSystemObject');var s=f.GetStandardStream(0).readall();f.GetStandardStream(1).Write(s.replace(/[\r\n\s]/mg,'').replace(/(\d{2}(?=\d))/mg,'$1 '));close()"<"%%i" >$
- move $ "%%i"
- )
- pause
复制代码
作者: 思想之翼 时间: 2015-1-11 11:08
回复 4# terse
感谢
作者: yu2n 时间: 2015-1-11 12:16
回复 4# terse
terse 发表于 2015-1-10 23:57
个人觉得还是这样用比较好,命令提示符不会失去焦点:- @echo off
-
- :: 生成 fr.js
- (echo var f=new ActiveXObject^('Scripting.FileSystemObject'^);
- echo var s=f.GetStandardStream^(0^).readall^(^);
- echo f.GetStandardStream^(1^).Write^(s.replace^(/[\r\n\s]/mg,''^).replace^(/^(\d{2}^(?=\d^)^)/mg,'$1 '^)^)
- )>"%tmp%\fr.js"
-
- :: 替换该目录所有文本,跳过文件大小为0的文本
- for /f "delims=" %%A in ('dir /b /a-d *.txt') do (
- if "%%~zA" neq "0" (
- echo %%~A
- cscript //NoLogo "%tmp%\fr.js" < "%%~A" > "%tmp%\$"
- move "%tmp%\$" "%%~A" >nul 2>nul
- )
- )
- pause
复制代码
作者: 思想之翼 时间: 2015-1-11 12:24
回复 6# yu2n
感谢
作者: terse 时间: 2015-1-11 20:27
回复 6# yu2n
那就改这样吧- @if(0)==(0) echo off
- for /f "delims=" %%i in ('dir /a-d /b *.txt') do (
- cscript -nologo -e:javascript %0 <"%%i" >"%temp%\$"
- move "%temp%\$" "%%i" >nul
- )
- pause&exit
- @end
- var text = WScript.StdIn.ReadAll().replace(/[\r\n\s]/mg,'').replace(/(\d{2}(?=\d))/mg,'$1 ');
- WSH.echo(text);
复制代码
作者: pcl_test 时间: 2015-3-5 10:47
回复 1# 思想之翼 - @echo off
- setlocal enabledelayedexpansion
- cd /d "D:\数据\"
- for %%a in (*.txt) do (
- set s=
- for /f "delims=" %%b in ('type "%%a"') do (
- set r=
- for %%c in (%%b) do (
- set "t=%%c"
- set "1_t=!t:~,2! "
- set "2_t=!t:~-2! "
- set "t=!1_t!!2_t!"
- set "r=!r!!t!"
- )
- set s=!s!!r!
- )
- >$ echo,!s:~,-1!
- move /y $ "%%a"
- )
- pause
复制代码
作者: 慕夜蓝化 时间: 2015-3-5 13:23
- @echo off
- for %%i in (d:\数据\*.txt) do (
- (for /f "usebackq delims=" %%a in ("%%i") do (
- for %%b in (%%a) do (
- setlocal enabledelayedexpansion
- set n=%%b
- for /l %%c in (0 2 2) do (
- set/p=!n:~%%c,2! <nul
- )
- endlocal
- )
- )
- echo,) >%temp%\$
- move /y %temp%\$ "%%i"
- )
- pause>nul
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |