欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

ruby小记_MySQL

程序员文章站 2022-03-28 20:48:18
...
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

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的空格包括换行后数据输出依然有换行,计算结果还暂时不能对比不知道是否结果包含换行。也可能是我使用的方式不对……