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

[文本处理] [已解决]BAT查找没有处理过的文件,进行插入一行,替换引号为换行符,删除指定行

1、插入首行,指定内容为code,name,description,market,suggestion,closing_price,price,exchange rate,price earnings ratio,the main cost,institutional participation
2、把‚替换为,
3、把","替换为换行符,就是换一行
4、删除含有[标签:内容]这样内容的整行,包括结束符,就是这一整行都不要了。

我把要处理的文件,及处理好的文件放上来。

如果已经插入过首行的就表示已经处理过了,就跳过。因为文件夹内会不断的加入这种需要处理的文件。
处理过后别打开看是乱码。

TOP

本帖最后由 bailong360 于 2015-6-10 16:20 编辑
  1. @sed -i "/price earnings ratio/n;t;/\",\"/ s//\n/g;/&sbquo\;/ s//,/g;/\[.*:.*\]/d;1i code,name,description,market,suggestion,closing_price,price,exchange rate,price earnings ratio,the main cost,institutional participation" *.txt
复制代码
http://batch-cn.qiniudn.com/tool/sed.exe
话说郁闷啊,sed在我电脑上运行地好慢,竟然好好几秒,相比之下ssed就快多了
但是ssed的-i参数竟然不起作用....
===============
貌似版本问题,于是将其回滚到4.0.7版,速度快多了

TOP

额,有特殊字符。不会处理,等高手帮忙。

TOP

回复 3# bailong360


    sed好强大啊,求教程。

TOP

回复 5# 437153
sed的教程网上一搜就是一堆呢

TOP

这样效率能提高点不
  1. @if(0)==(0) echo off
  2. set str="code,name,description,market,suggestion,closing_price,price,exchange rate,price earnings ratio,the main cost,institutional participation"
  3. dir /b *.txt | cscript -nologo -e:jscript %0 %str%
  4. pause & exit
  5. @end
  6. var fso = new ActiveXObject("Scripting.FileSystemObject");
  7. var s = WScript.Arguments.Item(0);
  8. var re = new RegExp("^" + s, "i");
  9. var reg = /.*\[标签:内容\].*/g;
  10. var fso = new ActiveXObject("Scripting.FileSystemObject");
  11. while (!WScript.StdIn.AtEndOfStream){
  12.     var filename = WScript.StdIn.Readline();
  13.     var text = adoLoadText(filename, 'UTF-8').replace(/\r?\n/ig,'');
  14.     while (!(re.test(text))){
  15.        text = s + "\r\n" + text.replace(/&sbquo/ig,',').replace(/","/ig,'\r\n').replace(reg,'');
  16.        TextToFile(text, filename);
  17.     }
  18. }
  19. function adoLoadText(filename, charset) {
  20.     var fs, text;
  21.     fs = new ActiveXObject("ADODB.Stream");
  22.     fs.type = 2;
  23.     fs.charset = charset;
  24.     fs.open();
  25.     fs.loadFromFile(filename);
  26.     text = fs.readText(-1);
  27.     fs.close();
  28.     return text;
  29. }
  30. function TextToFile(text, filename) {
  31.     var fs = new ActiveXObject("Adodb.Stream");
  32.     fs.Charset = 'UTF-8';
  33.     fs.Open();
  34.     fs.WriteText(text);
  35.     fs.SaveToFile(filename, 2);
  36.     fs.Close();
  37. }
复制代码
1

评分人数

    • idctop: 非常有效果,不会出现乱码,处理过的文件不 ...技术 + 1

TOP

回复 7# terse

非常有效,达到目的了。就是处理后最末尾一行,有个结束符占据了一行,这个是删除含有[标签:内容]这样内容整行出现的,文字内容是删除掉了,但是还留下了个结束符占据了一行。我想要整行的不要,包括结束符。
如果这个结束符不影响自动导入数据库,不处理也没事。但是从技术角度我挺想知道的。

能否在文件处理后导入mysql数据库一次呢?我现在是用Navicat Premium手动导入的。我想每个文件处理后导入一次,同样不重复导入。
本地数据库 主机名:127.0.0.1  端口:3306  用户名:root密码:123456 数据库名:gupiao 表名:sszjlx
表字段和处理后的文件是相同的,就是多了个id 这个id是int类型 自动增长的 主键。

TOP

