[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 aloha20200628 于 2024-4-22 11:27 编辑

回复 1# meiszp

采用 for 循环读取文本文件会自动剔除空行,因此直接用 set/a n+=1 判断会错行,建议采用skip参数直接跳到目标行n-1。
即便如此,skip之后仍不能及时退出循环而导致反复空读,尤其是当其后有较多文本行时,故此法效率就很低...
建议用以下代码可明显提效,原因是其一能实现及时退出for循环,其二是skip参数会计入空行,其实在楼主前帖 http://www.bathome.net/viewthrea ... ghlight=&page=1 14楼代码中已用过此法...
  1. (call :getN "1-1.txt" 5 nF)
  2. ren "1-1.txt" "%nF%.txt"
  3. :getN
  4.    if %~2 equ 1 for /f "usebackq delims= " %%a in ("%~1") do (set "%~3=%%a"&exit/b)
  5.    set/a "n=%~2-1"
  6.    for /f "usebackq skip=%n% tokens=1 delims= " %%a in ("%~1") do (set "%~3=%%a"&exit/b)
  7.    exit/b
复制代码

TOP

本帖最后由 aloha20200628 于 2024-4-22 14:46 编辑

回复 7# meiszp

以下代码用楼主提供的示例文件测试通过...
  1. @echo off
  2. (call :getN "1-1.txt" 5 nF)
  3. ren "1-1.txt" "%nF%.txt"
  4. exit/b
  5. :getN
  6. if %~2 equ 1 for /f "usebackq delims= " %%s in ("%~1") do (set "%~3=%%s"&exit/b)
  7. set/a "n=%~2-1"
  8. for /f "usebackq skip=%n% delims= " %%s in ("%~1") do (set "%~3=%%s"&exit/b)
  9. exit/b
复制代码
1

评分人数

TOP

回复 12# meiszp

很棒!调整getN子过程中的 skip/tokens/delims/... 切割器,完美实现个性化需求
纯P代码中类似getN方法的主要优势就是能 “及时退出循环”,在此前提下没有多余的系统开销,一步到位,尤其是从大体量文本文件中提取部分数据时其功效更加明显...

TOP

返回列表