Board logo

标题: [文本处理] [已解决]批处理如何将文本内容按指定行号分行? [打印本页]

作者: svh009    时间: 2023-5-13 19:48     标题: [已解决]批处理如何将文本内容按指定行号分行?

本帖最后由 svh009 于 2023-5-13 20:54 编辑

假设在1.txt中,有类似以下的数据(仅举例,数据多少不确定)。
结构类似于 序号,文本。
  1. 0,孤勇者
  2. 1,人世间
  3. 2,从前说
  4. 5,错位时空
  5. 6,妈妈的话
复制代码
有什么方法可以将 序号+1 设置为行号,遇到缺失的空行进行填补并写入error作为文本。达到以下的效果并输出至2.txt
  1. 0,孤勇者
  2. 1,人世间
  3. 2,从前说
  4. error
  5. error
  6. 5,错位时空
  7. 6,妈妈的话
复制代码
求大佬救救!!用别的实现也行。
作者: svh009    时间: 2023-5-13 19:49

本帖最后由 svh009 于 2023-5-13 19:51 编辑

如果去掉序号也行
  1. 孤勇者
  2. 人世间
  3. 从前说
  4. error
  5. error
  6. 错位时空
  7. 妈妈的话
复制代码
主要是保证行号和顺序要对
作者: 77七    时间: 2023-5-13 20:25

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1* delims=," %%a in ('type "1.txt"') do (
  4. set /a n=%%a+1
  5. set #!n!=%%b
  6. )
  7. (for /l %%l in (1,1,%n%) do (
  8. if "!#%%l!" equ "" (
  9. echo error
  10. ) else (
  11. echo !#%%l!
  12. )
  13. ))>2.txt
  14. endlocal
  15. pause
复制代码

作者: qixiaobin0715    时间: 2023-5-13 20:36

本帖最后由 qixiaobin0715 于 2023-5-14 08:32 编辑

思路大概是这样,未仔细推敲:
  1. @echo off
  2. set n=0
  3. setlocal enabledelayedexpansion
  4. (for /f "tokens=1* delims=," %%i in (1.txt) do (
  5.     set /a m=%%i-n
  6.     if !m! neq 0 (
  7.         set /a x=%%i-m
  8.         set /a y=%%i-1
  9.         for /l %%a in (!x!,1,!y!) do echo,error
  10.     )
  11.     echo,%%i,%%j
  12.     set /a n=%%i+1
  13. ))>2.txt
  14. pause
复制代码
代码第2行是设置初始行号,如果第一行初始数字是0就设为0,如果是1就设为1。
作者: svh009    时间: 2023-5-13 20:49

回复 3# 77七 十分感谢
作者: svh009    时间: 2023-5-13 20:52

回复 4# qixiaobin0715
十分感谢,楼上已经给出所需代码
还有这个代码运行会少掉相邻的error,导致缺失
  1. 0,孤勇者
  2. 1,人世间
  3. 2,从前说
  4. error
  5. 5,错位时空
  6. 6,妈妈的话
复制代码

作者: terse    时间: 2023-5-13 20:57

看到三楼的发出来了
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1* delims=," %%i in (1.txt) do (
  3.      set _%%i=%%j
  4.      set n=%%i
  5. )
  6. for /l %%i in (0,1,!n!) do if defined _%%i (echo,%%i,!_%%i!) else echo,error
  7. pause
复制代码

作者: tmplinshi    时间: 2023-5-13 21:30

本帖最后由 tmplinshi 于 2023-5-13 21:48 编辑
  1. @echo off
  2. call :main "1.txt" > "2.txt"
  3. exit /b
  4. :main <inputFile>
  5.     setlocal
  6.     set "index="
  7.     for /f "delims=, tokens=1,* usebackq" %%i in ("%~1") do (
  8.         if not defined index (
  9.             set /a index = %%i
  10.         ) else (
  11.             set /a index += 1
  12.         )
  13.         setlocal enabledelayedexpansion
  14.         if "%%i" neq "!index!" (
  15.             set /a indexEnd = %%i - 1
  16.             for /l %%a in (!index!, 1, !indexEnd!) do echo error
  17.             endlocal & set /a index = %%i
  18.         ) else (
  19.             endlocal
  20.         )
  21.         echo %%i,%%j
  22.     )
  23.     exit /b
复制代码

作者: qixiaobin0715    时间: 2023-5-14 08:35

回复 6# svh009
经检查,代码第7行和第8行变量设置忘记加参数/a,已修改。
作者: svh009    时间: 2023-5-14 10:08

回复 9# qixiaobin0715
十分感谢




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2