#编程

1.数组遍历方法总结
(1)

1
array = (1..10).to_a 

(2)

1
2
3
4
5
length = array.length 
length.times do t
print "#{array[t]} "
end
puts "n"

(3)

1
2
3
4
5
length = array.length-1 
for i in 0..length do
print "#{array[i]} "
end
puts "n"

(4)

1
2
3
4
5
6
7
8
9
for i in array do 
print "#{i} "
end
puts "n"
```Ruby
(5)
```Ruby
array.each{x print x," "}
puts "n"

(6)

1
2
3
4
5
6
7
length = array.length 
i = 0
while i< length do
print "#{array[i]} "
i = i+1
end
puts "n"

(7)

1
2
3
4
5
6
7
length = array.length 
i = 0
until i==length do
print "#{array[i]} "
i += 1
end
puts "n"

(8)

1
2
array.each_index do i 
print "#{array[i]} "

2.Ruby连接数据库
(1).mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
require 'mysql'  
begin
db = Mysql.init
db.options(Mysql::SET_CHARSET_NAME, 'utf8')
db = Mysql.real_connect("127.0.0.1", "root", "123456", "test", 3306)
db.query("SET NAMES utf8")
db.query("drop table if exists tb_test")
db.query("create table tb_test (id int, text LONGTEXT) ENGINE=MyISAM DEFAULT CHARSET=utf8")
db.query("insert into tb_test (id, text) values ( 1,'first line'),(2,'second line')")
printf "%d rows were inserted\n",db.affected_rows
rslt = db.query("select text from tb_test")
while row = rslt.fetch_row do
puts row[0]
end
rescue Mysql::Error => e
puts "Error code: #{e.errno}"
puts "Error message: #{e.error}"
puts "Error SQLSTATE: #{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
db.close if db
end

(2).redis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/ruby

require 'redis'

def writeToFile(file,content)
fp = File.new(file,"a+")
if fp
fp.syswrite(content)
else
puts "..."
end
end

def connect(host)
redis = Redis.new(:host => host,:port => 6379)
redis.info.keys.each do |key|
puts "#{key}:\t"+redis.info["#{key}"]
end
end

connect("1.1.1.1")

(3).sqlite3

1
2
3
4
5
6
7
8
9
10
11
12
require 'sqlite3'

db = SQLite3::Database.new('test.db')

db.execute("create table test(
ID integet not null,
Username varchar(20) null,
Password varchar(64) null)")
db.execute("insert into test(ID.Username,Password)
values('0','admin','admin')")
db.execute("select * from test")
db.execute("update test set password='12345' where id=0")

3.Ruby socket
服务端:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
require 'socket'

server = TCPServer.open('0.0.0.0', 8080)
loop do
Thread.start(server.accept) do |client|
begin
while true
puts "#{client.to_i} online"
data = client.read()
throw "empty" if data.empty?
#puts data.length
puts data
end
rescue Exception => e
puts "#{client.to_i} offline"
end
end
end

客户端:

1
2
3
4
5
6
7
8
9
require 'socket'

hostname = '127.0.0.1'
port = 8080
buf = 'test'
s = TCPSocket.open(hostname, port)
s.write buf
sleep(1)
s.close

4.ruby gem 文档
rubygems.org上main的gem文档访问起来太慢了,其实装了gem的机器本身就自带doc的功能
使用下列命令可以启动gem自带的文档

1
gem server --port 1234

然后用浏览器访问http://localhost:1234就可以查看相关的gem文档。

5.ruby改变控制台输出内容的颜色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
puts "\033[1m前景色\033[0m\n"  
puts "\033[30mBlack (30)\033[0m\n"
puts "\033[31mRed (31)\033[0m\n"
puts "\033[32mGreen (32)\033[0m\n"
puts "\033[33mYellow (33)\033[0m\n"
puts "\033[34mBlue (34)\033[0m\n"
puts "\033[35mMagenta (35)\033[0m\n"
puts "\033[36mCyan (36)\033[0m\n"
puts "\033[37mWhite (37)\033[0m\n"
puts ''
puts "\033[1m背景色\033[0m\n"
puts "\033[40m\033[37mBlack (40), White Text\033[0m\n"
puts "\033[41mRed (41)\033[0m\n"
puts "\033[42mGreen (42)\033[0m\n"
puts "\033[43mYellow (43)\033[0m\n"
puts "\033[44mBlue (44)\033[0m\n"
puts "\033[45mMagenta (45)\033[0m\n"
puts "\033[46mCyan (46)\033[0m\n"
puts "\033[47mWhite (47)\033[0m\n"
puts ''
puts "\033[1m其他\033[0m\n"
puts "Reset (0)"
puts "\033[1mBold (1)\033[0m\n"
puts "\033[4mUnderlined (4)\033[0m\n"

6.一些比较特别的包
Ruby json gem
https://rubygems.global.ssl.fastly.net/gems/json-1.8.3.gem
树莓派wiringpi gpio包
http://pi.gadgetoid.com/article/wiringpi-as-a-ruby-gem

7.安装rvm的正确姿势
参考自:http://rvm.io/rvm/install
首先添加gpg公钥:

1
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

安装稳定版本的rvm

1
curl -sSL https://get.rvm.io | bash -s stable --ruby

构成
普通字符a~z
特殊字符(元字符)

普通字符
指没有显式指定为元字符的所有可打印和不可打印字符。包括所有大写和小写字母、所有数字、
所有标点符号和一些其他符号。

非打印字符
非打印字符也可以是正则表达式的组成部分。以下是表示非打印字符的转义序列:

cx 匹配由x指明的控制字符。例如, cM 匹配一个 Control-M 或回车符。x 的值必须为
A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
f 匹配一个换页符。等价于 x0c 和 cL。
n 匹配一个换行符。等价于 x0a 和 cJ。
r 匹配一个回车符。等价于 x0d 和 cM。
s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。
S 匹配任何非空白字符。等价于 [^ fnrtv]。
t 匹配一个制表符。等价于 x09 和 cI。
v 匹配一个垂直制表符。等价于 x0b 和 cK。

特殊字符
指有特殊含义的字符。若要匹配这些特殊字符,必须首先对字符进行转义。

$ 匹配输入字符串的结尾位置。
如果设置了 RegExp 对象的 Multiline 属性,
则 $ 也匹配 ‘n’ 或 ‘r’。要匹配 $ 字符本身,请使用 $。
() 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。
. 匹配除换行符 n之外的任何单字符。要匹配 .,请使用 \.。
[] 标记一个中括号表达式的开始。要匹配 [,请使用 \[。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’
匹配字符 ‘n’。’n’ 匹配换行符。序列 ‘\‘ 匹配 “”,而 ‘(‘ 则匹配 “(“。
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。
要匹配 ^ 字符本身,请使用 ^。
{} 标记限定符表达式的开始。要匹配 {,请使用 \{。

一些例子
匹配页面中所有的a标签

<[a|A].*?href=[\'\"]{0,1}([^>\'\"\ ]*).*?>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/bash   
user=root
pwd=password
DB=test
TABLE=md5
mysql -u$user -p$pwd -e "USE $DB;CREATE TABLE $TABLE(id int not null primary key auto_increment,md5 text(32),plain varchar(100));"
while read line
do
md5=`echo $linemd5sumawk -F " " '{print $1}'`
#plain=$line
mysql -u$user -p$pwd -e "USE $DB;INSERT $TABLE (md5,plain) VALUES('$md5','$line');"
done < plaindic

#mysql -u$user -p$pwd -e "USE $DB;SELECT * FROM md5;"

刚装完的mysql数据库出现了如下错误:
ERROR 1045 (28000): Access denied for user ‘root‘@’localhost’ (using password: NO)
参考了这篇博文:
http://www.cnblogs.com/khler/archive/2011/02/10/1950819.html
用下面的语句解决了问题

1
2
3
4
5
6
7
8
/etc/init.d/mysql stop 
mysqld_safe --skip-grant-tables&
mysql --user=root mysql
mysql>update user set Password=PASSWORD('new-password');
mysql>flush privileges;
mysql>exit;
killall mysqld_safe&
/etc/init.d/mysql start
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×