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

[文本处理] BAT如何处理txt文件每隔两行空一行?

各位大大,大家好!最近在忙着整理一些外语学习资料,然后准备用作字典学习,做成babylon的格式。里面就牵涉到一点,如何将合并在一块的文字分开,要求是,每隔两行空一行,如。
原来:
accident
n.意外遭遇,事故;意外(因素)
across
prep.横过,越过;在的对面 ad.横过,穿过
active
adj.活跃的,敏捷的,积极的;在活动中的
advertise
vt.公告,公布;为...做广告 vi.登广告
after
prep.在...以后;在...后面 adv.以后,后来

经过处理:
accident
n.意外遭遇,事故;意外(因素)

across
prep.横过,越过;在的对面 ad.横过,穿过

active
adj.活跃的,敏捷的,积极的;在活动中的

advertise
vt.公告,公布;为...做广告 vi.登广告

after
prep.在...以后;在...后面 adv.以后,后来。

本人使用了网上一位大大的代码,只不过这个代码好像有一个bug,对于一般长度的词条可以很好处理,就是对于词条特别特别长的解释,这代码就直接删去了这行,导致了无法高质量地完成字典制作的过程。我把代码贴出,也希望各位大大看一下,如何才能处理特别特别长的词条。
  1. @echo off&setlocal enabledelayedexpansion
  2. set/p file=拖入文件并回车:
  3. set/p count=输入每隔多少行插入:
  4. set/p blank=输入插入多少行:
  5. set n=&set m=
  6. (for /f "usebackq delims=" %%a in ("%file%") do (
  7.   echo,%%a
  8.   set/a n+=1,m=n%%count
  9.   if !m! equ 0 for /l %%b in (1 1 %blank%) do echo,
  10. ))>new.txt
复制代码
谢谢各位的解答了,小弟不胜感激!

请把那个代码无法处理的超长词条贴出来看看

TOP

特别长的解释是否可能出现三行的情况

TOP

如果仅用批处理而不借助第三方命令行工具的话
至少会遇到两个问题:
1.无法处理超长行(貌似不能超过8192个字符?)
2.特殊字符难以准确输出,例如<、>之类的
最好配合其他命令行工具
推荐使用Windows下的gsed.exe
演示代码:
  1. @echo off
  2. set/p file=拖入文件并回车:
  3. set/p count=输入每隔多少行插入:
  4. set/p blank=输入插入多少行:
  5. for /l %%i in (2,1,%count%) do call set lines=N;%%lines%%
  6. for /l %%i in (1,1,%blank%) do call set blanklines=G;%%blanklines%%
  7. sed -n "{%lines% %blanklines% p}" a.txt>b.txt
  8. start b.txt
复制代码
待处理的文本文件为 a.txt ,结果保存为 b.txt

sed.exe 按照这个帖子的提示进行下载,与*.cmd文件保存在同一目录下使用
http://www.bathome.net/thread-16975-1-1.html
尺有所短寸有所长,学好批处理没商量;
考虑问题复杂化,解决问题简洁化。

心在天山,身老沧州。

TOP

本帖最后由 batman 于 2013-1-17 10:51 编辑

这种事还是让vbs来做:
  1. Dim objFSO, ReadStr
  2. Set objFSO = CreateObject("Scripting.FileSystemObject")
  3. ReadStr = objFSO.OpenTextFile("a.txt").ReadAll()
  4. Dim Arr, SubStr, objStr, NewLine
  5. Arr = Split(ReadStr, vbCrLf)
  6. For Each SubStr In Arr
  7.   i = i + 1
  8.   j = i Mod 2
  9.   objStr = objStr & SubStr & vbCrLf
  10.   If j = 0 Then objStr = objStr & vbCrLf
  11. Next
  12. objFSO.OpenTextFile("a.txt", 2, True).Write objStr
  13. Set objFSO = Nothing
复制代码
***共同提高***

TOP

返回列表