标题: [文本处理] 批处理如何判断每行开头字符并在最前面添加对应字符? [打印本页]
作者: wh123wh123 时间: 2023-2-25 20:35 标题: 批处理如何判断每行开头字符并在最前面添加对应字符?
本帖最后由 wh123wh123 于 2023-2-25 21:11 编辑
批处理如何判断文本文件A.txt里每行开头字符是否为关键词词并在其最前面添加对应的字符?
当该行内容最前面的字符为"FD"则在前面添加字符“8”
当该行内容最前面的字符为"k"则在前面添加字符“90”
当该行内容最前面的字符为“4”则在前面添加字符“0”,
当该行内容最前面的字符为“04”则在前面添加字符“0”,
例如A.txt内容如下:
4士大夫0 幅度是否 39239 23
FDDsdfsdf 分割地方 23232 4343443
0483728281922 33 401 0.9
KKJEsW 23 543123 554
处理并输出到B.txt后如下:
04士大夫0 幅度是否 39239 23
8FDDsdfsdf 分割地方 23232 4343443
00483728281922 33 401 0.9
90KKJEsW 23 543123 554
求完整批处理代码,谢谢老师
作者: 77七 时间: 2023-2-25 21:47
- @echo off
- for /f "delims=" %%a in ('type "A.txt"^| findstr /n .*') do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- set n=
- if /i "!str:~0,2!" equ "FD" (
- set n=1 & echo 8!str!
- )
- if /i "!str:~0,1!" equ "k" (
- set n=1 & echo 90!str!
- )
- if /i "!str:~0,1!" equ "4" (
- set n=1 & echo 0!str!
- )
- if /i "!str:~0,2!" equ "04" (
- set n=1 & echo 0!str!
- )
- if not defined n echo,!str!
- endlocal
- )>>B.txt
- pause
复制代码
作者: qixiaobin0715 时间: 2023-2-26 09:16
本帖最后由 qixiaobin0715 于 2023-2-26 10:03 编辑
2楼代码已解决,试试别的思路。纯属练手,不必评分。- @echo off
- setlocal enabledelayedexpansion
- set /a #k=90,#4=0,#FD=8,#04=0
- (for /f "delims=" %%i in (A.txt) do (
- set str=%%i
- set str1=#!str:~,1!
- set str2=#!str:~,2!
- set /a "num1=#!str:~,1!","num2=#!str:~,2!"
- if defined !str2! (
- echo,!num2!%%i
- ) else if defined !str1! (
- echo,!num1!%%i
- ) else (
- echo,%%i
- )
- ))>B.txt
- pause
复制代码
作者: qixiaobin0715 时间: 2023-2-27 16:11
世上哪有完全通用的东西?具体问题具体分析而已。上面代码只是对要添加的字符是数字才有用,否则就要想别的办法。
作者: Batcher 时间: 2023-2-27 16:26
回复 2# 77七
改成 if ... else if ... 可以减少重复执行的次数
作者: 77七 时间: 2023-2-27 18:53
本帖最后由 77七 于 2023-2-27 18:56 编辑
回复 5# Batcher
谢谢站长指点!- @echo off
- for /f "delims=" %%a in ('type "A.txt"^| findstr /n .*') do (
- set "str=%%a"
- setlocal enabledelayedexpansion
- set "str=!str:*:=!"
- if /i "!str:~0,2!" equ "FD" (
- echo 8!str!
- ) else if /i "!str:~0,1!" equ "k" (
- echo 90!str!
- ) else if /i "!str:~0,1!" equ "4" (
- echo 0!str!
- ) else if /i "!str:~0,2!" equ "04" (
- echo 0!str!
- ) else (
- echo,!str!
- )
- endlocal
- )>>B.txt
- pause
复制代码
作者: aloha20200628 时间: 2023-2-27 22:56
本帖最后由 aloha20200628 于 2023-2-27 23:40 编辑
头部字段要适应不同字符和不同位数,须先建立一个类似字典的数表,如脚本代码中的listH变量值
其字典表结构:头部字段#前缀字段#头部字段位数 ...
其中分隔符#可选不常用的字符,但不能是for-in()默认的分隔符(空格逗号分号)
试试吧...
- @echo off
- set "listH=4#0#1 FD#8#2 04#0#2 K#90#1"
- setlocal enabledelayedexpansion
- (for /f "delims=" %%s in (a.txt) do (
- set "str=%%s" &set "got=0"
- for %%F in (%listH%) do (
- for /f "tokens=1-3 delims=#" %%1 in ("%%~F") do (
- if "!str:~,%%3!"=="%%1" (set "got=1" &echo,%%2%%s)
- )
- )
- if !got! equ 0 (echo,%%s)
- ))>b.txt
- endlocal &exit/b
复制代码
作者: aloha20200628 时间: 2023-2-27 23:45
备注》7楼代码已订正。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |