Board logo

标题: [文本处理] 【已解决】批处理取文本第一行,然后取出每一行文本中a 的个数 [打印本页]

作者: qw123456    时间: 2024-8-29 10:55     标题: 【已解决】批处理取文本第一行,然后取出每一行文本中a 的个数

我想打开1.txt。并统计每一行a的个数
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :: 逐行读取1.txt文件并统计每行中A的个数
  4. for /f "delims=" %%a in (1.txt) do (
  5.     set "line=%%a"
  6.     set "count=0"
  7.     :: 使用for循环和参数修饰符来统计A的个数
  8.     for /f "delims=" %%i in ('echo !line! | findstr /r /i /c:"A"') do set /a count+=1
  9.     echo !count!
  10. )
  11. endlocal
复制代码
不运行不知道为什么,哪位指导一下
作者: qixiaobin0715    时间: 2024-8-29 11:46

本帖最后由 qixiaobin0715 于 2024-8-29 12:22 编辑

开始想错了,以为是统计文本中所有a的数量。已修改。
不区分大小写。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%i in (1.txt) do (
  4.     set n=-1
  5.     set "Line="#%%i#""
  6.     set "Line=!Line:a=" "!"
  7.     for %%j in (!line!) do set /a n+=1
  8.     echo,!n!
  9. )
  10. pause
复制代码

作者: aloha20200628    时间: 2024-8-29 11:56

本帖最后由 aloha20200628 于 2024-8-29 12:20 编辑

回复 1# qw123456

逐行读取1.txt文件并统计每行中包含字符 a 的个数(不区分大小写)
  1. @echo off &setlocal
  2. for /f "delims=" %%a in (1.txt) do (
  3. echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
  4. setlocal enabledelayedexpansion &set "s=%%a" &set "s=!s:a=!"
  5. echo,!s!>0.0&for %%v in (0.0) do set "v2=%%~zv"
  6. set/a "v=v1-v2" &echo,本行包含字符 a 的数量 = !v!&endlocal
  7. )
  8. 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/
  1. @echo off &setlocal
  2. for /f "delims=" %%a in (1.txt) do (
  3. echo,%%a>0.0&for %%v in (0.0) do set "v1=%%~zv"
  4. echo,%%a|sed "s/a//g">0.0&for %%v in (0.0) do set "v2=%%~zv"
  5. for /f %%v in ('set/a v1-v2') do (echo,本行包含字符 a 的数量 = %%v)
  6. )
  7. 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
  1. gc '1.txt' |where {$_} |foreach {[regex]::matches($_,'(?i)A').count}
复制代码

作者: 77七    时间: 2024-8-29 14:44

  1. @echo off
  2. call :1
  3. cd /d "%~dp0"
  4. for /f "tokens=1* delims=[]" %%a in ('find /n "a" ^<"1.txt"') do (
  5. set str=%%b
  6. setlocal enabledelayedexpansion
  7. set "$1=!$!!str!!str!!str!"
  8. set "$2=!$!!str:a=!!str:a=!!str:a=!"
  9. set /a len=0x!$1:~-3840,3!-0x!$2:~-3840,3!
  10. echo line:%%a count:!len!
  11. endlocal
  12. )
  13. pause
  14. exit
  15. :1
  16. rem "http://www.bathome.net/redirect.php?goto=findpost&ptid=11799&pid=210336"
  17. setlocal enabledelayedexpansion
  18. set a=□0□1□2□3□4□5□6□7□8□9□A□B□C□D□E□F
  19. set b=□0□1□2□3□4
  20. set d=!%a:□=!!a:□=□%!
  21. set $=!%b:□=!!d:□=%!
  22. endlocal & set $=%$%
  23. 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