回复 8# idctop
改十五行为
  1. text = s + "\r\n" + text.replace(/&sbquo/ig,',').replace(/","/ig,'\r\n').replace(reg,'').replace(/^\s*$/mg,'');
复制代码
没搞过数据库 不熟悉这块

TOP

回复 9# terse

关于数据库,如果我找到相应的代码,插入到你的代码段中,插入在什么位置?第几行啊?

TOP

回复 10# idctop
看什么语言  mysql 你看下数据导入功能

TOP

TOP

回复 8# idctop

在 7 楼基础上加入了 mysql 导入代码, 注意 BAT 文件保存为 ANSI 编码, 经测试 "[标签:内容]这样内容整行" 是完全可以正常过滤掉的.

这一部分的字母大小写不要修改
  1. mysql -h127.0.0.1 -P3306 -uroot -p123456 -Dgupiao -e
复制代码
完全代码
  1. @if(0)==(0) echo off
  2. set str="code,name,description,market,suggestion,closing_price,price,exchange rate,price earnings ratio,the main cost,institutional participation"
  3. dir /b *.txt | cscript -nologo -e:jscript %0 %str%
  4. for /f "delims=" %%a in ('dir /b *.txt') do (
  5. echo %%a
  6. mysql -h127.0.0.1 -P3306 -uroot -p123456 -Dgupiao -e "LOAD DATA LOCAL INFILE '%%a' INTO TABLE `sszjlx` FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (`code`, `name`, `description`, `market`, `suggestion`, `closing_price`, `price`, `exchange rate`, `price earnings ratio`, `the main cost`, `institutional participation`);"
  7. )
  8. pause & exit
  9. @end
  10. var fso = new ActiveXObject("Scripting.FileSystemObject");
  11. var s = WScript.Arguments.Item(0);
  12. var re = new RegExp("^" + s, "i");
  13. var reg = /.*\[标签:内容\].*/g;
  14. var fso = new ActiveXObject("Scripting.FileSystemObject");
  15. while (!WScript.StdIn.AtEndOfStream){
  16.     var filename = WScript.StdIn.Readline();
  17.     var text = adoLoadText(filename, 'UTF-8').replace(/\r?\n/ig,'');
  18.     while (!(re.test(text))){
  19.        text = s + "\r\n" + text.replace(/&sbquo/ig,',').replace(/","/ig,'\r\n').replace(reg,'');
  20.        TextToFile(text, filename);
  21.     }
  22. }
  23. function adoLoadText(filename, charset) {
  24.     var fs, text;
  25.     fs = new ActiveXObject("ADODB.Stream");
  26.     fs.type = 2;
  27.     fs.charset = charset;
  28.     fs.open();
  29.     fs.loadFromFile(filename);
  30.     text = fs.readText(-1);
  31.     fs.close();
  32.     return text;
  33. }
  34. function TextToFile(text, filename) {
  35.     var fs = new ActiveXObject("Adodb.Stream");
  36.     fs.Charset = 'UTF-8';
  37.     fs.Open();
  38.     fs.WriteText(text);
  39.     fs.SaveToFile(filename, 2);
  40.     fs.Close();
  41. }
复制代码

TOP

本帖最后由 idctop 于 2015-6-11 19:37 编辑

回复 13# aa77dd@163.com

不行的。
'mysql' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

我把mysql绝对路径填上去后 提示输入密码。
然后就报错。
ERROR 1049 (42000): Unknown database '123456'

TOP

本帖最后由 aa77dd@163.com 于 2015-6-11 19:33 编辑

回复 14# idctop

你没有安装 mysql 吗? 或者 path 变量里没有加入对应的目录

mysql 下载地址:
http://dev.mysql.com/get/Downloads/MySQLInstaller/mysql-installer-community-5.6.25.0.msi

那么你就把 mysql 安装并且找到 mysql.exe 所在的目录:
假定你安装了 5.6 版, 并且安装时用的默认路径, 那么会是如下的:
对 32 位 XP, WIN7:
  1. "%ProgramFiles%\MySQL\MySQL Server 5.6\bin\mysql.exe"
复制代码
对 64 位 WIN7:
  1. "%ProgramFiles(x86)%\MySQL\MySQL Server 5.6\bin\mysql.exe"
复制代码
弄清那个全路径是怎样的, 并且用它替换 第 7 行开头的 mysql   注意如果路径中有空格, 那么必须用双引号对括起来

TOP

返回列表