标题: [文本处理] 【已解决】批处理如何求得每行数值的未出现数? [打印本页]
作者: 思想之翼 时间: 2023-7-7 03:16 标题: 【已解决】批处理如何求得每行数值的未出现数?
本帖最后由 思想之翼 于 2023-7-7 18:10 编辑
文本记录数值为
EA=000 001
BB=002 005 006 999
...
AA=000 003 998
问题:如何求每行“=”右侧数值的未出现数(000~999)
结果为
EA=002 003...998 999
BB=000 001 003 004 007...998
...
AA=001 002 004...999
作者: qixiaobin0715 时间: 2023-7-7 09:11
- @echo off
- (for /f "tokens=1* delims==" %%a in (a.txt) do (
- setlocal enabledelayedexpansion
- for %%i in (%%b) do (
- set n=%%i
- set /a n=n
- set _!n!=true
- )
- set /p str=%%a=<nul
- for /l %%j in (0,1,999) do (
- if not defined _%%j (
- set m=00%%j
- set m=!m:~-3!
- set /p str=!m! <nul
- )
- )
- echo,
- endlocal
- ))>b.txt
- pause
复制代码
作者: qixiaobin0715 时间: 2023-7-7 09:27
突然想起前几天的一个类似的帖子中,Batcher老大说处理后行的最后面多了个逗号,2楼代码同样每行最后多出了一个空格,如果要求严谨的话可以这样:- @echo off
- (for /f "tokens=1* delims==" %%a in (a.txt) do (
- setlocal enabledelayedexpansion
- for %%i in (%%b) do (
- set n=%%i
- set /a n=n
- set _!n!=true
- )
- set /p str=%%a=<nul
- for /l %%j in (0,1,999) do (
- if not defined _%%j (
- set /p str=!m! <nul
- set m=00%%j
- set m=!m:~-3!
- )
- )
- set /p str=!m!<nul
- echo,
- endlocal
- ))>b.txt
- pause
复制代码
作者: WHY 时间: 2023-7-7 09:45
- @echo off
- setlocal enabledelayedexpansion
- for /L %%i in (1000 1 1999) do set "str=!str! %%i"
- set "str=!str: 1= !"
-
- (for /f "tokens=1* delims==" %%i in (1.txt) do (
- set "s=!str!"
- for %%k in (%%j) do set "s=!s: %%k=!"
- echo;%%i=!s:~1!
- )) > 2.txt
- pause
复制代码
作者: hfxiang 时间: 2023-7-7 11:28
回复 1# 思想之翼 - gawk -F"[ =]+" -v BINMODE="w" "BEGIN{for(i=0;i<1000;i++)a[i]=sprintf(\"\04503d\",i)}{for(i=1;i<=NF;i++)b[$i];c=$1\"=\";for(i=0;i<1000;i++)if(!(a[i] in b))c=c a[i]\" \";sub(/ $/,\"\",c);print c;delete b}" a.txt>b.txt
复制代码
作者: czjt1234 时间: 2023-7-7 16:27
建议楼主把测试后采用的最佳方案说一下
我看你好几个贴都没指出最终方案
作者: 思想之翼 时间: 2023-7-7 18:07
本帖最后由 思想之翼 于 2023-7-7 21:28 编辑
回复 6# czjt1234
您好!几个方案皆出现乱码(格式为 Windows(CRLF) UTF-16LE),正在自查原因。
作者: Batcher 时间: 2023-7-7 22:06
回复 7# 思想之翼
txt和bat都改成ANSI试试
作者: 思想之翼 时间: 2023-7-7 23:59
本帖最后由 思想之翼 于 2023-7-8 00:13 编辑
回复 8# Batcher
txt和bat的内容没有中文,UTF-8改成ANSI后保存,再次打开依然是Windows(CRLF) UTF-8格式。
奇怪啊,5#gawk方案,txt行数小于等于19行,结果正常(格式为 Unix(LF) UTF-8)。
作者: WHY 时间: 2023-7-8 07:55
回复 7# 思想之翼
你可以把测试出现乱码的 txt 文件放到网盘,分享链接,让大家帮你找原因。
作者: Batcher 时间: 2023-7-8 14:02
回复 9# 思想之翼
UTF-8改成ANSI后保存,不要再打开了,直接执行脚本
作者: czjt1234 时间: 2023-7-8 14:41
回复 9# 思想之翼
你的ANSI是啥,不会是英文系统吧
作者: 思想之翼 时间: 2023-7-8 18:09
感谢各位老师热心帮助!问题已解决。乱码原因是:各文件夹内文件多头输入,来源庞杂,格式混乱。4#5#代码简洁,速度快。3#代码速度稍逊。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |