标题: [文本处理] 【已解决】BAT:如何按数字顺序批量整理数据 [打印本页]
作者: 思想之翼 时间: 2015-2-28 22:49 标题: 【已解决】BAT:如何按数字顺序批量整理数据
本帖最后由 思想之翼 于 2015-3-4 09:37 编辑
D:/数据/内有若干txt文本,每个文本数据格式如下:
436 518 752 719 092 078
840 365 259 237 179 126
...
欲将所有文本内的数据从小到大排列,且数字0永远排列在最后,例如:
436改成346
092改成290
如此,上例改成:
346 158 257 179 290 780
480 356 259 237 179 126
...
保持文本中原来数据间的排列队形不变。
整理后的数据覆盖原数据,保持原文本名称不变。
这样的代码如何写?恳望得到帮助。
作者: apang 时间: 2015-2-28 23:48
本帖最后由 apang 于 2015-2-28 23:53 编辑
- @set @n=0;/* & echo off
- pushd "d:\数据\"
- dir /b *.txt | cscript -nologo -e:jscript "%~0"
- pause & exit & rem */
-
- fso = new ActiveXObject("Scripting.FileSystemObject");
- while (!WScript.StdIn.AtEndOfStream) {
- f = WScript.StdIn.ReadLine();
- objFile = fso.OpenTextFile(f, 1);
- txt = objFile.ReadAll();
- objFile.Close();
- txt = txt.replace(/\d+/g, function(s0) {
- s = "";
- for (i=1; i<=10; i++) {
- j = i % 10 + "";
- if (s0.indexOf(j)>-1) s += j;
- }
- return s
- })
- fso.OpenTextFile(f, 2).Write(txt)
- }
复制代码
作者: 慕夜蓝化 时间: 2015-3-1 17:37
本帖最后由 慕夜蓝化 于 2015-3-1 18:01 编辑
- @echo off
- for %%i in (d:\数据\*.txt) do (
- (for /f "usebackq delims=" %%a in ("%%i") do (
- for %%b in (%%a) do (
- setlocal enabledelayedexpansion
- set "str=%%b"&call :split
- for /f "delims=@=" %%c in ('set @') do if %%c neq 0 (set n=!n!%%c) else set/a a+=1
- if not defined a (
- set/p=!n! <nul
- ) else (
- for /l %%d in (1 1 !a!) do set n=!n!0<nul
- set/p=!n! <nul
- )
- endlocal
- )
- echo,
- )) >%temp%\$
- move /y %temp%\$ "%%i"
- )
- pause&exit
-
- :split
- if not "!str!"=="" set @!str:~,1!=A&set str=!str:~1!&goto :split
- goto :eof
复制代码
作者: pcl_test 时间: 2015-3-1 19:02
本帖最后由 pcl_test 于 2015-3-2 14:09 编辑
回复 1# 思想之翼 - @echo off
- setlocal enabledelayedexpansion
- cd /d "D:\数据\"
- for %%a in (*.txt) do (
- for /f "delims=" %%b in ('type "%%a"') do (
- set s=
- for %%c in (%%b) do (
- >$ echo,%%c
- set t=
- for %%d in (1 2 3 4 5 6 7 8 9 0) do (
- findstr "%%d" $ >nul && set "t=!t!%%d"
- )
- del $
- set "s=!s!!t! "
- )
- >>tmp echo,!s:~0,-8!
- )
- move tmp "%%a"
- )
- pause
复制代码
作者: cobat 时间: 2015-3-6 23:30
本帖最后由 cobat 于 2015-3-6 23:43 编辑
原来可以这么做.- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in ('type "a.txt"') do (
- for %%b in (%%a) do (
- set "i=%%b"
- for /l %%c in (1,1,9) do (
- for %%d in ("!i:%%c=" "!") do set "j=!j!%%c"
- set "j=!j:~,-1!"
- )
- set "j=!j!000"
- <nul set /p "o=!j:~,3! "
- set "j="
- )
- echo,
- )
- pause
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |