标题: [文本处理] 【已解决】批处理取文本第一行,然后取出每一行文本中a 的个数 [打印本页]
作者: qw123456 时间: 2024-8-29 10:55 标题: 【已解决】批处理取文本第一行,然后取出每一行文本中a 的个数
我想打开1.txt。并统计每一行a的个数- @echo off
- setlocal enabledelayedexpansion
-
- :: 逐行读取1.txt文件并统计每行中A的个数
- for /f "delims=" %%a in (1.txt) do (
- set "line=%%a"
- set "count=0"
- :: 使用for循环和参数修饰符来统计A的个数
- for /f "delims=" %%i in ('echo !line! | findstr /r /i /c:"A"') do set /a count+=1
- echo !count!
- )
-
- endlocal
复制代码
不运行不知道为什么,哪位指导一下
作者: qixiaobin0715 时间: 2024-8-29 11:46
本帖最后由 qixiaobin0715 于 2024-8-29 12:22 编辑
开始想错了,以为是统计文本中所有a的数量。已修改。
不区分大小写。- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in (1.txt) do (
- set n=-1
- set "Line="#%%i#""
- set "Line=!Line:a=" "!"
- for %%j in (!line!) do set /a n+=1
- echo,!n!
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-8-29 11:56
本帖最后由 aloha20200628 于 2024-8-29 12:20 编辑
回复 1# qw123456
逐行读取1.txt文件并统计每行中包含字符 a 的个数(不区分大小写)
- @echo off &setlocal
- for /f "delims=" %%a in (1.txt) do (
- echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
- setlocal enabledelayedexpansion &set "s=%%a" &set "s=!s:a=!"
- echo,!s!>0.0&for %%v in (0.0) do set "v2=%%~zv"
- set/a "v=v1-v2" &echo,本行包含字符 a 的数量 = !v!&endlocal
- )
- del/q "0.0"&endlocal&pause&exit/b
复制代码
作者: aloha20200628 时间: 2024-8-29 12:16
本帖最后由 aloha20200628 于 2024-8-29 12:28 编辑
回复 1# qw123456
逐行读取1.txt文件并统计每行中包含字符 a 的个数(区分大小写)
再给一个区分大小写的版本,须下载 sed.exe 支持(可从本论坛第三方直接下载》http://bcn.bathome.net/)
- @echo off &setlocal
- for /f "delims=" %%a in (1.txt) do (
- echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
- echo,%%a|sed "s/a//g">0.0&for %%v in (0.0) do set "v2=%%~zv"
- for /f %%v in ('set/a v1-v2') do (echo,本行包含字符 a 的数量 = %%v)
- )
- del/q "0.0"&endlocal&pause&exit/b
复制代码
作者: qixiaobin0715 时间: 2024-8-29 12:31
回复 1# qw123456
http://bbs.bathome.net/thread-963-1-1.html
作者: aloha20200628 时间: 2024-8-29 13:04
回复 2# qixiaobin0715
如源文件中有被双引号包裹的字段,典型格式如 *.csv 文本行,例如:
"qwe",00,"A",23,"a",45
"a",45,"zxc",22
"asd",11,"aa",34
"AA",33
"xyz",89
二楼代码将会刷零...
作者: qixiaobin0715 时间: 2024-8-29 14:03
回复 6# aloha20200628
确实存在这个问题。
作者: qw123456 时间: 2024-8-29 14:21
回复 5# qixiaobin0715
不知道在哪儿改啊
作者: qixiaobin0715 时间: 2024-8-29 14:26
回复 8# qw123456
1楼下面点击“编辑”。进入修改页面。
作者: Five66 时间: 2024-8-29 14:37
powershell
忽略空行,忽略大小写
1.txt编码ansi/gbk- gc '1.txt' |where {$_} |foreach {[regex]::matches($_,'(?i)A').count}
复制代码
作者: 77七 时间: 2024-8-29 14:44
- @echo off
- call :1
- cd /d "%~dp0"
- for /f "tokens=1* delims=[]" %%a in ('find /n "a" ^<"1.txt"') do (
- set str=%%b
- setlocal enabledelayedexpansion
- set "$1=!$!!str!!str!!str!"
- set "$2=!$!!str:a=!!str:a=!!str:a=!"
- set /a len=0x!$1:~-3840,3!-0x!$2:~-3840,3!
- echo line:%%a count:!len!
- endlocal
- )
- pause
- exit
-
- :1
- rem "http://www.bathome.net/redirect.php?goto=findpost&ptid=11799&pid=210336"
- setlocal enabledelayedexpansion
- set a=□0□1□2□3□4□5□6□7□8□9□A□B□C□D□E□F
- set b=□0□1□2□3□4
- set d=!%a:□=!!a:□=□%!
- set $=!%b:□=!!d:□=%!
- endlocal & set $=%$%
- exit /b
复制代码
作者: qw123456 时间: 2024-8-29 14:46 标题: RE: 取文件的每一行,然后想取出中间文本求助
本帖最后由 qw123456 于 2024-8-29 14:49 编辑
我想取文本两个字符中间的文本 ,能不能给看看不知道怎么写!!
@echo off &setlocal
for /f "delims=" %%a in (urls.txt) do (
echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
setlocal enabledelayedexpansion &set "s=%%a" &set "s=!s:\=!"
echo,!s!>0.0&for %%v in (0.0) do set "v2=%%~zv"
set/a "v=v1-v2"
set/a "we=v-1"
set/a "we2=v-1"
set "line=%%a"
for /f "tokens=%we%,%we2% delims=\" %%a in ("%line%") do (
set "middlePart=%%b")
endlocal
)
del/q "0.0"&endlocal&pause&exit/b
pause
作者: qixiaobin0715 时间: 2024-9-4 10:39
抛开楼主的真实需求,就按1楼的描述,11楼代码考虑到存在空行的问题(真实文本存在空行还是比较常见的),较为全面。
作者: 77七 时间: 2024-9-4 11:30
回复 13# qixiaobin0715
谢谢大佬认可!
再看11楼代码,我发现一个问题,既然使用了替换,假设了不区分大小写,find 也应该不区分大小写,疏忽了这一点。
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |