excel宏转txt替换强制换行符_删除Oracle导出的文本文件中的多余换行符

e59ee776fbfbd09767772c784ad8e575.png   5070427d3fae640c5400a2275aada086.png

同事说经常遇到导出的文本文件,用excel打开后有些地方自动换行了,导致错列,要手动逐行在excel中调整后才能透视,很不方便。今天这个文件比较大,里面有问题的行比较多,问我有没有办法处理。
我看了下,23M多的文本文件,初步怀疑是有手动换行符出现在不该出现的地方,即 LF,ASCII码0x0A。把文件放我电脑上,winhex打开是乱码,用notepad++打开不方便确认到底是不是换行符,视图->显示符号->显示所有字符,看到是LF,基本确定了,用UltraEdit看了下,确实是0A,确定了就想办法处理。
观察了下,每行是数据库中的一条记录,以 | 竖线分隔字段,行以 LF 结尾。有问题的行,在描述列或其它某列出现了 LF ,那就要把这些不应该出现的去掉,也就是选择性替换一些 | 为 空。肯定用正则替换啦,看上去不难,以前写过简单的正则。
查找里写 ([^|])\n ,替换里写 \1 ,so easy,替换(文件大,Notepad++花了约1分钟才替换完,真的慢),另存,搞定,导入excel看看。
咦,怎么还报错,对A列筛选下,发现有1行有问题。仔细对照原来的内容,发现是有一行没替换,这行是 | 后面跟了LF然后跟了 20位条码,这种情况也要替换掉,咋整?
再观察,发现正常的是 | 后跟 LF 再跟 7位数字的请求号,那就这样,凡是不满足 LF后面跟7位数字的,统统把 LF 干掉!
继续写正则:
\n[^(\d{7})]
先查找一下看看写的对不对,试了下,咦,不对啊,明明刚才有问题的那行就在眼前,总是提示找不到指定的字符?看来正则表达式写的不对,继续百度找资料,看了几篇,有一篇讲到了,(hello) 可以匹配 hello这个单词,但 ^(hello) 不能匹配不等于 hello的单词,原来如此。继续看,要想匹配除 hello 以外的内容,要用到

(?!pattern) 零宽负向先行断言

举例:
/^((?!hello).)+$/

由于断言 (?!hello)是不占位的,后跟的 . 在原位置匹配任意字符,再用括号将其括起来,用+重复一次或多次,前后加上^和$,若是字符串中存在hello,则匹配到h字符之前的时候,断言(?!hello)匹配失败,正则匹配结果为false, 若是字符串中不存在hello,则匹配结果是整个字符串。

实话说,我也是看的云里雾里,管他,既然有效果,我就试试,照葫芦画瓢,查找里,\n[^(\d{7})] 改成 \n(?!(\d{7}).) ,试试,连续点 查找下一个,不错,居然能正常查找到我要替换的地方,太好了,替换里写 \1 ,全部替换,反复替换到第5次,终于提示 找不到指定字符了,好,处理好了。另存,用Excel导入,正常了,不报错,不错行了。
Notepad++替换实在是慢,换UE试试?UE里要注意,默认正则是 UltraEdit 自己家的,【要换成 Perl 或 Unix 才行】,零宽负向先行断言 有点高级,不是所有正则都支持,例如 MS word 就只支持简单的正则,不支持这些。UE替换确实比notepad++快好几倍,每次点了全部替换,不到10秒就替换完了,Notepad++要大约一分钟,等的急,程序无响应。
另外,UE支持批量处理,用【搜索->在文件中替换】这个功能就行,这样一个文件夹里即使有很多文件,替换起来也省事多了。
由于样本文件涉及工作中的数据保密,此处就不贴图了,遇到或遇到过这问题的,自然知道我在说什么,没遇到过的,大概知道这样处理能解决就行,文章先收藏,用时能找到就好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Oracle命令spool可以用来将查询结果导出CSV格式的文件。具体操作步骤如下: 1. 打开SQL*Plus命令行工具,连接到Oracle数据库。 2. 输入以下命令,设置输出文件的路径和文件名: spool /path/to/output/file.csv 其,/path/to/output/是输出文件的路径,file.csv是输出文件文件名。 3. 输入查询语句,例如: SELECT * FROM table_name; 4. 输入以下命令,结束查询并将结果导出CSV文件: spool off; 5. 导出CSV文件可以在指定的输出路径到。 注意事项: - 导出CSV文件,每个字段之间用逗号分隔,每行数据以换行符结束。 - 如果查询结果包含文字符,需要设置NLS_LANG环境变量,以保证导出CSV文件文字符正确显示。 - 如果查询结果较大,可能需要设置SQL*Plus的行大小和页大小,以保证查询结果正确显示和导出。 ### 回答2: spool是Oracle SQL Developer的一个命令,允许将查询结果将结果输出到一个文件。而.csv是一种常用的数据格式,它可以用文本编辑器打开,也可以用Excel等软件进行导入导出。 在Oracle SQL Developer使用spool导出csv,可以按照如下步骤: 1. 打开Oracle SQL Developer,连接到目标数据库。 2. 在SQL Workshop选择SQL命令行或SQL脚本。 3. 输入查询语句,例如: SELECT * FROM employees; 4. 输入以下命令: SET COLSEP ',' --设置字段分隔符为逗号 SET ECHO OFF --不在输出显示spool命令 SET FEEDBACK OFF --不在输出显示行计数 SET LINESIZE 1000 --设置每行输出的最大字符数 SET PAGESIZE 0 --不分页 SET TERMOUT OFF --不向脚本输出设备输出结果 5. 输入以下命令,将查询结果输出到csv文件,并且关闭spool输出: SPOOL C:\temp\employees.csv SELECT * FROM employees; SPOOL OFF 以上命令将查询结果保存到C:\temp\employees.csv文件。 6. 通过文本编辑器或Excel等软件打开C:\temp\employees.csv文件,即可查看或编辑查询结果。 需要注意的是,使用spool导出csv文件时,需要保证每个字段都能正确地映射到csv文件的一列。如果存在字段包含逗号、换行符等特殊字符,需要进行处理。可以在sql语句使用函数来将特殊字符义或替换,例如使用REPLACE函数替换逗号。 ### 回答3: Oracle是一种关系型数据库管理系统,其命令spool可以用来导出数据到CSV文件CSV,即逗号分隔值,是一种常用的文件格式,它以逗号作为数据元素之间的分隔符,可以用于在不同的软件系统之间交换数据。 在使用Oracle命令spool导出CSV文件之前,需要先确认表需要导出的数据。可以使用SELECT语句查询所需的数据并验证其正确性。假设我们需要导出一个叫做“employees”的表的所有数据,那么命令应该是: SELECT * FROM employees; 接下来就可以将结果导出CSV文件。可以使用以下命令来开始 spool: SET colsep ',' ( 设置CSV的分隔符为逗号) SET pagesize 0 (取消默认分页,这样输出的结果就不会分页了) SET trimspool ON (去掉导出CSV文件的空格) SET linesize 1000 (设置每行输出的字符数) SET feedback OFF (关闭信息输出,避免在CSV文件输出非结果信息) SPOOL /filepath/filename.csv (指定导出CSV文件路径和文件名) SELECT * FROM employees; (查询需要导出的数据) SPOOL OFF (停止导出) 最后需要注意的是,导出CSV文件可能出现乱码问题,这是因为不同系统的编码格式不同。可以使用文本编辑器打开CSV文件并将其另存为UTF-8格式即可解决此问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值