标题: [文本处理] 批处理怎样把文本的每一个字符转成单独行? [打印本页]
作者: 398832385 时间: 2023-2-26 16:35 标题: 批处理怎样把文本的每一个字符转成单独行?
求大神帮忙,
把文本的每一个字符转成单独行
例,字符.txt
啊呵埃挨哎唉哀皑癌蔼矮艾碍爱隘
鞍氨安俺按暗岸胺案肮昂盎凹敖熬
翱袄傲奥懊澳芭捌扒叭吧笆八疤巴
拔靶把耙坝霸罢爸白柏百摆佰败拜
稗斑班搬扳般颁板版扮拌伴瓣半办
绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞
包褒剥薄雹保堡饱宝抱报暴豹鲍爆
杯碑悲卑北辈背贝钡倍狈备惫焙被
转换成
啊
呵
埃
挨
哎
唉
哀
皑
癌
蔼
矮
艾
碍
爱
隘
鞍
……
每个文字都单独占一行
作者: 77七 时间: 2023-2-26 16:57
- @echo off
- rem 根据实际情况调整100数值
- for /f "delims=" %%i in ('type "字符.txt"') do (
- set "str=%%i"
- setlocal enabledelayedexpansion
- for /l %%l in (0,1,100) do (
- if not "!str:~%%l,1!" equ "" (
- >>字符2.txt echo,!str:~%%l,1!
- )
- )
- endlocal
- )
- pause
复制代码
这样行吗
作者: 398832385 时间: 2023-2-26 17:05
回复 2# 77七
生成的是
瀛楃2.txt
文件内的内容:
%
i
作者: 77七 时间: 2023-2-26 17:08
回复 3# 398832385
把批处理和文本都保存为ansi编码格式试试
作者: hfxiang 时间: 2023-2-26 17:56
本帖最后由 hfxiang 于 2023-2-26 19:51 编辑
回复 1# 398832385
将- 啊呵埃挨哎唉哀皑癌蔼矮艾碍爱隘
- 鞍氨安俺按暗岸胺案肮昂盎凹敖熬
- 翱袄傲奥懊澳芭捌扒叭吧笆八疤巴
- 拔靶把耙坝霸罢爸白柏百摆佰败拜
- 稗斑班搬扳般颁板版扮拌伴瓣半办
- 绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞
- 包褒剥薄雹保堡饱宝抱报暴豹鲍爆
- 杯碑悲卑北辈背贝钡倍狈备惫焙被
复制代码
以ANSI编码板式保存为1.txt
下载gawk( http://bcn.bathome.net/tool/4.1.3/gawk.exe ),执行:- gawk -vFS="" "{for(i=0;i++<NF;)print$i}" 1.txt>2.txt
复制代码
2.txt就是你想要的结果
作者: 398832385 时间: 2023-2-26 18:53
本帖最后由 398832385 于 2023-2-26 19:03 编辑
回复 4# 77七
少了一些字~总共6,688个字,转出来有6270个字
作者: 398832385 时间: 2023-2-26 19:00
回复 5# hfxiang
少了很多字~总共6,688个字,但是转出来只有5852个字
比如第一眼就看到少了最后一个字
作者: 77七 时间: 2023-2-26 19:23
回复 6# 398832385
请提供一个执行后少字的样本,要不然我也不知道错在哪里
作者: hfxiang 时间: 2023-2-26 19:54
回复 7# 398832385
抱歉,把“i++”写成“++i”了,造成每行最后1个字给忽略了,已修正- gawk -vFS="" "{for(i=0;i++<NF;)print$i}" 1.txt>2.txt
复制代码
作者: qixiaobin0715 时间: 2023-2-27 08:28
http://bbs.bathome.net/viewthrea ... B%D7%D6%D2%BB%D0%D0
作者: 398832385 时间: 2023-2-27 11:26
回复 9# hfxiang
为啥转出来是6270个字,但是我的原版里面是6688个字
作者: Batcher 时间: 2023-2-27 14:30
回复 11# 398832385
请把原始文件上传到网盘,我试试。
作者: 398832385 时间: 2023-2-28 10:27
回复 12# Batcher
链接:https://pan.baidu.com/s/1uLg_nxSNn3EzJlRgWosCGw?pwd=g43n
提取码:g43n
作者: hfxiang 时间: 2023-2-28 11:42
回复 13# 398832385
15(字/行)X(418行)=6270(字),哪来 6688 字?
作者: 帝尊 时间: 2023-2-28 13:12
- @echo off
- setlocal enabledelayedexpansion
-
- set "filename=字符.txt"
- set "outputfile=output.txt"
-
- if exist "%outputfile%" del "%outputfile%"
-
- for /f "usebackq delims=" %%a in ("%filename%") do (
- set "line=%%a"
- for /l %%i in (0,1,!strlen!) do (
- set "char=!line:~%%i,1!"
- echo !char!>>"%outputfile%"
- )
- )
-
- echo "转换完成"
-
- exit /b
-
- :: 函数:获取字符串长度
- :setlen
- setlocal
- set "s=!%~1!"
- set "len=0"
- for /l %%i in (0,1,32767) do if not "!s:~%%i,1!"=="" set /a "len=%%i+1"
- endlocal & set "%~2=%len%"
- exit /b
复制代码
首先,定义了输入文件名为字符.txt和输出文件名为output.txt。接着,使用for循环逐行读取输入文件,对于每一行,获取其长度并逐个字符处理。内部使用了一个自定义函数setlen来获取字符串长度。在内部的循环中,使用字符串切片来逐个获取字符,并将每个字符写入输出文件output.txt的一行。最后输出"转换完成",并退出脚本。
注意:如果输入文件包含 UTF-8 编码的中文字符,需要将脚本文件保存为 UTF-8 编码,并在脚本文件开头添加chcp 65001以设置命令行窗口的字符编码。
作者: 398832385 时间: 2023-2-28 14:40
回复 14# hfxiang
啊~我怎么看的是16行?
作者: newswan 时间: 2023-3-4 09:27
本帖最后由 newswan 于 2023-3-4 12:34 编辑
- ( Get-Content 国标.txt ) -replace "(?<=[^`n])(?=[^`n])","`n" | Out-File new.txt
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |