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

[文本处理] [已解决]批处理怎样把不以引号开头的行合并到上一行行尾?

[复制链接]
 楼主| 发表于 2015-11-18 17:42:39 | 显示全部楼层
回复 44# CrLf

1L情况已更新~

还有你这代码能直接在bat里面执行吗? 支持win7 和win2003吗
发表于 2015-11-18 18:05:29 | 显示全部楼层
回复 46# qq253040425


    忘了加上输出,已修改
    我猜是通用的,你自己试试就知道了
发表于 2015-11-18 18:40:08 | 显示全部楼层
你确认一下规范的文件是不是都是64列。每行63个逗号。最后一列是不是日期。
 楼主| 发表于 2015-11-18 18:47:59 | 显示全部楼层
回复 48# 依山居

并不是 - - 数据库里面每张表字段的数量都不一样的,

现在能控制的就是最后一列是字符串,也就是导出来的文件正常情况下每一行肯定是以"结尾
 楼主| 发表于 2015-11-18 18:55:42 | 显示全部楼层
回复 47# CrLf

...!!!!!! 好厉害。。反正我自己机器上是有效,我试了几种情况都能处理!求讲解

明天再去win2003上看看
发表于 2015-11-18 19:12:47 | 显示全部楼层
回复 50# qq253040425


    你也是会python的啊,没学过正则表达式吗
 楼主| 发表于 2015-11-18 19:22:38 | 显示全部楼层
回复 51# 依山居

我能说我是昨天才知道有python吗 - -
发表于 2015-11-18 19:31:13 | 显示全部楼层
回复 52# qq253040425


    总之NB。
 楼主| 发表于 2015-11-18 20:22:00 | 显示全部楼层
回复 53# 依山居

python有一种情况没处理的了,看1L~
 楼主| 发表于 2015-11-18 20:23:33 | 显示全部楼层
回复 44# CrLf

  1. 1>1/* :
  2. @echo off
  3. set foldername=F:\BAT\tt
  4. for /f "delims=" %%a in ('dir /b /a-d /o-d "%foldername%\*.del"') do (  
  5. cscript -nologo -e:jscript "%~0" <%%a >b.del
  6. rm %%a
  7. move b.del %%a
  8. )
  9. */
  10. WSH.Echo(
  11.    WSH.StdIn.ReadAll().replace(
  12.       /"[^"]*"/g,
  13.       function($0){
  14.          return $0.replace(/\r?\n/g,'')
  15.       }
  16.    )
  17. )
复制代码
处理指定文件夹下的所有del文件~    报告  216M的文件没问题,1.7G的文件报错了~
发表于 2015-11-18 20:27:59 | 显示全部楼层
回复 55# qq253040425


    你的机器可用内存是多少。需要处理的文件最大到多少G?
如果有条件当然是推荐你上64位,有大内存的电脑处理。
发表于 2015-11-18 20:47:19 | 显示全部楼层
本帖最后由 依山居 于 2015-11-19 16:12 编辑

我也上个正则表达式的版本。
考虑了可能有三种换行符号组合问题。
  1. """
  2. python正则处理DEL文件换行问题
  3. http://www.bathome.net/thread-38164-1-1.html
  4. 依山居 20:38 2015/11/18
  5. 参考了网上的资料,python 读取文件默认使用通用模式,不管\r\n都会被转换成\n
  6. 所以正则可以简化(\n),预计可以小幅提高处理速度
  7. """
  8. import re
  9. import time
  10. start=time.time()

  11. of="a.txt"
  12. rec=re.compile('("?)(\n)([^"])')
  13. with open(of) as f:
  14.     txt=f.read()
  15.     res=re.sub(rec,r'\1\3',txt)
  16.     f.close()

  17. with open("out.txt","w+") as f:
  18.     f.write(res)
  19.     f.close()

  20. end=time.time()
  21. pt=end-start
  22. print("运行耗时:",pt)
  23. try:
  24.     input("按回车退出")
  25. except SyntaxError:
  26.     pass

复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2015-11-18 21:02:31 | 显示全部楼层
回复 56# 依山居


    我本机是64位+8G的内存  要处理的文本文件,目前来看 没有超过2G的...

    python没有出现过因为文件太大报错的事,现在是BAT+JS出现
 楼主| 发表于 2015-11-18 21:08:15 | 显示全部楼层
回复 57# 依山居

源文件
"1","12","123","","
2015-10-31",
"1","12","123","","",
输出的文件
"1","12","123","",015-10-31",
"1","12","123","","",

wrong~
发表于 2015-11-18 21:10:53 | 显示全部楼层
本帖最后由 CrLf 于 2015-11-18 21:12 编辑

回复 55# qq253040425


    整个文件太大,那就逐行处理,换个思路,通过计算有几个 " 号来判断是否在引号内,JS 部分修改如下:

  1. var flag = false
  2. var arr = []

  3. ReadNextLine: while(!WSH.StdIn.AtEndOfStream){
  4.    var line = WSH.StdIn.ReadLine()
  5.    arr.push(line)

  6.    line.replace(/"/g,function(){flag=!flag})
  7.    if(flag&&!WSH.StdIn.AtEndOfStream) continue ReadNextLine

  8.    WSH.Echo(arr.join(''))
  9.    arr = []
  10. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 20:52 , Processed in 0.020898 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表