Board logo

标题: [文本处理] 批处理怎样把文本的每一个字符转成单独行? [打印本页]

作者: 398832385    时间: 2023-2-26 16:35     标题: 批处理怎样把文本的每一个字符转成单独行?

求大神帮忙,

把文本的每一个字符转成单独行

例,字符.txt

啊呵埃挨哎唉哀皑癌蔼矮艾碍爱隘
鞍氨安俺按暗岸胺案肮昂盎凹敖熬
翱袄傲奥懊澳芭捌扒叭吧笆八疤巴
拔靶把耙坝霸罢爸白柏百摆佰败拜
稗斑班搬扳般颁板版扮拌伴瓣半办
绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞
包褒剥薄雹保堡饱宝抱报暴豹鲍爆
杯碑悲卑北辈背贝钡倍狈备惫焙被

转换成

















……

每个文字都单独占一行
作者: 77七    时间: 2023-2-26 16:57

  1. @echo off
  2. rem 根据实际情况调整100数值
  3. for /f "delims=" %%i in ('type "字符.txt"') do (
  4. set "str=%%i"
  5. setlocal enabledelayedexpansion
  6. for /l %%l in (0,1,100) do (
  7. if not "!str:~%%l,1!" equ "" (
  8. >>字符2.txt echo,!str:~%%l,1!
  9. )
  10. )
  11. endlocal
  12. )
  13. 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

  1. 啊呵埃挨哎唉哀皑癌蔼矮艾碍爱隘
  2. 鞍氨安俺按暗岸胺案肮昂盎凹敖熬
  3. 翱袄傲奥懊澳芭捌扒叭吧笆八疤巴
  4. 拔靶把耙坝霸罢爸白柏百摆佰败拜
  5. 稗斑班搬扳般颁板版扮拌伴瓣半办
  6. 绊邦帮梆榜膀绑棒磅蚌镑傍谤苞胞
  7. 包褒剥薄雹保堡饱宝抱报暴豹鲍爆
  8. 杯碑悲卑北辈背贝钡倍狈备惫焙被
复制代码
以ANSI编码板式保存为1.txt
下载gawk( http://bcn.bathome.net/tool/4.1.3/gawk.exe ),执行:
  1. 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个字给忽略了,已修正
  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

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "filename=字符.txt"
  4. set "outputfile=output.txt"
  5. if exist "%outputfile%" del "%outputfile%"
  6. for /f "usebackq delims=" %%a in ("%filename%") do (
  7.   set "line=%%a"
  8.   for /l %%i in (0,1,!strlen!) do (
  9.     set "char=!line:~%%i,1!"
  10.     echo !char!>>"%outputfile%"
  11.   )
  12. )
  13. echo "转换完成"
  14. exit /b
  15. :: 函数:获取字符串长度
  16. :setlen
  17. setlocal
  18. set "s=!%~1!"
  19. set "len=0"
  20. for /l %%i in (0,1,32767) do if not "!s:~%%i,1!"=="" set /a "len=%%i+1"
  21. endlocal & set "%~2=%len%"
  22. 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 编辑
  1. ( Get-Content 国标.txt ) -replace "(?<=[^`n])(?=[^`n])","`n" | Out-File new.txt
复制代码





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