标题: [文本处理] [已解决]求助纯批处理做文本行内移位排列 [打印本页]
作者: zhangzsky 时间: 2018-5-7 21:07 标题: [已解决]求助纯批处理做文本行内移位排列
本帖最后由 zhangzsky 于 2018-5-9 13:29 编辑
- 编号,79,9,29,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空
- 编号,224,40,155,空,空,空,空,空,空,空,45,34,空,空,空,空,空,空,空,空
- 编号,136,119,11,196,空,空,空,空,空,42,118,75,空,空,空,空,空,空,空
复制代码
文本"1.txt"如上.行数比较多,只处理的是第二行
文本"1.txt"主要是三部分组成:
1是编号二字.
2是编号后的10个数值,暂称前十
3是编号后的10个数值之后的10个数值,也就是编号后第十一个往后的10个.暂称后十
求教:
如何判断后十的数值中,第一个不是空.就将这个值排在前十的数值后面,替代空这个字符.
并且后十的第二个值往前排,放在后十的第一位,后面的以此类推往前排.保持三部分组成格式不变
达到的效果:- 编号,79,9,29,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空,空
- 编号,224,40,155,45,空,空,空,空,空,空,34,空,空,空,空,空,空,空,空,空
- 编号,136,119,11,196,空,空,空,空,空,42,118,75,空,空,空,空,空,空,空
复制代码
作者: zhangzsky 时间: 2018-5-7 21:10
本帖最后由 zhangzsky 于 2018-5-7 22:26 编辑
标题实在不知道该怎么叫好了...望见谅
话说自己已经实现了,大致思路是先For读出了20个变量.
然后依次判断了前10每个的变量是不是空...是空就替换...一旦替换后再收拾后十个的排序...但是这样码超级的长...
作者: /zhqsystem/zhq 时间: 2018-5-8 04:06
-
- @Echo Off
- SetLocal EnableDelayedExpansion
- for /f "delims=" %%i in ('type "1.txt"')do (
- set "a=0"
- set "Error="
- for /f "tokens=11,* delims=," %%g in ("%%i")do if /i not "%%g"=="空" set "Error=1"&&set "#12=%%h"&&for %%z in (%%i)do set/a "a+=1"&&set "#!a!=%%z"
- if defined Error call:1
- if defined Error call:2
- if defined Error echo,!new!
- if not defined Error echo,%%i
- )
- pause
- goto:eof
- :1
- for /l %%n in (1,1,10)do if /i "!#%%n!"=="空" set "#%%n=!#11!"&&set "#11=空"&&goto:eof
- goto:eof
- :2
- set "new=!#1!"
- for /l %%n in (2,1,20)do set "new=!new!,!#%%n!"
- goto:eof
复制代码
作者: yhcfsr 时间: 2018-5-8 17:47
- @echo off&setlocal enabledelayedexpansion
- (for /f "tokens=1,* delims=," %%a in ('type 1.txt') do (
- set "n="
- for %%i in (%%b) do set/a n+=1&&set "_c!n!=%%i"
- if "!_c11!" equ "空" (echo;%%a,%%b) else (
- if "!_c10!" neq "空" (echo;%%a,%%b) else (
- set "i="
- for /l %%i in (10,-1,1) do if "!_c%%i!" neq "空" if not defined i set/a "i=1+%%i"
- if defined i set "_c!i!=!_c11!"&set "_c11="
- set "str="
- for /l %%i in (1,1,20) do if defined _c%%i set "str=!str!,!_c%%i!"
- echo;%%a!str!,空
- ))
- ))>out.txt
- pause
复制代码
原理说明:按行扫描,以“,”分隔建立列变量,排除首列“编号”
如果第11列为空,直接输出;
如果第11列不为空,且第10列不为空,直接输出;
非以上情况,从后向前,判断前10数据第一次出现非空数据,记录索引号,将该索引号后的“空”赋值为第11列数据,并清除第11列数据。输出该行所有数据,并在末尾添加“空”。
作者: zhangzsky 时间: 2018-5-9 13:29
谢谢,问题解决了.
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |