http://blog.sina.com.cn/erway[订阅]
个人资料
公告
1.《 SQL Server2005数据库开发详解》国内第一本全面解析SQL Server2005的专业图书,3个月狂销8000册。
 

 
 
 
2.《最优化ASP.NET——面向对象开发实践》名作名译,ASP.NET领域的EffectiveC++,绝对重量级权威参考书。

 

3.《.NET企业服务框架——应用.NET企业服务开发分布式业务解决方案》这个世上没有几本书能够将.NET企业服务讲解得足够清楚,这本书就是其中之一。

4.《ProgrammingASP.NET中文版(第3版)》博文视点与O'Reilly 强强合作,共造经典。

访客
读取中...
分类
    内容读取中…
博文

巧妙利用Google Group的搜索技巧

——想找谁就找谁

提到Google,大家可能会想到很多东西,因为Google的分享精神的确给大家带来很多好的产品。但是,在Google所有的产品中,没有哪一项是可以和它的Search Engine相提并论的。我在本文中所要谈论的就是Google的搜索技巧,千万不要被这个古老而枯燥的话题而吓住,我在这里谈论的可不是一般的搜索技巧哦!

我是一名编辑,不断地认识IT界的技术精英是工作的需要。然而,网络是我们与这些技术精英们结识的重要途径。对于绝大多数的网名来说,大多都有一个固定的nickname(网名或昵称),当然,有的人不只一个。我们是否曾经有这样的经历,我们在某个论坛上发现了一个技术牛人,但是只有他的nickname,而没有其他的联系方式。此时,我们很想与他取得联系,但是却苦于没有他的联系方式。在这种情况下,我们第一个想到的会是Google。如果这个人在网上名气很大或者是很活跃,借助强大的Google,我们一般都能与这个人取得联系。但是对于那些沉默在网络中的技术高手,有时候Google也无能为力。遇到这样的情况怎么办?请Google Group帮忙吧!

关于Google Group,大家知道得更多的可能是它的论坛功能。当然,它的论坛功能是非常强大的,这也是它吸引无数用户的重要原因之一。如果你是Google Group的忠实用户,你一定知道几乎所有的IT技术领域都在Group 上安家了。是的,的确是这样。如果不信,你去论坛上Google一下便知。一般搞技术的人,尤其是牛人,都会加入相关领域的某个Google Group。只要他曾在某个Google Group中发过贴,我们在Google Group的论坛搜索中输入目标对象的nickname,我们便会找到他发的帖子。找到了这个帖子,我们就找到了它的主人,我们就可以把他的Gmail找出来。

下面请允许我做一个简单的示范。也许你曾经在网上看到一个nicknamelinux1689的家伙,你想和他取得联系,可是他的知名度又不高,不足以让Google找到他怎么办呢,那我们就用Google Group的搜索功能试试吧。具体步骤如下所示:


 

我的第一个Ruby程序(2)

 

 

第三阶段功能描述:

查找任意文件中的任意字符串,并返回该字符串所在文件名称、该字符串所在的行号以及该行的内容。

filename = ARGV[0]

file = File.open(filename,'r')

  string_to_find = ARGV[1].clone

  file.each{|line|

    if line.include? string_to_find

    puts '#{filename} : line #{$.} #{line}'

end

第四阶段功能描述:

查找任意多个文件(这些文件的名称必须在命令行中指定)中的任意字符串,并返回该字符串所在文件名称、该字符串所在的行号以及该行的内容。

find_string = ARGV[0]

def find(find_string, filename)

  file = File.open(filename, 'r')

  file.each {|line|

    if line.include? find_string

      puts '#{filename} : line #{$.} #{line}'

    end 

  }

end

 

if ARGV.length == 0

  puts 'No parameter is input, please input the string to find.'

elsif (ARGV.length - 1) == 0

  puts 'No filename is input, please input the filenames.'

end

 

for i in 1..(ARGV.length - 1)

  find(ARGV[0], ARGV[i])

end

我的第一个Ruby程序(1)(2006-12-15 11:09)

我的第一个Ruby程序(1)

我的第一个Ruby程序,功能逐渐由简单到复杂:

第一阶段功能描述:

查找指定文件中的指定字符串,并返回该字符串所在的行号以及该行的内容。

file = File.open('text_01.txt','r')

  file.each{|line|

    if line.include? 'yang'

     puts 'line #{$.} #{line}'

    end

  }

file.closed

 

上面这个程序还可以简化为:

File.open('text_01.txt', 'r').grep(/yang/) do |line|

puts 'line: #{$.} #{line}'

end

第二阶段功能描述:

查找指定文件中的任意字符串,并返回该字符串所在的行号以及该行的内容。

file = File.open('text_01.txt','r')

  string_to_find= gets

  string_to_find.chomp!

  lines = []

  file.each{|line|

    if line.include? string_to_find

    puts 'line #{$.} #{line}'

    end

 }

file.close

puts lines

6.       abs方法

abs方法的作用是取得调用它的数字对象的绝对值。例如:

a = -123

a.abs     →123

-123.abs    → 123

注意,absnum)这种表达方式是错误的。

 

 

7.       downto()方法

downto()方法是upto()方法的逆方法。downto()方法有一个参数,调用它的对象的值它的参数的值将与构成一个range,然后再将该range内的值依次赋值给其后block中的变量。该方法是整数支持的集中常用的迭代器之一。

例如:

20.downto(15) { |i| print i, “  “}

输出结果:20  19  18  17  16  15

 

8.       step()方法

该方法的形式为:a.step(b,c) {block},它有两个参数,其中第一个参数b与调用该方法的数字对象b构成一个range。相当于是一个以a为首项,b为末项,c为公差的一个等差数列。step方法的作用就是将该等差数列的各项分别传入block中,即进行迭代。

例如:

10.step(202) {|i| print i, “,”}

输出结果:

101214161820

注意,从数学的意义上讲,在setp方法中并不要求b = n*c成立(n为整数),只需要满足a < b成立即可。

例如:

12.step(265.1) {|i| print i, “,”}

输出结果:

12.017.122.2

 

4.       upto()方法

upto()方法会有一个参数,它的参数的值将与调用它的对象的值构成一个range,然后再将该range内的值依次赋值给其后block中的变量。该方法是整数支持的集中常用的迭代器之一。

例如:

3.upto(8) { |a| print a }

输出结果为:

345678

 

5.       inject方法

inject方法可以遍历集合中的所有成员以累计出一个值,一般地,他可以求得集合中元素的和或积。例如:

[2,4,6,8].inject(0) { |sum,element| sum + element }            输出结果:20

[2,4,6,8].inject(1) { |product,element| product * element }   输出结果:384

上述两条语句展示了求集合中元素的和或积的方法。

inject方法的工作原理:

(1)        inject有参数时,inject后面的block第一次执行时,sumproduct的值被设置为参数的值,而element的值被设置为集合中第一个元素的值。接下来每次再执行block时,sumproduct的值被设置为上次调用block时的返回值,element即为集合中下一个元素的值。inject的最终结果是最后一次调用block的返回值。

(2)        inject没有参数时,那么sumproduct的初始值即为集合中第一个元素的初始值,表达式将会从第二个元素开始迭代。

根据上述说明,可以很容易得出下面这些表达式的结果:

[2,4,6,8].inject(3) { |sum,element| sum + element }            输出结果:23

[2,4,6,8].inject(2) { |product,element| product * element }   输出结果:768

[2,4,6,8].inject { |sum,element| sum + element }            输出结果:20

[2,4,6,8].inject { |product,element| product * element }   输出结果:384

调用inject方法的是一个集合,这个集合可以是数值Array,同时它还可以是range,例如:

 

(2..5).inject(3) { |sum,element| sum + element }            输出结果:17

(2..5).inject(2) { |product,element| product * element }   输出结果:240

该集合也可以是数值Array的一部分,例如:

a = [2,4,6,8,10] .

a[0,2].inject(3) { |sum,element| sum + element }

输出结果:9

1.       capitalize方法

该方法是字符串类String的一个方法,对所有字符串都适用。它的作用是将调用该方法的字符串的首字母改为大写。举例如下:

s = “ruby”

s.capitalize  → “Ruby”

 

又如:

def say_goodnight(name)

result = 'Good night, #{name.capitalize}'

#capitalize将参数name所代表的字符串的首字母改为大写

return result #其实这条语句是多余的,因为一个方法如果没有指定返回值,则默认返回最后一个表达式的值

end

puts say_goodnight('mum')

输出结果:

Good night,Mum

 

2.       each方法

each方法经常与block一起使用,它的最大好处能够在某冲情况下取代for循环的功能。each方法会将调用它的对象中的所有元素依次赋给与each方法相关联的block的变量。

例如:

(‘a’..’e’).each {|char| print char}    → abcde  #range中两点表示全闭区间,三点表示前闭后开

在上面的例子中,range对象(‘a’..’e’)调用each方法,each方法将(‘a’..’e’)对象的每个值依次赋给block {|char| print char}中的char变量。

再来看下面这个例子:

file = File.open(“filename”)#打开名称为filename的文件,并将其内容写入到file

file.each {|line|

puts line

}

file.close  #文件打开后必须关闭

输出结果:

this is line one

this is line two

this is line three

and so on……

 

3.       times方法

调用times方法的一般是具体的数字(整数)对象,times会按照对象的要求来指定其后block的执行次数。该方法是整数支持的集中常用的迭代器之一。

例如:

5.time { print “*” }

输出结果:

*****

 

共享软件变免费软件(2006-11-23 20:02)

共享软件变免费软件

——让试用软件永不过期

你是不是经常会有这样的苦恼?一款自己很喜欢的软件,用了30天后(或者更短)它过期了,如果你不给它的著作权所有者付费,你就别想再用它了。这时你心里肯定会很不爽,怎么办呢?你肯定不会为了再装这一款软件而去重装系统,你可能也更不会去购买这款软件的使用权。不用着急,让我来告诉你一个很简单的方法吧!

在介绍这个方法之前,请允许我简单叙述一下共享软件与免费软件的区别:

免费软件:没有功能、时间、功能方面的限制,不要钱。软件著作权属于作者,但是用户可以自由使用。

共享软件:有次数、时间、功能方面的限制,要花钱。用户可以使用部分软件功能 想使用全部功能需要注册

如果你心爱的软件是一款有时间限制的共享软件,此时你不必再为它的使用时间而担心。只要你明白它为什么会在你的电脑中会过期,你就一定会找到解决的办法。一般的软件在安装过程中,它都会将自身的信息写入到系统的注册表中,注册表会完全监控该软件的使用情况。为了解决共享软件过期的问题,我们可以从修改系统的注册表入手。

Step one  依次“开始”→“运行”,输入“regedit”打开注册表;

Step two  依次在注册表的“HEKY_CURRENT_USER”→“Software”目录下找到该软件所在的位置,然后直接利用右键将其删除。(注:注册表中全部是英文,如果你的软件名称是中文,你需要知道它对应的英文名称)

Step three  依次在注册表的“HEKY_LOCAL_MACHINE”→“SOFTWARE”目录下找到该软件所在的位置,然后直接利用右键将其删除。

Step three  重新启动或注销你的电脑(这样注册表修改才会生效),然后再重新安装你心爱的软件,你又可以使用它了。

呵呵,补充一点,建议在执行这四个步骤前,先在控制面板中将该软件卸载掉。

2.2.5 课后练习

1.定义一个由abc······26字母组成的字符串practice1,编写一个程序,通过对字符串practice1的操作,形成一个新的字符串practice2,其值为“broadview”,即pracitce2=”broadview”

2sr“1234567890”,分别求下列各表达式的值:

1)         sr[0]+ sr[3]+ sr[9]+ sr[5]

2)         sr[10:]

3)         sr[:-11]

4)         sr[7]+sr[2:5]+sr[-2:-6]+sr[3]

5)         (sr[-1]+sr[0])*10

3. 利用三引号定一个多行字符串(至少3行),并计算该字符串的长度。

4 定义一个字符串pracitce3=”Iamagoodstudent!”,编写一个程序,通过对pracitce3进行相关操作,构造一个新字符串pracitce4= “I am a good student

5.定一个字符串pracitce5=’abcdef\n’,编写一个程序,通过对pracitce5进行相关操作,构造一个新字符串pracitce6=’abcdef’,使这个字符串中不包含换行符。

6.阅读下列程序:

   a=3

   b=4

   c=5

  b=a*b

  c=b+c

  import string

  d=string.atoi(“55”)*a/c

  c=d-c

计算变量c的值。

5find方法

find方法的作用是找到字符串中指定字符或字符片段所对应的索引值。与上述其他方法不一样,find方法必须带一个参数,否则该方法无效。关于该方法的具体用法请参考下面的例2-27

例2-27        string15=”address”

string15.find(“a”)

string15.find(‘d’)

string15.find(‘ss’)

其执行结果如图2-27所示。

 

2-27  str类的find方法

从上例中可以看出,find方法找出的是字符串中指定字符或者是字符片段所对应的索引值。但是这里有几点需要格外注意:1.find方法一般是从字符串的开头开始寻找指定的字符或者是字符片段,当找到第一个指定的目标后,该方法不再寻找下一个目标;2.指定的字符片段,在计算索引值的时候被当成一个字符来处理,例如字符片段’ss’被当成一个字符处理,故其索引值为5

 

6atoi方法

atoi方法是将由数字构成的字符串中的数字字符转换为数字。与其他字符串的方法不一样,使用该方法前,必须调用Python中的字符串工具模块string,具体操作如例2-28所示。

2-28  import string #调用系统的字符串工具模块string

         string.atoi(“ 99”)-99

 其结果如图2-29所示。

 

2-28  string工具模块的atoi方法

注意,stringPython中内置的字符串工具模块,而不是一般的字符串名称。该字符串中不仅包含atoi方法,而且也包含上述所有的字符串方法。


 

3split方法

split方法是将字符串中的字符按照令牌字符(所谓令牌字符是指:给定字符串中的任何字符,字符串将按照整个字符进行拆分)分隔开。令牌字符可以是任何空白字符,其中包括空格符、制表符和换行符等,默认的令牌字符为空白字符。使用slipt方法可以将一个字符串拆分为许多个字符串。

2-24  string11=”this is a test!”

         string11.split()

其结果如图2-24所示。

 

2-24  str类的split方法之令牌字符为默认字符

在上例中,split方法没有指定令牌字符,故其采用默认的令牌字符空格。即string11是按照空格字符进行拆分的。

 

2-25  string12='0:1:2:3:4:5:6:7:8:9'

string12.split(‘:’)

其结果如图2-25所示。

 

2-25  str类的split方法之令牌字符为指定字符

上例中,split方法的令牌字符不再是默认字符,它被指定为冒号“:”,即字符串string11中的字符都以冒号分隔符分开,拆分为许多个小的字符串。

 

4join方法

join 方法的作用与 split 方法相反, 可以使多个短字符串序列形成一个长字符串。join方法也需要指定令牌字符,这些短字符串会以指定的令牌字符为连接字符,然后形成一个长字符串。

2-26  string13=”:”

string14=(' 0’,’1’,’2’,’3’)

string13.join(string14)

 

2-26  str类的join方法