视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
ruby小记_MySQL
2020-11-09 19:22:00 责编:小采
文档


Ruby

最近在用ruby处理一些数据,这里记下ruby使用时遇到的一些问题。

功能:把更新好的sql文件导入到指定数据库,更新好后对比更新前后该表的md5值

1. 获取路径函数

1获得当前执行文件的文件名:

__FILE__

2获得当前文件的目录

File.dirname(__FILE__)

3获得当前执行文件的完整路径

require ‘pathname’

Pathname.new(__FILE__).realpath

2. 扫描文件

path扫描下的全部文件

require 'find'

Find.find(path) do |f|

使用string的函数.include对文件名进行筛选

f.include?tag #f中是否包含tag 是返回true 否返回false

不知道是我写法有误还是如何

在三个条件取并的情况下会提示出错,即使我每个条件加上括号都是提示出错最后只好这样写。

if res1 && res2 && res3

3. Ruby与mysql

鉴于只是单纯的插入数据跟提取数据就不使用mysql的api了,之前图省事觉得用个api就是顺手拈来的事情,没想到windows下转个mysql的gem是何其的难,下了mysql的gem安装会提示本地编译环境不对,需要安装DevKit,觉得过于繁琐。导入sql只要一句cmd命令就可以了,导出比较麻烦但觉得比安装api方便。虽然不知道导出的方法但是既然能输出就肯定能拿到数据。

1使用system函数执行cmd命令导入sql

command = "mysql -u #{User} -p#{Pass} #{ip} database< #{sqlList[0]}"

system(command)

#{User} -p#{Pass} #{ip} 分别为已定义的User,Pass,ip,字符串变量,sqlList[0]为sql文件名,database为数据库

2使用system函数执行cmd命令导出数据表

鉴于原来在网页的做法是获取数据表的数据按字段列排列在内存是连续的一块字符串。于是先让数据导出到文件(实在不知道怎么导出到内存)

command = "mysql -u #{User} -p#{Pass} -N-e'select * from table' database > 233.txt"

User,Pass同上 –e后面是sql语句,其它的语句也可以。table为表名,database为数据库名,233.txt为导出的文件名。

再从文件读入到内存

ifFile.exist?("233.txt")

File.open("233.txt","r") do |file|

whileline = file.gets

str+= line.gsub(/[/s]/, '') #每行对其使用正则表达式去掉空格

end

end

end

顺便mark一下正则表达式

一般规则

/a/匹配字符a。

//?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, /, [, ], {, }, (, ), +, *.

.匹配任意字符,例如/a./匹配ab和ac。

/[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-zA-Z0-9]/。

/[^a-zA-Z0-9]/匹配不在该范围内的字符串。

/[/d]/代表任意数字

/[/w]/代表任意字母,数字或者_

/[/s]/代表空白字符,包括空格,TAB和换行。

/[/D]/,/[/W]/,/[/S]/均为上述的否定情况。

高级规则

?代表0或1个字符。/Mrs?/.?/匹配"Mr","Mrs","Mr.","Mrs."。

*代表0或多个字符。/Hello*/匹配"Hello","HelloJack"。

+代表1或多个字符。/a+c/匹配:"abc","abbdrec"等等。

/d{3}/匹配3个数字。

/d{1,10}/匹配1-10个数字。

/d{3,}/匹配3个数字以上。

/([A-Z]/d){5}/匹配首位是大写字母,后面4个是数字的字符串。

4. 计算md5

require 'digest/md5'

checksum = Digest::MD5.hexdigest(str)

最后,ruby用来写快速处理数据还是很方便的,一旦有需要进行调试的时候就显得不方便,在去掉string的空格包括换行后数据输出依然有换行,计算结果还暂时不能对比不知道是否结果包含换行。也可能是我使用的方式不对……

下载本文
显示全文
专题