ruby的文件和数据库操作

来源:互联网 发布:linux下 pyqt4 找不到 编辑:程序博客网 时间:2024/06/08 12:26

纠结了很久的一个知识点--数据库的操作,到现在还没有搞定,先不管了,记录下这两天的过程。

文件操作是编程语言中非常重的一部分,ruby对文件的操作做的相当的简单灵活,几个方法就能做到你能想到的一切文件操作。

对文件的操作无非就是两个方面,一个是对文件进行创建、修改、查看、删除,另一个就是对文件状态的内容的操作。

ruby中提供了一系列的方法来操作状态,File::Stat类的stat实例方法,比如一些权限的查看和修改mod/chmod。查看是否存在的exists?等等,很多操作。

相对重要的是文件的读取,ruby在打开文件时会有一个可选参数来指定以什么样的方式打开默认是r(只读),在读取的时候有read/readline/readlines/get等

fp = "ruby.txt"file = File.new(path)puts "是否存在文件#{FileTest.exist?(fp)}"buf = ""#file.read(file.size, buf)#puts buf.to_s#puts file.readchar#puts file.read#puts file.readlineputs file.readlinesputs file.posputs "利用迭代器输出的内容"file.pos = 0file.each do |line|  puts line  endputs "输出每个字符"file.pos = 0file.each_byte do |char|  print "#{char} ,"endfile.close
是否存在文件true这是用于ruby文件操作的文本强大的文本支持是关键还有一些很好的库支持70利用迭代器输出的内容这是用于ruby文件操作的文本强大的文本支持是关键还有一些很好的库支持输出每个字符213 ,226 ,202 ,199 ,211 ,195 ,211 ,218 ,114 ,117 ,98 ,121 ,206 ,196 ,188 ,254 ,178 ,217 ,215 ,247 ,181 ,196 ,206 ,196 ,177 ,190 ,13 ,10 ,199 ,191 ,180 ,243 ,181 ,196 ,206 ,196 ,177 ,190 ,214 ,167 ,179 ,214 ,202 ,199 ,185 ,216 ,188 ,252 ,13,10 ,187 ,185 ,211 ,208 ,210 ,187 ,208 ,169 ,186 ,220 ,186 ,195 ,181 ,196 ,191 ,226 ,214 ,167 ,179 ,214 ,

写入文件需要用w/w+可写方式打开。这种方式会清空原来的内容,再写入新的内容,用a/a+则以追加的方式。使用puts/putc/print/write写入文件


 

file = File.new(fp, "w")$\ = "\n" #设置执行完print方法自动换行file.puts("夏夜诗")file.print("\t---Wicky")file.print("夏天不得了")file.print("处处蚊子咬")file.puts("撒次敌敌畏")file.puts("不知死多少")file.closefile = File.new(fp, "a")file.puts("夏天过了,又不会太热")file.close

打开文件

夏夜诗---Wicky夏天不得了处处蚊子咬撒次敌敌畏不知死多少夏天过了,又不会太热

先以w的方式打开,这样会清空原来的内容,然后再以a追加的方式打开,就可以在原来的的基础上再新增

提供对文件的操作方法有unlink,rmdir,delete,rename……等,对文件的操作就那些,一下也记不住,等需要的时候再查API吧。

接下开始蛋疼的ruby开始,也就是从这里开始,搞了3天的问题还是没有搞明白,到现在还有个问题没有搞定

开始对数据库的操作,和java一样,要访问数据库必须要用驱动,但java对数据库的操作,只需要导入驱动jar包就行了。但ruby需要libmysql.dll这种动态链接库,刚开始都不知道这个要到哪里去找,只用gem下载了mysql-gem 

gem install mysql

但开始没有注意安装完成后的版本提示,我用的ruby是1.9.3,gem是1.2.8,在网上找也只是说要把lib里面的libmysql.dll放到ruby/bin目录下,并没有说哪里的dll文件,所以刚开始复制了mysql/lib下的,但是不行呀,又花了点时间去找,以现要一个connector,于是去下载了一个mysql-connector.再把这个lib的dll复制出来,但还是没用,纠结了一个下午之后发现在gem install mysql后有一个提示,built in connector 0.6.2。于是去试试下载了一个mysql-connector-c-noinstall-6.0.2-win32.把里面的lib复制出来。惊奇的发现在require 'mysql'后没有报LoadError的错误,说明成功了,兴奋极了,于是运行代码

#encoding:utf-8#http://www.mysql.com/downloads/connector/c/require "mysql"class Score  def initialize(id=0, subject, score, student_name, descr)    @id = id    @subject = subject    @score = score    @student_name = student_name    @descr = descr      end  attr_accessor :id, :subject, :score, :student_name, :descr  enddef createSql(score)  sql = "insert into score(subject, score, student_name, descr) values('#{score.subject}', '#{score.score}', '#{score.student_name}', '#{score.descr}')"  puts "SQL:#{sql}"  return sqlenddef saveScore(dbh, score)  sql = createSql(score)  dbh.query(sql)  if dbh.affected_rows == 1    puts "您保存的信息已成功#{score}"  end  endbegin  zhang = Score.new("数学", 80, "张三", "")  li = Score.new("数学", 100, "李四", "")  wang = Score.new("数学", 58, "王麻子", "考试迟到,没有做完\n考虑加到及格")  dbh = Mysql.init  dbh.options(Mysql::SET_CHARSET_NAME, 'utf-8')    dbh = Mysql.real_connect("localhost", "root", "toor", "ruby_demo", 3306)    saveScore(dbh, zhang)  saveScore(dbh, li)  saveScore(dbh, wang)  rescue Exception => e    puts "操作数据库发生异常#{e}"    puts "#{$@.to_s}"  ensure    dbh.closeend

但报一个至今没有解决的问题编码问题,ruby据说默认的编码是ASCII-8BIT,而且我们开发中一般用万国码utf-8.所以一直报编码错误,在网上找了很多都是说ROR里面要怎么改,没有一个说ruby要怎么改的。看来得以后再了解决了,所以做了一个艰难的决定,不管ruby的数据库操作了,开始ROR吧,比原计划晚了一天了。这里的数据库问题待日后对ruby熟悉了再返回来看看要怎么改。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击