Board logo

标题: [文本处理] 求一个文本分割的批处理 [打印本页]

作者: bakdfkuk    时间: 2009-9-22 16:44     标题: 求一个文本分割的批处理

有如下的一个1.txt文本


[2009-9-21 16:14:12]
在建立与服务器的连接时出错用( ...请教:如何。服务器的连接
[2009-9-21 16:39:17]
是变t 命令数的高效另类应用( ...请教:如何利用(服务器的连接如何利用(服
[2009-9-21 16:14:21]
在建立与服务器的连接时出错用( ...请教:如何。服务器的连接
[2009-9-21 16:39:32]
是变t 命令数的高效另类应用( ...请教:如何利用(命令数的高效另类应用( ...请教


现在希望能根据时间为标专把这个文本分成四个文本,就是第一个文本中内容是:
在建立与
服务器的连接时出错用请教:如何。服务器的连接

这样的形式,如果这个文本的名能用新文本的第一行作文件名那最好不过了.
作者: Lumiere    时间: 2009-9-22 21:18

摆脱能不能稍微专业点,文件名不能含有冒号的。你的条件达不到,考虑将冒号换成-可以。然后要注意的是楼主的样本文本里形如“[日期时间]”的行最后一字符是空格,不知是楼主疏漏还是本身那样的。我觉得是复制文本的时候的疏漏。假设最后一个字符是],而不是空格,代码如下:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.      set "str=%%a"&set "str=!str::=-!"
  4.      if "!str:~0,1!"=="[" (if "!str:~-1!"=="]" echo %%a>!str!.txt&echo !str!>temp.txt) else (
  5.      set /p n=<temp.txt
  6.      echo %%a>>!n!.txt
  7. ))
  8. del /q temp.txt
  9. pause
复制代码

作者: bakdfkuk    时间: 2009-9-23 11:13     标题: 没有成功啊

出现了找不到temp文件的提示
作者: Lumiere    时间: 2009-9-23 11:47     标题: 回复 3楼 的帖子

你讲代码复制到文本所在的文件夹下运行肯定没问题的,我自己测试过
作者: bakdfkuk    时间: 2009-9-23 15:10     标题: 难道我哪点还没有做对?怎么不成功呢?

我这还是有些不行啊,代码有些不懂,自己也不好改
作者: Lumiere    时间: 2009-9-23 15:39     标题: 回复 5楼 的帖子

我代码前面有一段内容你就没认真看。你的错误结果是因为你自己粗心。我的代码适用于文本中中括号行最后一个字符不是空格,而是]的情况,这样看来楼主的原始文本应该是空格。那么稍微修改下代码就可以,如下,楼主不要总是衣来伸手,人家给的代码不要拿来就用,起码看完前提。
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (1.txt) do (
  3.      set "str=%%a"&set "str=!str::=-!"
  4.      if "!str:~0,1!"=="[" (if "!str:~-1!"==" " echo %%a>!str!.txt&echo !str!>temp.txt) else (
  5.      set /p n=<temp.txt
  6.      echo %%a>>!n!.txt
  7. ))
  8. del /q temp.txt
  9. pause
复制代码
楼主自己对比下看两个代码有什么差别吧。
作者: terse    时间: 2009-9-23 16:35

  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%i in ('type "1.txt"') do (
  3.      if "%%i" lss "a" (set flag=i&set name=) else (
  4.         if defined flag (
  5.            if defined name (>>!name!.txt echo %%i) else (
  6.            >%%i.txt echo %%i
  7.            set name=%%i
  8.           )
  9.         )
  10.       )
  11.     )
  12. pause
复制代码

作者: Lumiere    时间: 2009-9-23 16:59     标题: 回复 7楼 的帖子

terse兄的代码不能满足楼主要求喔。
作者: keen    时间: 2009-9-23 17:28     标题: 回复 8楼 的帖子

Lumiere兄,看来是没有看楼主的附件。楼主的意思就是7楼terse兄的代码。
作者: namejm    时间: 2009-9-23 17:51

  请楼主节约论坛资源,对图片尽可能地压缩,压缩教程请看这个帖子:http://bbs.bathome.net/thread-4673-1-1.html。已经把5楼的图片压缩后重新上传。
作者: wxcute    时间: 2009-9-23 19:16     标题: 很久没写代码了,看下行不行

  1. @echo off
  2. for /f "delims=" %%t in ('type 1.txt')do (
  3.  call :PD "%%t"
  4.  setlocal enabledelayedexpansion
  5.  for /f "tokens=1*" %%i in ("!FN!.txt "%%t"")do (
  6.  endlocal
  7.   if defined FN >>%%i echo+%%t
  8.  )
  9. )
  10. goto :eof
  11. :PD
  12.  set "s=%~1"
  13.  if not defined s (set FN=&goto :eof)
  14.  if "%s:~,1%%s:~-2,1%"=="[]" (set FN=)else (
  15.   if not defined FN set FN=%~1
  16.  )
复制代码

作者: Lumiere    时间: 2009-9-23 20:17     标题: 回复 9楼 的帖子

不是吧,我看过他图片,但是没怎么看懂。我只是根据他顶楼的描述理解的。我自己测试过没有问题。但是用terse兄的代码测试似乎是以非中括号行作为文本文件名的。
作者: keen    时间: 2009-9-23 20:28     标题: 回复 12楼 的帖子

楼主的意思,不要把“【日期时间】”写到文件中,以【日期时间】下一行作为为文件名。
作者: Lumiere    时间: 2009-9-23 20:36     标题: 回复 13楼 的帖子

不是的,你们看到的事修改后的帖子,我敢肯定我看到的楼主的意思就是时间也写入。他的帖子出来的时候我刚好在线。写不写是小事,关键是文件名的命名。
作者: bakdfkuk    时间: 2009-9-23 22:36     标题: 高手们快要成功了,

我试了一下11楼的快要成功了,不过就只生成了四个文件,只分割出来了三个,7楼的把文件名都分割出来了,但是文本文件中没有具体的内容,有没有结合了这两个的呢,对于时间加不加上在前面都行的,
作者: bakdfkuk    时间: 2009-9-23 22:39     标题: 11楼的分割出来了前三段

11楼的分割出来了前三段,完全正确了,但是能不能把所有的段都分割出来呢?
作者: Lumiere    时间: 2009-9-23 22:54     标题: 回复 16楼 的帖子

我的第二个代码就没有问题,只是你没有测试而已。
作者: bakdfkuk    时间: 2009-9-23 22:56     标题: 第二个代码测试还是出现了老问题

第二个代码测试了还是出现了找不到temp.txt文件,需改进
作者: wxcute    时间: 2009-9-23 22:59     标题: 我是以一楼附件为蓝本测试的,就是这个:

1.txt(Unicode)(注意:时间后为一个 “]” 加一个 “ ” 空格。)
  1. [2009-9-22 11:01:55]
  2. ewf
  3. sadfasdfasdfasdfasdfa
  4. [2009-9-22 11:01:59]
  5. adfa
  6. sdfasdfasdfasdfa
  7. [2009-9-22 11:02:02]
  8. ewfv
  9. sadfasdfasdfasdfasdf
  10. [2009-9-22 11:02:06]
  11. dfa
  12. sdfasdfasdfasdfa
复制代码
每个时间行后面都有一空格,是不是这样呢?
======================
这里测试能生成四个文件,空行会被剔除,可兼容特殊符号。
但如果作为文件名的第一行含有不能做文件名的特殊符号时就会出错。
不知道楼主是用哪个测试的!

[ 本帖最后由 wxcute 于 2009-9-23 23:05 编辑 ]
作者: Lumiere    时间: 2009-9-23 23:02     标题: 回复 18楼 的帖子

那我就不知道为什么了,我已经按空格测试过了,在我机器上两个代码都没有问题。可能是你原始文本有出入吧。祝好运。




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