标题: [文本处理] [已解决]批处理如何将文本内容按指定行号分行? [打印本页]
作者: svh009 时间: 2023-5-13 19:48 标题: [已解决]批处理如何将文本内容按指定行号分行?
本帖最后由 svh009 于 2023-5-13 20:54 编辑
假设在1.txt中,有类似以下的数据(仅举例,数据多少不确定)。
结构类似于 序号,文本。- 0,孤勇者
- 1,人世间
- 2,从前说
- 5,错位时空
- 6,妈妈的话
复制代码
有什么方法可以将 序号+1 设置为行号,遇到缺失的空行进行填补并写入error作为文本。达到以下的效果并输出至2.txt- 0,孤勇者
- 1,人世间
- 2,从前说
- error
- error
- 5,错位时空
- 6,妈妈的话
复制代码
求大佬救救!!用别的实现也行。
作者: svh009 时间: 2023-5-13 19:49
本帖最后由 svh009 于 2023-5-13 19:51 编辑
如果去掉序号也行- 孤勇者
- 人世间
- 从前说
- error
- error
- 错位时空
- 妈妈的话
复制代码
主要是保证行号和顺序要对
作者: 77七 时间: 2023-5-13 20:25
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1* delims=," %%a in ('type "1.txt"') do (
- set /a n=%%a+1
- set #!n!=%%b
- )
- (for /l %%l in (1,1,%n%) do (
- if "!#%%l!" equ "" (
- echo error
- ) else (
- echo !#%%l!
- )
- ))>2.txt
- endlocal
- pause
复制代码
作者: qixiaobin0715 时间: 2023-5-13 20:36
本帖最后由 qixiaobin0715 于 2023-5-14 08:32 编辑
思路大概是这样,未仔细推敲:- @echo off
- set n=0
- setlocal enabledelayedexpansion
- (for /f "tokens=1* delims=," %%i in (1.txt) do (
- set /a m=%%i-n
- if !m! neq 0 (
- set /a x=%%i-m
- set /a y=%%i-1
- for /l %%a in (!x!,1,!y!) do echo,error
- )
- echo,%%i,%%j
- set /a n=%%i+1
- ))>2.txt
- pause
复制代码
代码第2行是设置初始行号,如果第一行初始数字是0就设为0,如果是1就设为1。
作者: svh009 时间: 2023-5-13 20:49
回复 3# 77七 十分感谢
作者: svh009 时间: 2023-5-13 20:52
回复 4# qixiaobin0715
十分感谢,楼上已经给出所需代码
还有这个代码运行会少掉相邻的error,导致缺失- 0,孤勇者
- 1,人世间
- 2,从前说
- error
- 5,错位时空
- 6,妈妈的话
复制代码
作者: terse 时间: 2023-5-13 20:57
看到三楼的发出来了- @echo off&setlocal enabledelayedexpansion
- for /f "tokens=1* delims=," %%i in (1.txt) do (
- set _%%i=%%j
- set n=%%i
- )
- for /l %%i in (0,1,!n!) do if defined _%%i (echo,%%i,!_%%i!) else echo,error
- pause
复制代码
作者: tmplinshi 时间: 2023-5-13 21:30
本帖最后由 tmplinshi 于 2023-5-13 21:48 编辑
- @echo off
- call :main "1.txt" > "2.txt"
- exit /b
-
- :main <inputFile>
-
- setlocal
- set "index="
-
- for /f "delims=, tokens=1,* usebackq" %%i in ("%~1") do (
-
- if not defined index (
- set /a index = %%i
- ) else (
- set /a index += 1
- )
-
- setlocal enabledelayedexpansion
- if "%%i" neq "!index!" (
- set /a indexEnd = %%i - 1
- for /l %%a in (!index!, 1, !indexEnd!) do echo error
- endlocal & set /a index = %%i
- ) else (
- endlocal
- )
-
- echo %%i,%%j
-
- )
-
- exit /b
复制代码
作者: qixiaobin0715 时间: 2023-5-14 08:35
回复 6# svh009
经检查,代码第7行和第8行变量设置忘记加参数/a,已修改。
作者: svh009 时间: 2023-5-14 10:08
回复 9# qixiaobin0715
十分感谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |