一个人不应该依附在其他人身上,一个人应该首先自力更生。你应该自己能够独立,能够安顿你自己,那你就不会害怕了。你爱你自己的话,别人不能不爱你吧。

发布新日志

  • ...

    2008-04-15 09:25:43

    明天走来不及了

    后天走。

    心不定。

  • TD 8.0

    2008-04-14 16:53:51

    决定用TD...版本8.0...

     

  • 测试人员如何能够受到重视?(转载)

    2008-04-12 11:23:32

    http://peking2toronto.spaces.live.com/Blog/cns!A975CAF18FBB985B!841.entry

    测试人员如何能够受到重视?

    常常听到有人抱怨说公司不重视测试,不重视测试人员。没错,这个在小公司是非常常见的现象。其实,即使工作在大公司,虽然测试和测试人员的地位得到了很大程度的提高,可是相对开发和PM的地位还是有一定的差距,也就是说测试在公司中的地位还是比较低的,这个其实是不争的事实。道理也很简单,测试人员的技术水平,测试工作的难易度和测试在产品开发过程中的相对地位都决定了这个现实。由于测试的性质造成了相对的地位低下,那么如果想使得自己作为一个测试人员在公司或者项目组的地位得到提高,一个行之有效的办法就是超越测试的工作范围。简单来说,一个测试人员在工作中的重要性的大小不是仅仅由测试的工作范围来决定的,更重要的是你能够在多大程度上去cover开发和PM的工作。我知道在很多很多公司,包括很多大公司,都不需要你这样去做,我也不期望很多测试人员会这样去做。可是我最近理解到,去take开发和PM的responsibility对于个人的发展是多么的重要。由于各个公司的测试情况千差万别,个人的测试发展之路也是各式各样,这里主要是谈个人的理解,很可能只适合少数测试人员。这里先讲一些事例:

    1。本人以前在一个世界前几软件公司中担任team lead, title是senior SQAE,来到现在的公司是按照最低级别录用的,也就是entry level。为什么差别这么大?主要是各个公司对测试人员的要求差别太大了,这里如果只是满足测试的工作内容的话,都很难升入中级,我可见到不少水平不错,工作好几年的员工连个中级都不是呢。可是这样的员工跳到国内的公司就有做director的。

    2。以前也给大家介绍过我问director测试应该如何发展,他的回答是“短期要学好C,长期还是学好C”。可见他的回答完全跟测试没关系,应该是完全是开发的范畴。

    3。在一次会议上有人问director的老板,测试senior的实在太少了,如何才能发展成senior。他的回答主要是强调测试人员要更加的贴近客户,从客户的需求去考虑问题,不能局限于技术。可见他强调的又是PM的范畴。

    4。自己的老板对自己提出的要求也是完全超出了测试的范畴,基本点如下:

    • Debugging: find root cause of a bug (开发)
    • Code review (开发)
    • Answer customers' questions (PM)
    • Researching competitors' products and showing options in functional spec (PM)
    • Don't only focus on my components, responsible for whole feature

    5。一个印度PM同事就很牛,工作就是超出PM的范畴,开发的东西他知道底下具体是如何实现的,出了什么问题他都能估计出可能是什么问题。测试的设计他也能提出很多好的建议,很多测试的case也得请教他。他就升的特别快,几乎一年至少一级的往上升,最近发现都senior了。

    以上的例子只是想说明作为一个真正出类拔萃的测试人员各方面的功力都不能少。很多人还在争测试,开发的地位高低,水平高低。其实对于高级的测试人员和高级的开发人员来说,他们的技术视野都应该是比较一致的。因此,如果作为一个测试人员真的想提高自己的地位,就不要把、开发和测试对立起来,要把他们融合在一起才对。最后想说的是,能够把这些都做好的人不会太多,那个印度PM也算是很少见的了,他是真的很努力,负责。我本人以前也习惯性的局限在自己的任务范围之内,看到是其他人的工作就不管了,幸亏得到老板的指点,最近无论是什么问题,只要是跟自己产品相关的都积极主动地去关心,思考和处理,感觉进步很大。也希望能尽快的达到老板的要求,就是“只要是这个产品的问题,别人第一时间就会想到去问你”。我想这个时候,自己的重要性也无需争辩了。

    以上是一些个人心得,不知道是否对大家有帮助。

  • 我们说好的

    2008-04-11 10:43:57

     

    好吗 一句话就哽住了喉 $Ph|e)p  
    城市 当北京的海市蜃楼 rV.}PtcFY  
    我们 像分隔着一整个宇宙 MyOd,vU  
    再见 都化作乌有 ^+ml5m  
    " > ypIR<  
    我们说好决不放开相互牵的手 P-[-pi@  
    可现实说过有爱还不够 3l]lwV  
    走到分岔的路口 f^3*)Ni  
    你向左我向右 4X/-4'  
    我们都倔强地不曾回头 sQ3 [<  
    MBK^FR-K  
    我们说好就算分开一样做朋友 Ha#= (9.  
    时间说我们从此不可能再问候 2YL?,uLS  
    人群中再次邂逅 !vi> U|rh  
    你变得那么瘦 >tS'Q`R  
    我还是沦陷在你的眼眸 (y'hyJo  
    sfH_5 #w  
    Hey Yeah— Hey Yeah—— ')Zvp7>$  
    yqs4[C  
    我们说好一起老去看细水长流 H H)!_(SA  
    却将会成为别人的某某 hF?1y`20  
    又到分岔的路口 L- iy  
    你向左我向右 .<?GS{6 N  
    我们都强忍着不曾回头 @ y.?:7I  
    [^n.Pns  
    我们说好下个永恒里面再碰头 iXkF1r]i  
    爱情会活在时光节节败退后 PQt")[  
    下一次如果邂逅  ~NgA  
    你别再那么瘦 +480 l}  
    我想一直沦陷在你的眼眸 ja'T+!k  
    这是无可救药爱情的荒谬
    tT8%yG}  

    [SjqOTon{  

    VFA1p)n  
    iF61J% 3-  
          姓名:张靓颖 YhR?*Di  
    b;!ilBc  
      生日:1984年10月11日 o L6[i'H|  
    `yuD/-j  
      籍贯:成都 qc*+;Wi+5  
    :VLuI  
      身高:162cm >(%im :_  
    unD8h=Z2  
      体重:49公斤 Txoc  
    I X\&lV  
      爱好:各种体育运动,旅游,读书,各种门类的音乐 8oA6'%.e  
    C: e}}8i  
      最喜欢的城市:成都 4S"K%2'O  
    3)dT+lZ  
      最喜欢的人:妈妈 cteHuRd  
    A]=?fyPh{'  
      最喜欢去的地方:海边,青藏高原 = b)q.2'#  
    dm,bZHo  
      张靓颖小贴士 $L`7(0U-  
    k?xtZ,n{s  
      ★ 1998年首次于PUB演出。 Gl1`Nx0  
    C<n.C*o  
      ★ 成都市“爱浪杯”歌唱比赛亚军。 4>5%SzZT\3  
    wy Le3  
      ★ 全国大学生“统一冰红茶”歌手大赛成都赛区第一名。 Wm3H6o*  
    b#XS.e/uf  
      ★ 2004年全国大学生“统一冰红茶”歌手大赛全国 8n&",)U  
    J-\b?R a  
      总决赛冠军、“京都念慈庵”PUB歌手大赛全国总冠军,但是没有和华纳唱片签约。 8-SVgo(  
    ,:L}S03k  
      ★ 2005年参加 OEAF.  
    k)4|%  
      湖南卫视大众歌手选拔赛 H%%#^rb^  
    a .] !  
      超级女声,超级女声成都分唱区亚军。 <o]tW4\(R  
    k| jC c  
      ★ 专辑/单曲:2005年7月25日发表首支单曲“Openupyourdream”。 Jk1U p2#B  

    超女里面我最欣赏她

    这首歌也加到了best播放器里面

     

  • Delphi 7.0常用函数速查手册

    2008-04-09 10:38:57

    函数由一句或多句代码组成,可以实现某个特定的功能。使用函数可以使代码更加易读、易懂,加快编程速度及减少重复代码。过程与函数类似,过程与函数最重要的区别在于,过程没有返回值,而函数能有返回值。

      在Delphi 7.0中,已为我们定义好了非常多的函数,大致分类有6种:数据类型转换函数、字符串、数组操作函数、文件、磁盘操作函数、内存、指针操作函数、数学运算函数、日期函数。

      在Delphi中调用函数,一般情况下可以直接使用函数即可,但由于有一些函数未包含在Uses中列出的单元中(默认单元有Windows,Messages,SysUtils,Variants,Classes,Graphics, Controls,Forms,Dialogs;),所以需要我们手动添加单元。比如,MidStr函数就未包含在这些单元中,MidStr所属单元在StrUtils中,因此我们将StrUtils添加Uses中即可。

      在本手册中,凡是未包含在默认列出的单元中的函数,都标明了其所属的单元,使用时应当注意。

      一、数据类型转换函数

      在我们编写程序当中,根据不同情况,会使用到多种数据类型。当要对不同的类型进行操作时,必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是非常重要的。

      1.FloatToStr

      功能说明:该函数用于将“浮点型”转换成“字符型”。

      参考实例:

      Edit1.Text := FloatToStr(1.981);

      2.IntToStr

      功能说明:该函数用于将“整数型”转换成“字符型”。

      参考实例:

      S := IntToStr(10);(注:S为String类型变量。)

      3.IntToHex

      功能说明:该函数用于将“十进制”转换成“十进制”。该函数有二个参数。第一个参数为要转换的十进制数据,第二个参数是指定使用多少位来显示十六进制数据。

      参考实例:

      Edit1.Text := IntToHex('100', 2);

      执行结果,Edit1.Text等于64。

      注意:Delphi没有提供专门的“十六进制”转换为“十进制”的函数。使用StrToInt函数可以实现这个功能。具体代码是:I := StrToInt('S\' + '64'); 这时I等于100。加上一个'S\'即可将“十六进制”转换为“十进制”。

      4.StrToInt

      功能说明:该函数用于将“字符型”转换成“整数型”。

      参考实例:

      I := StrToInt('100');

      注意:不能转换如 StrToInt('ab')或StrToInt('好')这样的类型,因为他们并不存在数字型。

      5.StrToFloat

      功能说明:该函数用于将“字符型”转换成“浮点型”。

      参考实例:

      N := StrToFloat(Edit1.Text);

      注意:Edit1.Text中的内容为1.981(凡在Edit控件中显示的文本均为字符串)。N为Double类型,用于保存转换后的浮点型数据。

      二、字符串、数组操作函数

      对字符串及数组的操作,是每个程序员必须要掌握的。熟练的使用这些函数,在编程时能更加得心应手。

      1.Copy

      功能说明:该函数用于从字符串中复制指定范围中的字符。该函数有3个参数。第一个参数是数据源(即被复制的字符串),第二个参数是从字符串某一处开始复制,第三个参数是要复制字符串的长度(即个数)。最后函数返回一个新的字符串(即是我们指定要复制的字符串内容)。

      参考实例:

      var

        S: String;

        MyStr: String; // 保存新的字符串

      begin

        S := 'I Love China!';

      //下面将获取I Love China中的“Love”字符串。

      MyStr := Copy(S, 3, 4);

      end;

      执行结果,MyStr等于“Love”,“Love”字符串在“I Love China!”中第3个位置开始,所以第二个参数为3,“Love”一共有4个字符,所以第三个参数为4。

      2.Concat

      功能说明:连接两个或多个字符串为一个字符串。

      参考实例:

      var

        S1, S2: String;

      begin

        S1 := Concat('A', 'B'); // 连接两个字符串,S1变量等于AB。

        S2 := Concat('Borland', ' Delphi', ' 7.0'); // 连接三个字符,S2变量等于Borland Delphi 7.0。

      end;

      3.Delete

      功能说明:删除字符串中指定的字符串。该函数有三个参数。第一个参数为要进行处理的字符串,第二个参数为从何处开始删除,第三个参数为删除的字符个数。

      参考实例:

      var

        S: String;

      begin

        S := 'I Like Reading CPCW.';

        // 下面的代码将删除S变量中的“C”字符。

        Delete(S, 16, 1);

      end;

      此时S变量则是I Like Reading PCW.(“C”已经不存在了)。

      4.High

      功能说明:返回数组下标的最大值。

      参考实例:

      var

        arrText: array[0..9] of Char;

        i: Integer;

      begin

        i := High(arrText); // i的值则为9

      end;

      5.Insert

      功能说明:插入一个字符(串)。该函数有三个参数。第一个参数为要插入的字符(串),第二个参数为被插入字符串(源字符串),第三个参数为从何处插入。

      参考实例:

      var

        S: String;

      begin

        S := 'Wat is your name?';

        // 上面句子中的What单词查一个“h”字符,下面使用Insert函数将h添加进去。

        Insert('h', S, 2); // 将“h”从第2位处插入。

      end;

      6.LeftStr(所在单元:StrUtils)

      功能说明:返回字符串左边指定个数的新字符(串)。该函数有两个参数。第一个参数为完整的字符串,第二个参数为指定个数。

      参考实例:

      var

        S, A: String;

      begin

        S := 'MSN Messenger';

       A := LeftStr(S, 3); // 从最左边开始,获取左边的三个字符。因此A变量则等于MSN。

      end;

      7.Length

      功能说明:该函数用于统计指定字符串的长度(即个数)。

      参考实例:

      var

      nLen1, nLen2: Integer; // 用于保存字符串长度

      begin

        nLen1 := Length('CPCW');

      nLen2 := Length('电脑报');

      end;

      执行结果,nLen1等于4,nLen2等于6。由于一个汉字相当于两个字符的长度,所以3个汉字的长度为6。

      8.Low

      功能说明:返回数组下标的最小值。

      参考实例:

      var

        arrText: array[1..9] of Char;

        i: Integer;

      begin

        i:= High(arrText); // i的值则为1

      end;

      9.LowerCase

      功能说明:将字符(串)中的英文字符转换为小写。

      参考实例:

      var

        S, A: String;

      begin

        S := 'ABC';

        A := UpperCase(S); // 经过UpperCase函数转换后,A则等于abc。

      end;

      10.MidStr(所在单元:StrUtils)

      功能说明:返回指定范围内的字符串。该函数有三个参数。第一个参数为源字符串,第二个参数为起点,第三个参数为结束点。通过第二、第三个参数则可指定要复制字符串的范围。

      Copy函数与此函数类似。MidStr主要用于处理含有中文字符的字符串。

      参考实例:

      var

        S: String;

        H: String;

      begin

        S := MidStr('China', 1, 2); // S变量为Ch

        H := MidStr('电脑报', 1, 1); // H变量为“电”。如果使用Copy函数,则应是H := Copy('电脑报, 1, 2),否则返回的将不是“电”字。因此在使用操作含有中文的字符串时,最好使用MidStr。

      end;

      11.Pos

      功能说明:查找字符(串)所在位置。该函数有二个参数。第一个参数为要查找的字符(串),第二个参数为被查找字符(串)。

      参考实例:

      var

        nPos: Integer; // 用于保存查找的字符所在位置

      begin

        nPos := Pos('Like', 'I Like Reading!');

      end;

      此时nPos等于3。如果没有查找到,则nPos为0。

      注意:Pos函数在查找时是要区分字符大小的。如果要实现不区分大小,那么需要使用UpperCase或LowerCase函数将两个参数的字符(串)转换为“大写”或“小写”再进行查找。

      另外还有一个查找字符(串)的函数----AnsiPos,该函数的使用方法与Pos函数完全一样。当你查找的是汉字时,最好使用AnsiPos函数。

      12.RightStr(所在单元:StrUtils)

      功能说明:返回字符串右边指定个数的新字符(串)。该函数有两个参数。第一个参数为完整的字符串,第二个参数为指定个数。

      参考实例:

      var

        S, A: String;

      begin

        S := 'MSN Messenger';

        A := RightStr(S, 3); // 从最右边开始,获取右边的三个字符。因此A变量则等于ger。

      end;

      13.SetLength

      功能说明:设置字符串或动态数组长度。该函数有两个参数。第一个参数为要设置的字符串变量或动态数组变量,第二个参数为指定的长度,其取值范围在0到255之间。

      参考实例:

      var

        S: String;

        arrText: array of Char; // 定义一个动态数组

      begin

        SetLength(S, 10); // 当设置后,S变量只能赋值长度为10的字符串。

        SetLength(arrText, 10); // 只有使用SetLength为动态数组分配内存空间后才能使用动态数组。这句代码的作用相当于arrText: array[0..9] of Char

      end;

      14.StrPCopy

      功能说明:将字符串复制到字符数组中。该函数有两个参数。第一个参数为“目标数组”,第二个参数为“字符串”。

      参考实例:

      var

        arrChar: array[0..255] of Char; // 这里声明了长度为256的Char型数组

      begin

        StrPCopy(arrChar, 'Come on, baby!');

      end;

      15.Trim

      功能说明:删除字符串左右两边的空格(无论左右两边有多少个空格均被全部删除)。

      参考实例:

      var

        S: String;

      begin

        S := ' Delphi 7.0 ';

        S := Trim(S);

      end;

      16.TrimLeft

      功能说明:删除字符串左边的空格(无论左边有多少个空格均被全部删除)。

      参考实例:

        S := TrimLeft(' Delphi');

      17.TrimRight

      功能说明:删除字符串左边的空格(无论左边有多少个空格均被全部删除)。

      参考实例:

        S := TrimRight('Delphi ');

      18.UpperCase

      功能说明:将字符(串)中的英文字符转换为大写。

      参考实例:

      var

        S, A: String;

      begin

        S := 'abc';

        A := UpperCase(S); // 经过UpperCase函数转换后,A则等于ABC。

      end;

      三、文件、磁盘操作函数

      软件大多都要对文件、磁盘进行操作。熟悉掌握这些函数可以帮助你轻松实现创建、删除、保存文件等功能。

      1.Append

      功能说明:追加内容到文件中。文件必须要存在。

      参考实例:

      var

        S: String;

        F: TextFile;

      begin

        S := 'This is a book.';

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Append(F); // 以追加的方式打开文件

        Writeln(F, S); // 将S变量中的内容追加到文本尾后。

        CloseFile(F); // 关闭文件

      end;

      2.AssignFile

      功能说明:与指定的文件建立连接。

      参考实例:

      var

        F: TextFile; // 声明文本文件类型变量

      begin

        AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

      end;

      3.ChDir

      功能说明:改变当前目录(文件夹)。

      参考实例:

      var

        sDir: String;

      begin

        sDir := 'C:\Windows';

        ChDir(sDir); // 此时,系统的当前目录则为C:\Windows目录。

      end;

      4.CloseFile

      功能说明:关闭文件。当对文件的操作完成后,应该使用CloseFile函数关闭打开的文件。

      参考实例:

      var

        S: String;

        AllText: String;

        F: TextFile;

      begin

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Reset(F); // 打开文件

        while not EOF(F) do begin // 使用While循环,一直判断是否到了文件未尾

         Readln(F, S); // 读取一行文本

         AllText := AllText + S;

        end;

        CloseFile(F); // 关闭文件

      end;

      5.DeleteFile

      功能说明:删除指定的文件。该函数只有一个参数。此参数为欲删除文件的完整路径。如果删除成功,则返回True。若删除失败、或文件不存在则返回False。

      参考实例:

      var

        IsOK: Boolean; // 用于保存删除状态

      begin

        IsOK := DeleteFile('C:\My Documents\Index.html'); // 函数执着后,将结果返回给IsOK变量。如果IsOK变量为True,则表示文件删除成功。

        if IsOK then ShowMessage('文件删除成功!')

        else ShowMessage('文件删除失败!');

      end;

      6.DirectoryExists

      功能说明:检测指定的文件夹否存在。如果存在则返回True,反之则为False。

      参考实例:

      var

        IsExists: Boolean;

      begin

        IsExists := DirectoryExists ('C:\Windows');

        if IsExists then ShowMessage('Windows文件夹存在!')

        else ShowMessage('Windows文件夹不存在!');

      end;

      7.DiskFree

      功能说明:获取指定磁盘的剩余空间。该函数只有一个参数。该参数用于指定要获取剩余空间的磁盘号。当参数为0时,表示获取当前磁盘的剩余空间,1为A盘,2为B盘,以此类推。如果返回值为-1,表示指定的磁盘无效。

      参考实例:

      var

        FreeSize: Int64;

      begin

        FreeSize := DiskFree(3); // 获取C盘中的剩余空间。返回的值是以“字节”为单位的。

      end;

      8.DiskSize

      功能说明:获取指定磁盘的空间。该函数只有一个参数。该参数用于指定要获取磁盘空间的磁盘号。当参数为0时,表示获取当前磁盘的空间,1为A盘,2为B盘,以此类推。如果返回值为-1,表示指定的磁盘无效。

      参考实例:

      var

        DiskSize: Int64;

      begin

        DiskSize:= DiskSize(3); // 获取C盘的空间。返回的值是以“字节”为单位的。

      end;

      9.EOF

      功能说明:判断文件指针是否移动到了文件未尾。当EOF函数返回值为True时,则不可以使用Readln函数进行读取文件了。

      参考实例:

      var

        S: String;

        AllText: String;

        F: TextFile;

      begin

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Reset(F); // 打开文件

        while not EOF(F) do begin // 使用While循环,一直判断是否到了文件未尾

         Readln(F, S); // 读取一行文本

         AllText := AllText + S;

        end;

      end;

      10.Erase

      功能说明:删除文件。

      参考实例:

      var

        F: File;

      begin

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Reset(F); // 打开文件

        CloseFile(F); // 关闭文件

        Erase(F); // 删除文件。在删除文件之前必须先关闭文件。

      end;

      11.FileExists

      功能说明:检测指定的文件否存在。如果存在则返回True,反之则为False。

      参考实例:

      var

        IsExists: Boolean;

      begin

        IsExists := FileExists('C:\Test.txt');

        if IsExists then ShowMessage('该文件存在!')

        else ShowMessage('该文件不存在!');

      end;

      12.FileSize

      功能说明:获取文件大小。返回的结果是字节为单位。

      参考实例:

      var

        F: file of Byte;

        nSize: Longint;

      begin

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Reset(F); // 打开文件

        nSize := FileSize(F); // 获取文件大小。

        CloseFile(F); // 关闭文件

      end;

      13.ForceDirectories

      功能说明:创建新的子目录。路径中不存在的目录将一同创建。

      参考实例:

      ForceDirectories('C:\Flash\MyFolder'); // 如果Flash文件夹本身不存的话,那么将会先创建Flash文件夹,然后再创建MyFolder文件夹。

      14.MkDir

      功能说明:创建一个新的子目录(文件夹)。

      参考实例:

      MkDir('C:\MyFolder'); // 在C盘根目录中创建了一个名叫MyFolder的文件夹。

      需要注意的是,如果在本身不存在的目录中创建子目录将会失败。比如C盘根本不存在Flash文件夹,写成MkDir('C:\Flash\MyFolder');这样将不能成功创建MyFolder文件夹。

      15.Reset

      功能说明:以只读方式打开文件。

      参考实例:

      var

        F: TextFile; // 声明文本文件类型变量

      begin

        AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Reset(F); // 打开文件

      end;

      16.Rewrite

      功能说明:以可写方式打开文件。如果文件不存在,将会自动创建。使用该函数,将会覆盖文件中的所有内容。

      参考实例:

      var

        F: TextFile; // 声明文本文件类型变量

      begin

        AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Rewrite(F); // 打开文件。如果文件不存在,将会在C盘中创建MyFile.txt文件。如果文件存在,将会覆盖MyFile.txt中的所有内容。

      end;

      17.Readln

      功能说明:读取一行文本。

      参考实例:

      var

        S: String;

        F: TextFile;

      begin

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Reset(F); // 打开文件

        Readln(F, S); // 读取一行文本到S变量中

      end;

      18.Rename

      功能说明:更改文件名。

      参考实例:

      var

        F: File;

      begin

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        ReName(F, 'C:\NewFile.txt'); // 更名为NewFile.txt

      end;

      19.Writeln

      功能说明:写入一行文本。

      参考实例:

      var

        S: String;

        F: TextFile;

      begin

        S := 'This is a book.';

      AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

        Rewrite(F); // 创建新文件

        Writeln(F, S); // 将S变量中的内容写入文本中。

      end;

      四、内存、指针操作函数

      在编程中,动态数组为我们处理数据带来了很大的方便。Windows API函数也为增强程序的功能提供了强有力的保障。当我们在使用这些动态数组及API函数时,常常需要动态分配内存空间,这样动态数组才能被我们使用,API函数才能正确的返回结果。因此,这些函数是必不可少的。

      1.AllocMem

      功能说明:分配内存空间并自动初始化为零。如果不需要初始化为零,可以使用GetMem代替AllocMem。

      参考实例:

      var

        Buffer: PChar;

      begin

        Buffer := AllocMem(256); // 分配大小为256个字节的内存空间

      end;

      2.Dispose

      功能说明:释放为指针分配的内存空间。

      参考实例:

      var

        P: Pinteger; // 声明一个Integer(整型)指针

      begin

        New(P);

        P^ := 100;

        Dispose(P) // 释放内存

      end;

      3.FreeMem

      功能说明:释放分配的内存空间。

      参考实例:

      var

        Buffer: Pchar;

      begin

        GetMem(Buffer, 256); // 分配大小为256个字节的内存空间。

        FreeMem(Buffer); // 释放内存空间

      end;

      4.GetMem

      功能说明:分配内存空间。

      参考实例:

      var

        Buffer: PChar;

      begin

        GetMem(Buffer, 256); // 分配大小为256个字节的内存空间。

      end;

      5.New

      功能说明:为指针分配内存空间。

      参考实例:

      var

        P: PInteger; // 声明一个Integer(整型)指针

      begin

        New(P); // 分配内存

        P^ := 100; // 赋值

      end;

      五、数学运算函数

      我们在编写跟数学紧密相关的程序时,数学运算函数将大有用处。比如图像处理软件,就会大量用到这些数学运算函数。

      默认情况下,Delphi新建的工程里,没有包含大多数的数学运行函数,因此需要在Uses中加入Math单元。

      1.Abs

      功能说明:求绝对值。

      参考实例:

      var

        r: Single;

        i: Integer;

      begin

        r := Abs(-2.8); // r等于 2.8

        i := Abs(-156); // I 等于 156

      end;

      2.Exp

      功能说明:Exp返回e的X次幂的值,其中e是一个自然对数基底。

      参考实例:

        e := Exp(1.0); // e为real型变量

      end;

      3.Floor

      功能说明:取得小于等于X的最大的整数。

      参考实例:

      Floor(-2.8) = -3

      Floor(2.8) = 2

      Floor(-1.0) = -1

      4.Int

      功能说明:返回参数中的整数部分。

      参考实例:

      var

        R: Real;

      begin

        R := Int(123.456); // R等于 123.0

        R := Int(-123.456); // R等于 -123.0

      end;

      5.Max(所在单元:Math)

      功能说明:比较两个数字,并返回最大的一个数字。

      参考实例:

      var

        k: Integer;

      begin

        k := Max(10, 20); // k将为20

      end;

      6.Min(所在单元:Math)

      功能说明:比较两个数字,并返回最小的一个数字。

      参考实例:

      var

        k: Integer;

      begin

        k := Min(10, 20); // k将为10

      end;

      7.PI

      功能说明:精确计算返回圆周率。

      参考实例:

      var

        x Extended;

      begin

        x := PI; // x等于3.1415926535897932385

      end;

      8.Round

      功能说明:对一个实数进行四舍五入。

      参考实例:

      var

        I, j: Integer;

      begin

        i := Round(1.25); // i等于1

        j := Round(1.62); // j等于2

      end;

      9.Sqr

      功能说明:取给定值的平方。

      参考实例:

      var

       i: Integer;

      begin

       i := Sqr(3); // i等于9

      end;

      六、日期函数

      对日期的处理,一般在有日期限制的共享、商业软件中经常使用到。如果你打算编写一款有日期限制的软件,熟悉使用下面的函数即可以实现。

      1.Date

      功能说明:返回当前的日期。

      参考实例:

      procedure TForm1.Button1Click(Sender: TObject);

      begin

        Label1.Caption := '今天是:' + DateToStr(Date);

      end;

      Label显示为:今天是2005年1月1日。

      2.DateToStr

      功能说明:将日期型转换为字符型。

      参考实例:

      var

        S: String;

      begin

        S := DateToStr(Date);

      end;

      3.DateTimeToStr

      功能说明:将DateTime型转换为字符型。

      参考实例:

      var

        S: String;

      begin

        S := DateTimeToStr(Now);

      end;

      4.DayOfTheMonth(所在单元:DateUtils)

      功能说明:获取指定日期的日。

      参考实例:

      Label1.Caption := IntToStr(DayOfTheMonth(Now));

      假设当前日期为2005年1月2日,那么Label将显示为2。

      5.DayOfTheWeek(所在单元:DateUtils)

      功能说明:根据指定日期,获取星期几。

      参考实例:

      Label1.Caption := IntToStr(DayOfTheMonth(Now));

      假设当前日期为2005年1月2日,那么Label将显示为7。根据返回的值来判断是周几。7表示星期天,1为星期一,依类类推。

      6.DayOfTheYear(所在单元:DateUtils)

      功能说明:根据指定日期,获取天数。

      参考实例:

      Label1.Caption := IntToStr(DayOfTheYear(Now));

      假设当前日期为2005年1月2日,那么Label将显示为2。表示是2005年的第2天。

      7.DayOf(所在单元:DateUtils)

      功能说明:根据指定的日期,返回日。

      参考实例:

      Label1.Caption := IntToStr(DayOf(Date));

      假设当前日期为2005年1月2日,那么Label将显示为2。

      8.IsLeapYear

      功能说明:根据指定的年,判断是否为闰年。可使用YearOf函数获取年。

      参考实例:

      procedure TForm1.Button1Click(Sender: TObject);

      begin

        if IsLeapYear(YearOf(Date)) then ShowMessage('是闰年')

        else ShowMessage('不是闰年');

      end;

      9.MonthOf(所在单元:DateUtils)

      功能说明:根据指定的日期,返回月份。

      参考实例:

      Label1.Caption := IntToStr(MonthOf(Date));

      假设当前日期为2005年1月2日,那么Label将显示为1。

      10.Now

      功能说明:返回当前日期及时间。

      参考实例:

      procedure TForm1.Button1Click(Sender: TObject);

      begin

        Label1.Caption := '现在是:' + DateTimeToStr(Now);

      end;

      11.YearOf(所在单元:DateUtils)

      功能说明:根据指定的日期,返回年。

      参考实例:

      Label1.Caption := IntToStr(YearOf(Date));

      假设当前日期为2005年1月2日,那么Label将显示为2005。

     

    http://www.tongyi.net/article/20050615/200506154265.shtml

  • API 文件处理函数

    2008-04-09 10:18:56

    //声明:
    GetWindowsDirectory(
      lpBuffer: PChar; {缓冲区}
      uSize: UINT      {缓冲区大小}
    ): UINT;           {返回实际长度}
    
    //举例: var arr: array[0..MAX_PATH] of Char; num: UINT; begin num := GetWindowsDirectory(arr, MAX_PATH); ShowMessage(arr); {C:\WINDOWS} ShowMessage(IntToStr(num)); {10} end;
    //声明:
    GetSystemDirectory(
      lpBuffer: PChar; {缓冲区}
      uSize: UINT      {缓冲区大小}
    ): UINT;           {返回实际长度}
    
    //举例: var arr: array[0..MAX_PATH] of Char; num: UINT; begin num := GetSystemDirectory(arr, MAX_PATH); ShowMessage(arr); {C:\WINDOWS\system32} ShowMessage(IntToStr(num)); {19} end;
    //声明:
    GetTempPath(
      nBufferLength: DWORD; {缓冲区大小}
      lpBuffer: PChar       {缓冲区}
    ): DWORD;               {返回实际长度}
    
    //举例: var arr: array[0..MAX_PATH] of Char; num: DWORD; begin num := GetTempPath(MAX_PATH, arr); ShowMessage(arr); {C:\DOCUME~1\wy\LOCALS~1\Temp\} ShowMessage(IntToStr(num)); {29} end;
    //声明:
    GetTempFileName(
      lpPathName: PChar;     {路径}
      lpPrefixString: PChar; {前缀}
      uUnique: UINT;         {指定生成文件名的数字, 文件名将根据参数2、参数3来生成}
      lpTempFileName: PChar  {文件名需要的缓冲区}
    ): UINT;                 {指定生成文件名的数字, 如果参数3是0, 则返回文件名长度}
    
    //举例: var p,f: array[0..MAX_PATH] of Char; begin GetTempPath(MAX_PATH, p); GetTempFileName(p, '~My', 16, f); {因为16的十六进制是10, 文件名会是: ~My10.tmp} ShowMessage(f); {C:\DOCUME~1\wy\LOCALS~1\Temp\~My10.tmp} end;
    //声明:
    CopyFile(
      lpExistingFileName: PChar; {源文件}
      lpNewFileName: PChar;	     {目标文件}
      bFailIfExists: BOOL        {如果目标文件存在, True: 失败; False: 覆盖}
    ): BOOL;
    
    //例1: begin CopyFile('c:\BOOTLOG.TXT', 'c:\temp\BOOTLOG.TXT', True); end;
    //例2: var ExistFile, NewFile: string; begin ExistFile := 'c:\BOOTLOG.TXT'; NewFile := 'c:\temp\BOOTLOG.TXT'; if CopyFile(PChar(ExistFile), PChar(NewFile), True) then ShowMessage('复制成功'); end;
    //声明:
    CreateDirectory(
      lpPathName: PChar;                        {目录名}
      lpSecurityAttributes: PSecurityAttributes {TSecurityAttributes 结构的指针}
    ): BOOL;
    
    //TSecurityAttributes 是 _SECURITY_ATTRIBUTES 结构的重定义
    _SECURITY_ATTRIBUTES = record
      nLength: DWORD;                {结构体的大小}
      lpSecurityDescrīptor: Pointer; {安全描述}
      bInheritHandle: BOOL;          {安全描述的对象能否被新创建的进程继承}
    end;
    
    //举例: var dir: string; begin dir := 'c:\temp\TestDir'; CreateDirectory(PChar(dir), nil); {第二个参数一般设为 nil, 表示使用系统默认的安全属性} end;
    //声明:
    CreateDirectoryEx (
      lpTemplateDirectory: PChar;               {模版目录名}
      lpPathName: PChar;                        {新目录名}
      lpSecurityAttributes: PSecurityAttributes {TSecurityAttributes 结构的指针}
    ): BOOL;						
    
    //TSecurityAttributes 是 _SECURITY_ATTRIBUTES 结构的重定义
    _SECURITY_ATTRIBUTES = record
      nLength: DWORD;                {结构体的大小}
      lpSecurityDescrīptor: Pointer; {安全描述}
      bInheritHandle: BOOL;          {安全描述的对象能否被新创建的进程继承}
    end;
    
    //举例: var TDir,Dir: string; begin TDir := 'c:\temp\Test'; {假如模版目录是隐藏的} Dir := 'c:\temp\NewDir'; {创建的新目录也是隐藏的} CreateDirectoryEx(PChar(TDir), PChar(Dir), nil); {如果不需要模版, 可以:} //CreateDirectoryEx(nil, PChar(Dir), nil); end;
    //声明:
    RemoveDirectory(
      lpPathName: PAnsiChar {目录名}
    ): BOOL;	
    
    //举例: var Dir: string; begin Dir := 'c:\temp\Test'; if RemoveDirectory(PChar(Dir)) then ShowMessage(Dir + ' 已被删除') else ShowMessage('删除失败, 可能是 ' + Dir + ' 不存在或不为空'); end;
    //声明:
    SetCurrentDirectory(
      lpPathName: PAnsiChar {路径名}
    ): BOOL;
    
    GetCurrentDirectory(
      nBufferLength: DWORD; {缓冲区大小}
      lpBuffer: PAnsiChar   {缓冲区}
    ): DWORD;               {返回目录实际长度}			
    
    //举例: var buf: array[0..MAX_PATH] of Char; begin SetCurrentDirectory('c:\temp'); GetCurrentDirectory(SizeOf(buf), buf); ShowMessage(buf); {c:\temp} end;
    //声明:
    SetVolumeLabel(
      lpRootPathName: PChar; {根路径}
      lpVolumeName: PChar    {新卷标指针, nil 表示删除卷标}
    ): BOOL;
    
    //举例: begin SetVolumeLabel('c:\', 'NewLabel'); end;
    http://www.cnblogs.com/del/category/122469.html
     
  • D快捷键

    2008-04-07 15:13:27

    ●代码模板:      CTRL+J 
    ●代码整块移动 : CTRL+SHIFT+I(右移) CTRL+SHIFT+U(左移)
    ●选中窗体 :     先选中任一控件,SHIFT+鼠标左键
    ●将鼠标指向变量名、单元名、类名,再用 CTRL+鼠标左键 可找到相应的说明
    ●在过程、函数、事件内部, SHIFT+CTRL+向上的方向键  可跳跃到相应的过程、函数、事件的定义 
    ●相反,在过程、函数、事件的定义处,SHIFT+CTRL+向下的方向键 可跳跃到具体过程、函数、事件内部
    ●CTRL+ SHIFT + C:编写申明或者补上函数.
      如:
    程序代码 程序代码
     procedure TT.A(AA: string);  //函数申明
      安下:CTRL+ SHIFT + C后,会写上
      procedure TT.A(AA: string);
      begin
      end;

    ●SHIFT+CTRL+E 显示 EXPLORER ,我觉的这个比较好 
    ●用crtl+d就可以做到代码排列,比这个要方便多了,当然里面还有其它的功能这里添加
    ●shift +f12 快速查找窗体并打开
    ●f11 属性
    ●f9运行
    ●crtl+f9 编译
    ●crtl + shift + n (n=1,2,3,4......)定义书签 
    ●crtl + n (n=1,2,3,4......)跳到书签n  

    引用内容 引用内容
    下面的快捷键大部分在Delphi 7.0的菜单中找不到,其中有一些还是非常有用的。



    ●Ctrl+PageUp      将光标移至本屏的第一行,屏幕不滚动。
    ●Ctrl+PageDown    将光标移至本屏的最后一行,屏幕不滚动。
    ●Ctrl+↓          向下滚动屏幕,光标跟随滚动不出本屏。
    ●Ctrl+↑          向上滚动屏幕,光标跟随滚动不出本屏。
    ●Ctrl+Home         将光标移至文件头。
    ●Ctrl+End            将光标移至文件尾。
    ●Ctrl+B                Buffer List窗口。
    ●Ctrl+I                 同Tab键。
    ●Ctrl+M                同Enter键。
    ●Ctrl+N                同Enter键,但光标位置保持不变。
    ●Ctrl+T                删除光标右边的一个单词。
    ●Ctrl+Y                删除光标所在行。

    ●Ctrl+Shift+G     插入GUID。
    ●Ctrl+Shift+J     弹出Delphi语句提示窗口,选择所需语句将自动完成一条语句。
    ●Ctrl+Shift+T     在光标行加入To-Do注释。
    ●Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本。

    ●Ctrl+F3          Call Stack窗口。
    ●Ctrl+F4          等于File菜单中的Close项。

    ●Ctrl+鼠标转轮    加速滚屏。

    ●Shift+F8         调试时弹出CPU窗口。
    ●Shift+F10        等于鼠标右键(Windows快捷键)。

    ●Alt+F4           关闭所有编辑框中打开的源程序文件,但不关闭项目。
    ●CTRL+Z 还原(Undo) 
    ●CTRL+ENTER 定位到单元文件
    ●Ctrl+Alt+c  注释块
    ●Ctrl+Alt+u  取消注释块

    ●Shitf+箭头 选择 
    如果同时按住Alt +Shitf+箭头, 再进行选择, 则是一种区域选择, 而不是行选择, 粘贴的
    时候也就是插入粘贴了. 
    ●F8 STEP OVER (步进式调试不进入子过程)
    ●F7 TRACE INTO (步进式调试同时追踪进入子过程)
    ●F11,F12 切换EDITOR,INSPECTOR,FORM DESIGNER. 
    ●CTRL+ALT+F11 弹出工程管理器 
    ●怎样跳格呢? 其实也是有办法的, 就是CTRL+K,I向后, CTRL+K,U向前. 
    ●有时候反复输入什么东西是不是很繁? CTRL+SHIFT+R录制键盘宏, 比如我经常做的就是: 
    下箭头-下箭头-HOME-回车-CTRL+V, 再键入一次CTRL+SHIFT+R录制完成, 之后您可以使用
    CTRL+SHIFT+P, 重复宏,还是省了一些事的. 

    另外还有一些快捷都是很少用到的, 我一时也想不起来, 您要是有兴趣就在帮助索引中输入 "Classic keystroke mapping", 自己查看吧. 

    http://www.shinian10.com/article.asp?id=209

     

     1.SHIFT+鼠标左键    先选中任一控件,按键后可选中窗体(选中控件后按Esc效果一样)
    2.Shift+F8          调试时弹出CPU窗口。
    3.Shift+F10         等于鼠标右键(Windows快捷键)。
    4.Shitf+箭头        选择
    5.shift +F12        快速查找窗体并打开
    6.F7               (步进式调试同时追踪进入子过程)
    7.F8               (步进式调试不进入子过程)
    8.F9                运行
    9.F12               切换EDITOR,form
    10.Alt+F4           关闭所有编辑框中打开的源程序文件,但不关闭项目
    11.ALT+鼠标左键      可以块选代码,用来删除对齐的重复代码非常有用
    12.Ctrl+F9          编译
    13.Ctrl+shift+N(n=1,2,3,4......)  定义书签
    14.Ctrl+n(n=1,2,3,4......)跳到书签n
    15.CTRL +SHIFT+N    在书签N处,再按一次 取消书签
    16.Ctrl+PageUp      将光标移至本屏的第一行,屏幕不滚动
    17.Ctrl+PageDown    将光标移至本屏的最后一行,屏幕不滚动
    18.Ctrl+↓          向下滚动屏幕,光标跟随滚动不出本屏
    19.Ctrl+↑          向上滚动屏幕,光标跟随滚动不出本屏
    20.Ctrl+Home        将光标移至文件头
    21.Ctrl+End         将光标移至文件尾
    22.Ctrl+B           Buffer List窗口
    23.Ctrl+I           同Tab键
    24.CTRL+J           (弹出Delphi语句提示窗口,选择所需语句将自动完成一条语句)代码模板
    25.Ctrl+M           同Enter键。
    26.Ctrl+N           同Enter键,但光标位置保持不变
    27.Ctrl+T           删除光标右边的一个单词
    28.Ctrl+Y           删除光标所在行
    29.CTRL+C           复制
    30.CTRL+V           粘贴
    31.CTRL+X           剪切
    32.CTRL+Z           还原(Undo)
    33.CTRL+S           保存
    34.Ctrl+F           查找
    35.Ctrl+L           继续查找
    36.Ctrl+r           替换
    37.CTRL+ENTER       定位到单元文件
    38.Ctrl+F3          弹出Call Stack窗口
    39.Ctrl+F4          等于File菜单中的Close项
    40.Ctrl+Backspace   后退删除一个词,直到遇到一个分割符
    41.Ctrl+鼠标转轮    加速滚屏
    42.Ctrl+O+U         切换选择块的大小写(注意松开O后再按U,Ctrl保持按下)
    43.Ctrl+K+O         切换选择块为小写(注意松开K后再按O,Ctrl保持按下)
    44.Ctrl+K+N         切换选择块为大写(注意松开K后再按N,Ctrl保持按下)
    45.Ctrl+Shift+G     插入GUID
    46.Ctrl+Shift+T     在光标行加入To-Do注释
    47.Ctrl+Shift+Y     删除光标之后至本行末尾之间的文本
    48.CTRL+SHIFT+C     编写申明或者补上函数,绝好!!!
    49.CTRL+SHIFT+E     显示EXPLORER
    50.Ctrl+Tab         在Inspector中切换Properties页和Events页
    51.CTRL+SHIFT+U     代码整块左移2个空格位置
    52.CTRL+SHIFT+I     代码整块右移2个空格位置
    53.CTRL+SHIFT+↑    在过程、函数、事件内部, 可跳跃到相应的过程、函数、事
                        件的定义(在interface和implementation之间来回切换)
    54.CTRL+SHIFT+↓    在过程、函数、事件的定义处, 可跳跃到具体过程、函数、事件内部(同上)
    55.Tab              在object inspector窗口按tab键将光标移动到属性名区,然后键入属性名的开头
                        字母可快速定位到该属性
    56.Ctrl+Alt         按着Ctrl+Alt之后,可用鼠标选择一个矩形块中的代码,
                        并可比它进行复制,粘贴
    57.Shift+↓、↑、→、← 以1像素单位更改所选控件大小
    58.Ctrl+↓、↑、→、←以1像素单位更改所选控件位置
    59.Ctrl+E           快速选择(呵呵,试试吧,很好玩的) 
    http://www.moon-soft.com/program/bbs/readelite902320.htm

     

  • Sambassadeur - Dead Leaves

    2008-04-07 14:07:15





            Sambassadeur虽然没有显赫的来历,但音乐上多承袭Acid House Kings、Club 8,甚至The Radio Dept.、JAMC、My Bloody Valentine等人的清新噪音吉他,自然不会受到歌迷的冷落。我喜欢他们那份漫不经心的敲打.喜欢那份嗓音间的空白..男生&女生,阳光和温暖就这么在身边挥洒开来....









    Sambassadeur - Dead Leaves.mp3 (4,903 KB) 






    Sambassadeur - Dead Leaves - 西祠胡同
    http://www.xici.net/b753280/d50474148.htm
  • I cry

    2008-04-01 14:07:02

    【音乐推荐】——我哭泣 I cry-Shayne Ward  [2008-3-7] 推荐指数#3

    这是一首旋律一响起就能被吸引住的歌曲,
    细细体会里面的词曲和意境:

    如果在这样一个百无聊赖的夜晚,或者一个人潮簇拥的路口,
    忽然想起那已然离开的爱人,思念,后悔,无奈。
    只盼能有时光倒流又或是马上就到世界的尽头,
    让一切重来,或让一切消失,从不曾发生过。

    如果不可以呢
    那只有继续,
    生活下去。

    此时,你会忽然想哭泣吗?

     

    [I CRY]

    You said goodbye, I fell apart
    I fell from all we had
    To I never knew, I needed you so bad
    You need to let things go, I know you told me so
    I’ve been through hell, to break the spell
    Why did I ever let you slip away
    Can’t stand another day without you
    Without the feeling, I once knew
    I cry silently, I cry inside of me
    I cry hopelessly
    Cause I know I’ll never breathe your love again
    I cry, cause you’re not here with me
    Cause I’m lonely as can be
    Cause I know I’ll never breathe your love again
    If you could see me now
    You would know just how
    How hard I try, not to wonder why
    I wish I could believe in something new
    Oh, please somebody tell me it’s not true (oh girl)
    I’ll never be over you
    Why did I ever let you slip away
    Can’t stand another day without you
    Without the feeling, I once knew
    Oooooh
    I cry silently, Ooh, I cry inside of me
    I cry hopelessly
    Cause I know I’ll never breathe your love again
    I cry, cause you’re not here with me
    Cause I’m lonely as can be yeah
    Cause I know I’ll never breathe your love again yeah
    If I could have you back tomorrow
    If I could lose the pain and sorrow
    I would do just anything
    To make you see, you still love me
    Oooooh Ooooh
    Cause I know I’ll never breathe your love again
    I cry silently, Ooh, I cry inside of me
    I cry hopelessly
    Cause I never no no never breathe your love again
    I cry, cause you’re not here with me
    Cause I’m lonely as can be yeah
    Cause I know I’ll never breathe your love
    Know I’ll never breathe your love again

     

    [我哭泣]

    你说了再见
    我感到心被撕裂了
    我失去了与你共有的一切
    我从来不知道 我是这么需要你

    你得就此放手
    这我明白 你也说过
    打破这个魔咒
    我有如身处炼狱

    为什么我竟会让你悄悄远去
    无法多忍受一天没有你的日子
    无法忍受失去我曾熟悉的感觉

    我静静的哭泣着
    我在心里哭泣着
    我绝望的哭泣着
    因为我知道再也呼吸不到你的爱意
    我哭泣 因为你不在身边
    我哭泣 因为我寂寞孤单
    我绝望的哭
    因为我知道再也无法呼吸不到你的爱意
    如果你现在就能看到我
    你就会立刻明白
    我有多努力
    试着不去想为什么

    我但愿能够有个新的信仰
    喔!谁来告诉我这不是真的(喔!女孩)
    我永远也无法将你忘怀

    为什么我竟会让你悄悄得远去
    无法多忍受一天没有你的日子
    无法忍受失去我曾熟悉的感觉

    如果明天你就能回到我的身边
    如果我能不在痛苦悲伤
    我会用尽一切努力
    让你知道 你依然爱着我

    -------以下歌手资料摘自网上-------

     1984年10月16日出生于英国曼彻斯特,夏恩华德(Shayne Ward)是家中最小的男孩。家里经济状况不是很好,没有太多零用钱的夏恩,绝大多数的时间,都是靠电台播放的流行乐、节奏蓝调歌曲汲取音乐能量。16岁时,夏恩加入了一个重唱组合-命运(Destiny)乐团,2004年,命运乐团报名参加“The X Factor”第一届试唱甄选,但是并没有入选,一年后,夏恩决定以个人身分报名,这一回却出现重大转变,他一路过关斩将,最终赢得了“The X Factor”2005年赛季的冠军。
       在赢得“The X Factor”歌唱比赛后,夏恩在2005年圣诞假期推出个人首支单曲That’s My Goal,这首真情涌现的感人佳作以31万3千多张销售创下英国唱片史上单曲首日最畅销单曲第三名纪录,发行首周空降英国金榜冠军,并跨年蝉联4周之久。随后,夏恩华德展开首张专辑【Shayne Ward】的录制工作,参予创作与制作的Steve Mac、Per & David、Cutfather & Joe、Quiz/Larossi都是当今乐坛的金曲制造机,他们打造过西城男孩(Westlife)、葛瑞盖斯(Gareth Gates)、美声男伶(Il Divo)等艺人畅销专辑,以精致的风格营造动人情境,为夏恩的深情歌声提供最佳的演唱空间,无论是Brian McKnight的Back At One、K-Ci & JoJo的All My Life这类灵魂情歌,或是80年代澳洲乐团Moving Pictures的抒情摇滚What About Me,夏恩都能褪去它们原来的灵魂味、摇滚味,成了一首首动人的都会情歌。
      2006年4月底专辑初登场就抢下英国金榜冠军,除了收录成名曲That’s My Goal,还有攻占英国金榜亚军的伤心情歌No Promises,以及第三深情主打Stand By Me,夏恩找到了梦想,接着,他要用歌声感动我们,永远的感动我们。

     

     

     

  • 你的怀里

    2008-04-01 11:41:40

    互相紧紧的抱着.

    喜欢看着访问数量一次次的增加

    知道大家都会留意着这里

    可是随着数量的增加,我的废话增多

    我越来越不喜欢看到数量

    以后慢慢改为手写日记

    曾经

    曾经的曾经

    我写过很多日记

    不过都已过去.

    想着清明节放假三天

    去做什么好玩的呢?

    梦幻吧,那里还有好几个公主等着我...

    还有大富翁online

    老是被某人弄破产...

    http://media.kotoo.com/mfiles/239742/239742_2008-2-4-13-31-05.mp3

    送上一首歌.

    突然发现一直没有给老公起个好名字

    以后叫什么呢?

    思考...

    愚人节快乐!~

    很想配着这个音乐写些煽情的文字,

    可惜我天生不会表达

    听歌吧,粉推荐这首.

    昨天还把某人拖到了黑名单

    唉.

     

     

  • 很想

    2008-03-31 17:54:14

    很想很想和每个我想抱的人熊抱一下

    然后我就离开.

  • 句柄

    2008-03-31 12:00:37

     
    句柄并没有什么神奇之处,不管哪种句柄,实际都是一个整数。它标识一种资源,如窗口、位图等等。就象你找一个人,必须知道它的地址一样,如果你要操作一种资源,必须先获得句柄。
        
    “取窗口句柄()”并不是只能取出窗口的句柄,所有窗口控件,如编辑框、标签等都可以用本命令取出自己的句柄,如:

         编辑框1.取窗口句柄()
         标签1.取窗口句柄()
    控件的句柄同样,不知你明白了没有?我个人理解是任何控件都有它自身的特有属性,句柄也就指它的特有属性(包括共性)。好像人有男女之分,要找男人一定是找有特有性别的人,也就是能区分不是女人的特性的人。

    “句柄”(handle)
          handle的本意是把柄,把手的意思。是你与操作系统打交道的
    东东。举个通俗的例子,比如你考上了大学,入学后,学校(操作系统)会给你一个学生
    证号。注意,这个号码是学校指定的,你无法自选。有了这个号码(学生证,假设一证多用)
    享受学校提供的服务:如你就可以去图书馆借书,去食堂吃饭,去教室上课等等。但你不能
    到食堂里买啤酒,因为学校不允许这种服务。而在计算机中系统提供的服务就是API调用,
    你有了HANDLE,就可以理直气壮地向系统提出调用API的服务。
    而指针的权力就大多了,有了指针你可以到处去喝酒,打架,学校(操作系统)管不着,所以
    句柄和指针的区别在于句柄只能调用系统提供的服务。而句柄虽然是一个能相互区别的号码,
    但与我们普通的ID号又有区别,普通的ID号是可以由程序员自己定义的,而句柄不行,它是
    对象生成时系统指定的,是为了区别系统中存在的各个对象,这个句柄不是由程序员符给的.
  • 颓废寻找温情

    2008-03-29 10:12:16

    move on now
    歌手:hard-fi     专辑:stars of cctv

    Baby, Baby i think its time we move on now
    Baby, Baby i think its time we move on now

    Looking out my bedroom window
    See the planes take off from Heathrow
    one by one they come and go
    on and on on and on

    I think about the places i'd go
    I think about this place i call home
    All the shots and all that come
    all around all around

    Red light blinking in the twighlight
    tracing in a path right out of here and now
    Red light blinking in the twighlight
    tracing in a path right out of here and now

    Baby, Baby i think its time we move on now
    Baby, Baby i think its time we move on now

    Don't you think its quiet around here
    Doesn't seem so much to do here
    Thinking back to this time last year
    Good times good times good times
    Don't you think we stay for too long
    Don't you think the colour has gone
    Get on a plane it can't be wrong
    Moving on, Moving on

    Red light blinking in the twighlight
    tracing in a path right out of here and now
    Red light blinking in the twighlight
    tracing in a path right out of here and now

    Baby, Baby i think its time we move on now
    Baby, Baby i think its time we move on now

    Baby, Baby i think its time we move on now
    Baby, Baby i think its time we move on now
    Baby, Baby
    Baby, Baby
    Baby, Baby i think its time we move on now

    Those things they look empty
    But wait til it all comes down
    Nothings going on round here
    Its time we let it change
    Got a feeling my love
    We've gotta get out
    Before it brings us down (down down)

     

    http://www.thevulgarbulgar.com/music/moveon.mp3

  • 你的房子买贵了吗?

    2008-03-29 09:38:26

    是否买贵的因素对比:

    1、你所在的地域分类

      (1)、北京、上海、深圳-->地域A

      (2)、除了上面三个城市的其他区域-->地域B

    2、新房or二手房

       A类的这两种房价都很贵

      B类的还是新房好些

    3、首付几成

        原来开始2成,后来慢慢3成,现在首付要四成-->国家在控制买房和炒房

    4、银行贷款

      现在深圳的二手房中国银行已经不再提供贷款,貌似别的有些银行也不提供

      新房的也有相关控制

    5、利息

      注意等额和等息,每年利率都在调整

    6、当地房租

      房租和你还房子贷款是否相等?

      尽量使其相等,这样好处:

       (1)不影响你的正常生活,买房和租房使用的银子基本一样

      (2)既然买房和租房差不多,为啥不买房?换句话说,租房就是替别人还房贷

        买房最后你能得到一套房子,可是租房无。。。

      (3)买房和租房,当然是买房有安定感

        我有一同事,一年搬了四次家,而且每次搬家,东西越搬越多。。。

    分析一下现在房价下跌看看你买的房子值不值

    看看你买的房价和现在房价对比:(和中介标的价格)

      i、低,肯定值;

      ii、一样,若是你炒房肯定不值了,资金积压,周转不开;

          但自住,肯定值,你想想,你住了多久?房租现在涨了多少呢?还了贷款多少呢?

     iii、贵,真的贵了吗?

        前面说的很清楚,大家现在只看标价,其实中介的标价只能参考,不可信,因为中介往往把最低的标在外面为了吸引顾客,等你进去了,就会告诉你,没有了,然后唧唧歪歪给你推荐别的房子;

        即使有这样的房子,一般都是业主急需cash,会让你一次性付清,再想想有银行贷款吗?几成呢?换句话说,业主不好卖,想买的不好买;

     最重要的是看你的户型、位置、交通、超市、采光、通风这几个关键因素,如果这几个都具有,那么恭喜你,你捡到金子乐!若是在地皮少还要填海的城市,比如深圳,那么,还用我来说吗?

    综上所述,你就能知道你买的房子值不值乐

    本文仅供参考,独家见解,请勿抨击。

     

  • 一位软件工程师的6年总结

    2008-03-27 17:01:34

     一位软件工程师的6年总结   文章指数:0  CSDN Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类型;满分100,每月更新一次。
    一位软件工程师的6年总结

    作者:成晓旭

    (声明:欢迎转载,请保证文章的完整性)

    “又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。

    谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK 、TYF、LGL、CHL、CDY、CB、DPD。

    1、 分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!

    2、 一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。

    3、 软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。

    4、 详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。

    5、 书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。

    6、 不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!
     
    7、 在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。

    8、 养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员而言,有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是,最好还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。

    9、 理论与实践并重,内外双修。工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。

    10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开发的产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具,5、6年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术和思想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大家都懂,但有多少人真正能做到呢?

    11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、通信、网络等方面的技术,反过来也是一样。如果当他别人拿着合同找你合作,你却这也不会,那也不熟时,你将后悔莫及。

    12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明: “对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。可见,掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识,有空花时间看看,韬光养晦、未雨绸缪。

    13、本文的总结与反思:

    A:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。

    B:提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。

    C:在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友。

    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1853575

  • 【love's】天才的音域·心动的力量{最爱Taio Cruz}0

    2008-03-27 09:04:38

    1. I'll Never Love Again



    依旧是心情。如果你喜欢,你可以看。如果你不喜欢。
    请你忽略不计。因为自己实在不想删去什么去取悦谁了。
    原谅我这样严重的语气。只是因为太多的杂言碎语,
    让我有点承受不起。如果真的有什么的话,
    请直接说就好了。毕竟我的承受能力还好,不会生气。
    只是,不喜欢通过其他的方式,听到这些。
    这一张专,算是最近收到的最喜欢的一张了。
    希望各位也喜欢。依旧是心情故事。没什么其他的。
    也算是发泄了吧。最近听佛乐。一时有点不适应。
    收到了Ellen的信息,四年。恩。四年了。
    四年前,说了如歌名一样的话,现在不是了。
    什么都会改变,如同自己一样。知道什么都会变的。
    我们都一样。所以什么都好。一切都好。


    2. I Just Wanna Know



    很多东西,知道还不如不知道。就如现在一样。
    接到老师的电话,听到声音,竟然也语塞。
    一年。两年。或许三年。日子就这样过去了。
    樱花开了吗?是否依然是记忆里的美好?
    我只是想知道。那些花开的时候的声音,到底是什么。
    是细细的还是什么的呢?武大的花开了。
    以前可以随便进入的,现在要门票。
    什么都在变着,人也在进步,看美国文学。
    看到了一个疯子。作家笔下的疯子,杀掉了一个人。
    我也只是想知道,在人有了错觉的时候,
    是不是还真的会有幻影?樱花寿命很短。一次灿烂!


    3. I Can Be



    老大发来信息,只是是因为今天没做事。
    有些汗。最近就这样糊涂着。
    准备的东西,什么都不知道了。语法没看。
    什么都没做。我只是希望自己可以成为什么。
    可还真的没想过会是什么。也怎么去做。
    开车到半路,看到路边的树开花了。
    竟也会停下来去看看。以前和家人一起去看花。
    这日子,一时不会有了。
    父亲一个朋友打来电话,问我有什么打算。
    其实我真的没什么打算,我就想一个人走走。
    不管去哪里。即使是走路去世界各地。
    我都愿意,可以成为什么呢?相信就好了。


    4. I Don't Wanna Fall in Love



    感觉这一首和第一首有些相似,一个是永远不爱。
    一个是不想去爱。这也是有差别的吧。
    赶紧下了保证,从明天起要做什么云云……
    和身边的人关系缓和了很多。
    让朋友们担心了,很不好意思。今天觉得人都挺搞笑。
    就这样细细写吧。可能在想为什么自己得不到。
    又或许其实自己也是在被人嫉妒的吧。
    至少很多东西,自己有,其他人没有。
    和同学一起聊,说到分数,可能什么都是看这个了。
    这一次,这个决定,一是为了缓和家人的催促。
    二是真的想去试试。不谈其他。只想好好努力一次。


    5. So Cold



    这一组图片,自己花了半天的时间打上字。
    结果呢,因为轻音系列一直都没更新。
    也就顺便拿来这里看看了。知道我交集的朋友,
    请不要看着着急了。因为是重复的图片的吧。
    不过也就重复了两张吧。希望一切都好。
    该休息了。依旧是翻译理论。什么都好。
    加油吧。二外。语法。基础。综合能力。
    什么都在说。给小老师电话,被骂。
    说是去得少,缺得多。恩。是。
    下一次,一定去。今天发现车里竟然很热。
    可能空调打高了。或许让自己冷冷也好。


    6. Fly Away



    想要飞翔。不过没翅膀。。。
    有一天和一位朋友说,可能会在飞机上遇到什么。
    她说,是一场艳遇。笑笑。没说什么。
    她和她最爱的那个人,就是这样的呢。
    只是我们不是相同的人,没有这样的期待。
    对的人总需要在一个对的时间出现。
    只是有距离。那天,也在冲动着呢。
    说不定真的可以跨越距离和时差去到那里。
    三月底了,花快开了,或者正在开了。
    一个美好的季节,那里是最美。
    傻朵,想多了。不太现实了。
    思维飞到了太平洋上空了。虽然穿着大木鞋。




    眼睛受不了了。就这样结束了吧。
    不是潦草,是因为实在坚持不了了。
    看书看到疯狂。下午听文学老师讲故事。
    突然觉得那个女人不是看起来那么老的。
    恩。是个美丽的女人。认真的女人最美丽。
    一直都这样想。哈。
    想起很多人。也不知道该怎么写了。
    音响开得小小的,怕影响周围的人了。
    明天应该是晴天,或许也该去运动了。
    让自己再放松点,再少想点。
    什么都好。如果可以,还真的希望什么都这样好好的。
    这样的淡淡的,这样安静的。
    在关心着别人,也在感受着关心。
    这样很好。我们都是一体的。
    即使没结果都好。至少有过记忆。
    一年了`恩。快一年了。
    一年的记忆,认识一年,还有满满的感动。
    什么都好。
    You are my star~!



    播放清单

    1. I'll Never Love Again



    2. I Just Wanna Know



    3. I Can Be



    4. I Don't Wanna Fall in Love



    5. So Cold



    6. Fly Away



    7. Moving On



    8. Come On Girl featuring Luciana



    9. Never Gonna Get Us



    10. She's Like A Star

  • 咽炎

    2008-03-26 23:28:08

    慢性咽炎是前段时间感冒咳嗽的遗留症状

    郁闷。

    好在的是感觉自己似乎向项目又理解乐一些些。。。

    加油!

    不过要继续增加技术学习。

    考虑一下如何发挥在地铁和公车上的时间安排。

    另外需要考虑合理安排时间和下班后学习时间。

    只有让自己变得强大起来才不会觉得一无是处。

    我们,唯有唯有真正改变自己才能去改变社会。

    恩,觉得还是思维有些混乱,应该再整理一下。

     

  • 奇怪。。。

    2008-03-24 00:01:26

    明明是技术博客

    却被我活生生的整成了生活流水帐+音乐。。。

    却每天还有这么多人来看。。。

    羞愧自己的技术

    尤其是留言说我是才女(对事不对人)

    恨不得钻到地缝里去。。。

    恩!

    自信!

    加油!

    明天周一,加油!~

    坚持、行动、多想、多做、主动!

    (应该正确的顺序是 主动、多想、行动、多做、坚持!)

    You are the best!

     

     

  • 收获

    2008-03-21 17:28:01

    终于

    明白

    收获

    精神

    豁然

    明了

    主动

    坚持

    行动

    多想

    少问

    感谢

    小菜

    否则

    抑郁

    良师

    益友

    至少

    还有

    你你

     

     

  • Unix命令大全

    2008-03-21 10:16:05

    http://www.21andy.com/blog/20060210/181.html

    1.登录工作站
    1.1 透过 PC 登录工作站
    执行格式:telnet hostname (在 dos 下执行)
    telnet ip-address
    Example:

    telnet doc telnet 140.122.77.120

    注: 可利用指令 arp hostname 或 arp domain_name 查询 ip_address

    1.2 登录步骤
    login : _______ > 输入 username

    password : _______ > 输入密码

    1.3 登出步骤

    % logout
    或 % exit
    或 %

    1.4 更改帐号密码

    % yppasswd > 执行后将会出现下列信息
    Changing NIS password for user on ice.
    Old password: ______ > 输入旧密码
    New password: ______ > 输入新密码(最好6-8字,英文字母与数字混合)
    Retype new password: ______ > 再输入一次密码

    1.5 在线帮助指令说明
    执行格式: man command-name

    Example: % man ls

    1.6 进入远端电脑系统
    执行格式:rlogin hostname [-1 username]
    Example:

    %rlogin doc
    remote login 进入工作站 doc 中。
    %rlogin doc -l user
    使用 user 帐号进入工作站 doc 中。

    执行格式:telnet hostname 或 telnet IP address
    Example:

    %telnet doc or %telnet 140.109.20.251

    2. 文件或目录处理
    2.1 列出文件或目录下之文件名称
    执行格式: ls [-atFlgR] [name] ( name 可为文件名或目录名称。)

    Example :

    ls 列出目前目录下之文件名。
    ls –a 列出包含以.起始的隐藏档所有文件名。
    ls –t 依照文件最后修改时间之顺序,依序列出文件名。
    ls –F 列出目前目录下之文件名及其类型。"/" 结尾表示为目录名称,

    "*" 结尾表示为执行档,"@" 结尾表示为 symblic link。

    ls –l 列出目录下所有文件之许可权、拥有者、文件大小、修改时间及名称。
    ls –lg 同上,并显示出文件之拥有者群组名称。
    ls –R 显示出目录下,以及其所有子目录之文件名。( recursive listing )

    2.2 目录之缩写:

    ~ 使用者 login 时的 working directory ( 起始目录 )
    ~username 指定某位 user 的 working directory ( 起始目录 )
    .. 目前的工作目录 ( current working directory )
    .. 目前目录的上一层目录 ( parent of working directory)

    2.3 改变工作目录位置
    执行格式:cd [name] :name 可为目录名称、路径或目录缩写。

    Example:

    cd 改变目录位置,至使用者 login 时的 working directory (起始目录)。
    cd dir1 改变目录位置,至 dir1 之目录位置下。
    cd ~user 改变目录位置,至使用者的 working directory (起始目录)。
    cd .. 改变目录位置,至目前目录的上层( 即 parent of working directory)
    cd ../user 改变目录位置,至相对路径 user 之目录位置下。
    cd /../.. 改变目录位置,至绝对路径( Full path ) 之目录位置下。

    2.4 复制文件
    执行格式: cp [-r] source destination

    Example:

    cp file1 file2 将文件 file1 复制成 file2
    cp file1 dir1 将文件 file1 复制到目录 dir1 下,文件名仍为 file1。
    cp /tmp/file1 将目录 /tmp 下的文件 file1 复制到现行目录下,文件名仍为 file1。
    cp /tmp/file1 file2 将目录 /tmp 下的文件 file1 复制到现行目录下,文件名为 file2
    cp -r dir1 dir2 (recursive copy) 复制整个目录。

    若目录 dir2 不存在,则将目录 dir1,及其所有文件和子目录,复制到目录 dir2 下,新目录名称为 dir1。若目录 dir2 不存在,则将dir1,及其所有文件和子目录,复制为目录 dir2。

    2.5 移动或更改文件、目录名称
    执行格式: mv source destination

    Example:

    mv file1 file2 将文件 file1,更改文件名为 file2。
    mv file1 dir1 将文件 file1,移到目录 dir1下,文件名仍为 file1。
    mv dir1 dir2 若目录 dir2 不存在,则将目录 dir1,及其所有文件和子目录,移到目录 dir2 下,新目录名称为 dir1。若目录 dir2 不存在,则将dir1,及其所有文件和子目录,更改为目录 dir2。

    2.6 建立新目录
    执行格式: mkdir directory-name

    Exmaple :

    mkdir dir1 建立一新目录 dir1。

    2.7 删除目录
    执行格式: rmdir directory-name 或 rm directory-name

    Example :

    rmdir dir1 删除目录 dir1,但 dir1 下必须没有文件存在,否则无法删除。
    rm -r dir1 删除目录 dir1,及其下所有文件及子目录。

    2.8 删除文件
    执行格式: rm filename (filename 可为文件名,或文件名缩写符号。)

    Example :

    rm file1 删除文件名为 file1 之文件。
    rm file? 删除文件名中有五个字符,前四个字符为file 之所有文件。
    rm f* 删除文件名中,以 f 为字首之所有文件。

    2.9 文件名的缩写符号
    ? 代表文件名称中之单一字符。
    * 代表文件名称中之一字串。

    2.10 列出目前所在之目录位置
    执行格式: pwd

    2.11 查看文件内容
    执行格式: cat filename
    Example :

    cat file1 以连续显示方式,查看文件名 file1 之内容。

    执行格式: more filename 或 cat filename | more
    Example :

    more file1 以分页方式,查看文件名 file1 之内容。
    cat file1 | more 同上。

    2.12 查看目录所占磁盘容量
    执行格式: du [-s] directory
    Example :

    du dir1 显示目录 dir1 的总容量及其次目录的容量(以 k byte 为容量)。
    du -s dir1 显示目录 dir1 的总容量。

    2.13 查看自己的 disk quota 使用状况
    disk quota : 工作站磁盘空间的使用限额。
    执行格式: quota -v
    Example :

    quota -v 将会显示下列信息
    Filesystem usage quota limit timeleft files quota limit timelef.
    /home/ice/u01 9344 8192 12288 1.9 days 160 0 0

    栏位解说:
    usage : 目前的磁盘用量。
    quota : 你的磁盘使用额度。当你的 usage 超过 quota 时,虽然可以继续使用,但是必须七天之内降到 quota 以下,否则即使用量没有超 limit(最高限额),也无法再写入或复制任何文件。
    limit : 最高使用额度。当你的 usage 达到 limit 时,无法再写入或复制任何文件。

    3. 文件传输
    3.1 拷贝文件或目录至远端工作站
    执行格式: rcp [-r] source hostnome:destination
    source 可为文件名、目录名或路径,hostnome 为工作站站名,destination 为路径名称.
    Example :

    rcp file1 doc:/home/user
    将文件 file1,拷贝到工作站 doc 路径 /home/user 之目录下。
    rcp -r dir1 doc:/home/user
    将目录 dir1,拷贝到工作站 doc 路径/home/user 之目录下。

    3.2 自远端工作站,拷贝文件或目录
    执行格式: rcp [-r] hostname:source destination
    ( hostname 为工作站名,source 为路径名,destination 可为文件名、目录名或路径 )。
    Example :

    rcp doc:/home/user/file1 file2
    将工作站 doc 中,位于 /home/user 目录下之目录 dir1,拷贝到目前工作站之目录下,目录名称仍为 dir1。
    rcp -r doc:/home/user/dir1 .
    将工作站 iis1 中,位于 /home/user 目录下之目录 dir1,拷贝到目前工作站之目录下目录名称仍为 dir1。

    3.3 本地工作站与远端工作站之间文件传输
    ( 必须拥有远端工作站之帐号及密码,才可进行传输工作 )
    执行格式: ftp hostname or ftp ip_address
    Example :

    ftp doc 与远端工作站 doc ,进行文件传输
    Name (doc:user-name) : 输入帐号
    Password (doc:user-name): 输入密码
    ftp> help 列出 ftp 文件传输,可使用之任何命令。
    ftp> !ls 列出本地工作站,目前目录下之所有文件名。
    ftp> !pwd 列出本地工作站,目前所在之工作目录位置。
    ftp> ls 列出远端工作站目前目录下之所有文件名。
    ftp> dir 列出远端工作站目前目录下之所有文件名(略同于 UNIX 的 ls -l 指令).
    ftp> dir . |more 同上,但每页会暂停(可能不适用 Unix 以外的 ftp)。
    ftp> pwd 列出远端工作站目前所在之目录位置。
    ftp> cd dir1 更改远端工作站之工作目录位置至 dir1 之下。
    ftp> get file1 将远端工作站之文件 file1 ,拷贝到本地工作站中。
    ftp> put file2 将本地工作站之文件 file2 ,拷贝到远端工作站中。
    ftp> mget *.c 将远端工作站中,副文件名为 c 之所有文件,拷贝到本地工作站中。
    ftp> mput *.txt 将本地工作站中,副文件名为 txt 之所有文件,拷贝远端工作站中。
    ftp> prompt 切换交谈式指令(使用 mput/mget 时不用每个文件皆询问yes/no)。
    ftp> quit 结束 ftp 工作。
    ftp> bye 结束 ftp 工作。

    注: 从PC与工作站间的文件传输也可透过在 PC端的 FTP指令进行文件传输,指令用法与上所述大致相同。

    4. 文件模式之设定
    4.1 改变文件或目录之读、写、执行之允许权
    执行格式:chmod [-R] mode name
    ( name 可为文件名或目录名;mode可为 3 个 8 位元之数字,或利用ls -l 命令,列出文件或目录之读、写、执行允许权之文字缩写。)
    mode : rwx rwx rwx r:read w:write x:execute
    user group other
    缩写 : (u) (g) (o)
    Example :

    %chmod 755 dir1
    将目录dir1,设定成任何使用者,皆有读取及执行之权利,但只有拥有者可做修改。
    %chmod 700 file1
    将文件file1,设定只有拥有者可以读、写和执行。
    %chmod o+x file2
    将文件file2,增加拥有者可以执行之权利。
    %chmod g+x file3
    将文件file3,增加群组使用者可执行之权利。
    %chmod o-r file4
    将文件file4,除去其它使用者可读取之权利。

    4.2 改变文件或目录之拥有权
    执行格式:chown [-R] username name ( name 可为文件名或目录名。)
    Example :

    %chown user file1
    将文件 file1 之拥有权,改为使用者 user 所有。
    %chown -R user dir1
    将目录 dir1,及其下所有文件和子目录之拥有权,改为使用者 user 所有。

    4.3 检查自己所属之群组名称
    执行格式:groups

    4.4 改变文件或目录之群组拥有权
    执行格式:chgrp [-R] groupname name ( name 可为文件名或目录名 )
    Example :

    %chgrp vlsi file1
    将文件 file1 之群组拥有权,改为 vlsi 群组。
    %chgrp -R image dir1
    将目录dir1,及其下所有文件和子目录,改为 image 群组。

    4.5 改变文件或目录之最后修改时间
    执行格式:touch name ( name 可为文件或目录名称。)

    4.6 文件之连结
    同一文件,可拥有一个以上之名称,可将文件做数个连结。
    执行格式:ln oldname newname ( Hard link )
    Example :

    ln file1 file2   将名称 file2,连结至文件 file1。

    执行格式:ln -s oldname newname ( Symblick link )
    Example :

    ln -s file3 file4 将名称 file4,连结至文件file3。

    4.7 文件之字串找寻
    执行格式:grep string file
    Example :

    grep abc file1

    寻找文件file1中,列出字串 abc 所在之整行文字内容。

    4.8 找寻文件或命令之路径
    执行格式:whereis command ( 显示命令之路径。)
    执行格式:which command ( 显示命令之路径,及使用者所定义之别名。)
    执行格式:whatis command ( 显示命令功能之摘要。)
    执行格式:find search-path -name filename -print
    ( 搜寻指定路径下,某文件之路径 。)
    Example :

    %find / -name file1 -print ( 自根目录下,寻找文件名为 file1 之路径。.

    4.9 比较文件或目录之内容
    执行格式:diff [-r] name1 name2 ( name1 name2 可同时为文件名,或目录名称。)
    Example :

    %diff file1 file2
    比较文件 file1 与 file2 内,各行之不同处。
    %diff -r dir1 dir2
    比较目录 dir1 与 dir2 内,各文件之不同处。

    4.10 文件打印输出
    使用者可用 .login 档中之 setenv PRINTER,来设定打印资料时的打印机名。
    printername :sp1 或 sp2
    Example :

    %setenv PRINTER sp2 设定自 sp2 打印资料。

    4.11 一般文件之打印
    执行格式:lpr [-Pprinter-name] filename
    %lpr file1 或 lpr -Psp2 file1
    自 sp2,打印文件 file1。
    执行格式:enscrīpt [-Pprinter-name] filename
    %enscrīpt file3 或 enscrīpt -Psp1 file3
    自 sp1 打印文件 file3。

    4.12 troff 文件之打印
    执行格式:ptroff [-Pprinter-name] [-man][-ms] filename

    %ptroff -man /usr/local/man/man1/ptroff.1
    以 troff 格式,自 Apple laser writer 打印 ptroff 命令之使用说明。
    %ptroff -Psp2 -man /usr/man/man1/lpr1
    以 troff 格式,自 sp2 打印 lpr 命令之使用说明。

    5. 打印机控制命令
    5.1 检查打印机状态,及打印工作顺序编号和使用者名称
    执行格式:lpq [-Pprinter -name]

    %lpq 或 lpq -Psp1
    检查 sp1 打印机之状态。

    5.2 删除打印机内之打印工作 (使用者仅可删除自己的打印工作 )
    执行格式:lprm [-Pprinter -name] username 或 job number

    %lprm user 或 lprm -Psp1 user
    删除 sp1 中,使用者 user 的打印工作,此时使用者名称必须为 user。
    %lprm -Psp2 456
    删除 sp2 编号为 456 之打印工作。

    6. Job 之控制
    UNIX O.S.,可于 foregrourd 及 background 同时处理多个 process。

    一般使用者执行命令时,皆是在 foreground 交谈式地执行 process,亦可将 process置于 background 中,以非交谈式来执行 process。

    6.1 查看系统之 process
    执行格式:ps [-aux]
    Example:

    %ps 或 ps –x (查看系统中,属于自己的 process。)
    %ps –au (查看系统中,所有使用者的 process。)
    %ps –aux (查看系统中,包含系统内部,及所有使用者的 process。)

    6.2 结束或终止 process
    执行格式:kill [-9] PID ( PID 为利用 ps 命令所查出之 process ID。)
    Example:

    %kill 456 或 kill -9 456
    终止 process ID 为 456 之 process。

    6.3 在 background 执行 process 的方式
    执行格式:command & (于 command 后面加入一 "&" 符号即可。)
    Example:

    %cc file1.c &
    将编译 file1.c 文件之工作,置于 background 执行。

    执行格式:按下 "Control Z" 键,暂停正在执行的 process。键入 "bg" 命令,将所暂停的 process,置入 background 中继续执行。
    Example:
    %cc file2.c
    ^Z
    Stopped
    %bg

    6.4 查看正在 background 中执行的 process
    执行格式:jobs

    6.5 结束或终止在 background 中的 process
    执行格式:kill %n
    (n 为利用 "jobs" 命令,所查看出的 background job 编号)
    Example:
    %kill % 终止在 background 中的第一个 job。
    %kill %2 终止在 background 中的第二个 job。

    7. shell varialbe
    7.1 查看 shell variable 之设定值
    执行格式:set 查看所有 shell variable 之设定值。
    %set
    执行格式:echo $variable-name 显示指定的 shell variable 之设定值。
    %echo $PRINTER
    sp1

    7.2 设定 shell variable
    执行格式:set var value
    Example:
    %set termvt100
    设定 shell variable "term" 为 VT100 终端机之型式。

    7.3 删除 shell variable
    执行格式:unset var
    Example:
    %unset PRINTER
    删除 shell variable "PRINTER" 之设定值。

    8. environment variable
    8.1 查看 environment variable 之设定值
    执行格式:setenv  查看所有 environment variable 之设定值。
    Example: %setenv
    执行格式:echo $NAME 显示指定的 environment variable "NAME" 之设定值。
    Example:
    %echo $PRINTER
    显示 environment variable "PRINTER" 打印机名称之设定值。

    8.2 设定 environment variable
    执行格式:setenv NAME word
    Example:
    %setenv PRINTER sp1
    设定 environment variable "PRINTER" 打印机名称为 sp1。

    8.3 删除 environment variable
    执行格式:unsetenv NAME
    Example:
    %unsetenv PRINTER
    删除 environment variable "PRINTER" 打印机名称之设定值。

    9. alias
    9.1 查看所定义的命令之 alias
    执行格式: alias 查看自己目前定义之所有命令,及所对应之 alias 名称。
    执行格式: alias name 查看指定之 alias 名称所定义之命令。
    Example:
    %alias dir (查看别名 dir 所定义之命令)
    ls -atl

    9.2 定义命令之 alias
    执行格式: alias name \'command line\'
    Example:
    % alias dir \'ls -l\'
    将命令 "ls - l" 定义别名为 dir。

    9.3 删除所定义之 alias
    执行格式: unalias name
    Example:
    %unalias dir (删除别名为 dir 之定义。)
    %unalias * (删除所有别名之设定。)

    10. history
    10.1 设定命令记录表之长度
    执行格式: set history n

    Example:

    %set history 40

    设定命令记录表之长度为 40 (可记载执行过之前面 40 个命令)。

    10.2查看命令记录表之内容
    执行格式: history

    10.3 使用命令记录表
    执行格式: !!

    Example: %!! (重复执行前一个命令)
    执行格式: !n ( n 为命令记录表之命令编号。)
    Example: %!5 ( 执行命令记录表中第五个命令。)
    执行格式: !string ( 重复前面执行过以 string 为起始字符之命令。)
    Example: %!cat ( 重复前面执行过,以 cat 为起始字符之命令。)

    10.4 显示前一个命令之内容
    执行格式: !!:p

    10.5 更改前一命令之内容并执行之
    执行格式: ^oldstring ^newstring
    将前一命令中 oldstring 的部份,改成 newstring,并执行之。
    Example:
    %find . -name file1.c -print
    ^file1.c^core
    %find . -name core -print
    注:文件 core 为执行程序或命令发生错误时,系统所产生的文件。作为侦错(debug)之,因其所占空间极大,通常将之删除。

    11. 资料之压缩
    为了避免不常用的文件或资料,占用太大的磁盘空间,请使用者将之压缩。欲使用压缩过的文件或资料前,将之反压缩,即可还原成原来之资料型式。凡是经过压缩处理之文件,会在文件名后面附加 " .Z " 之字符,表示此为一压缩文件。

    11.1 压缩资料
    执行格式:compress filename 压缩文件
    执行格式:compressdir directory-name 压缩目录

    11.2 解压缩还原资料

    执行格式:uncompress filename 反压缩文件
    执行格式:uncompressdir directory-name 反压缩目录

    12. pipe-line 之使用
    执行格式:command1 | command2
    将 command1 执行结果,送到 command2 做为 command2 的输入。
    Example:

    %ls -Rl | more
    以分页方式,列出目前目录下所有文件,及子目录之名称。
    %cat file1 | more
    以分页方式,列出文件 file1 之内容。

    13. I/O control
    13.1 标准输入之控制
    执行格式:command-line < file
    将 file 做为 command-line 之输入。
    Example:
    %mail -s "mail test" user@iis.sinica.edu.tw < file1
    将文件 file1 当做信件之内容,Subject 名称为 mail test,送给收信人。

    13.2 标准输出之控制
    执行格式:command > filename
    将 command 之执行结果,送至指定的 filename 中。
    Example: %ls -l > list
    将执行 "ls -l" 命令之结果,写入文件 list 中。
    执行格式:command >! filename
    同上,若 filename 之文件已经存在,则强迫 overwrite。
    Example: %ls -lg >! list
    将执行 "ls - lg" 命令之结果,强迫写入文件 list 中。
    执行格式:command >& filename
    将 command 执行时,屏幕上所产生的任何信息,写入指定的 filename 中。
    Example: %cc file1.c >& error
    将编译 file1.c 文件时,所产生之任何信息,写入文件 error 中。
    执行格式:command >> filename
    将 command 执行结果,附加(append)到指定的 filename 中。
    Example: %ls - lag >> list
    将执行 "ls - lag" 命令之结果,附加(append)到文件 list 中。
    执行格式:command >>& filename
    将 command 执行时,屏幕上所产生的任何信息,附加于指定的 filename中。
    Example: %cc file2.c >>& error
    将编译 file2.c 文件时,屏幕所产生之任何信息,附加于文件 error 中。

    14. 查看系统中的使用者
    执行格式: who 或 finger
    执行格式: w
    执行格式: finger username or finger username@domainname

    15. 改变自己的 username 进入其他使用者的帐号,拥有其使用权利。
    执行格式: su username
    Example:
    %su user 进入使用者 user 之帐号
    passwrod: 输入使用者 user 之密码

    16. 查看 username
    执行格式: whoami 查看 login 时,自己的 username。
    执行格式: whoami 查看目前的 username。若已执行过 "su"命令tch user),则显示出此 user 之 username。

    17. 查看目前本地所有工作站的使用者
    执行格式: rusers
    > 结束

    18. 与某工作站上的使用者交谈
    执行格式: talk username@hostname 或 talk username@ip_address
    Example:
    1. 可先利用 rusers 指令查看网路上的使用者
    2. 假设自己的帐号是 u84987 ,在工作站 indian 上使用,现在想要与 doc 上的u84123 交谈。
    %talk u84123@doc > 此时屏幕上将会出现等待画面
    在对方(u84123)屏幕上将会出现下列信息
    Message from Talk_Daemon@Local_host_name at xx:xx
    talk: connection requested by u84987@indian
    talk: respond with: talk u84987@indian
    此时对方(u84123) 必须执行 talk u84987@indian 即可互相交谈。最后可按结束。

    19. 检查远端电脑系统是否正常
    执行格式:ping hostname 或 ping IP-Address
    Example:
    %ping doc

    20. 电子邮件(E-mail)的使用简介
    20.1将文件当做 E-mail 的内容送出
    执行格式:mail -s "Subject-string" username@address < filename
    %mail -s "program" user < file.c
    将 file.c 当做 mail 的内容,送至 user, subject name 为 program。
    20.2 传送 E-mail 给本地使用者
    执行格式:mail username
    %mail user
    20.3 传送 E-mail 至 外地
    执行格式: mail username@receiver-address
    Example
    %mail paul@gate.sinica.edu.tw
    Subject : mail test
    :
    :
    键入信文内容
    :
    :
    按下 "Control D" 键或 " . " 键结束信文。
    连按两次 "Control C" 键,则中断工作,不送此信件。
    Cc:
    ( Carbon copy : 复制一份信文,给其他的收信人 )

    20.4 检查所传送之 E-mail 是否送出,或滞留于本所之邮件伺服站中
    执行格式:/usr/lib/sendmail -bp

    ( 若屏幕显示为 "Mail queue is empty" 之信息,表示 mail 已送出。

    若为其它错误信息,表示 E-mail 因故尚未送出。)

    20.5 读取信件
    执行格式: mail

    常用指令如下:

    cd [directory] chdir to directory or home if none given

    d [message list] delete messages

    h print out active message headers

    m [user list] mail to specific users

    n goto and type next message

    p [message list] print messages

    q quit, saving unresolved messages in mbox

    r [message list] reply to sender (only) of messages

    R [message list] reply to sender and all recipients of messages

    s [message list] file append messages to file

    t [message list] type messages (same as print)

    u [message list] undelete messages

    v [message list] edit messages with display editor

    w [message list] file append messages to file, without from line

    x quit, do not change system mailbox

    z [-] display next [previous] page of headers

    ! shell escape

    21.文件编辑器 vi 之使用方法简介
    vi、celvis(cvi) 是在工作站上被广大使用的中英文编辑软体。对初学者而言,常因其特殊的使用方法,而不得其门而入;对已经在使用 vi 的使用者来说,也常见因对 vi 的不熟悉或不够了解,而无法发挥出 vi 强大的编辑能力,以下将介绍 vi 之使用方法简介。

    21.1本文内容大纲
    进入 vi

    离开 vi

    输入模式

    如何进入输入模式

    如何离开输入模式

    指令模式

    光标的移动

    视窗的移动

    删除、复制及修改指令介绍(delete、change、yank)

    删除与修改(delete、replace)

    移动与复制(delete/put、yank/put)

    指令重复

    取消前一动作(undo)

    字串搜寻

    资料的连接与分行

    环境的设定

    ex 指令

    其它方面

    中文编辑

    恢复编辑时被中断的文件

    编辑多个文件

    vi 是 visual editor 的缩写,是 UNIX 所提供的编辑器之一。它提供使用者一个视窗的编辑环境,在此视窗下,使用者可编辑所要的文件。

    21.2 进入vi
    直接执行 vi编辑程序即可:

    %vi test

    此刻屏幕上会出现 vi 的编辑视窗,同时 vi 会将文件复制一份至记忆体中的缓冲区 (buffer) 。 vi会保留在磁盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。

    --------------------------------------------------------------------------------

    -- 作者:itvue
    -- 发布时间:2005-5-11 10:17:42

    --

    21.3 离开vi
    若在输入模式下,则先利用《ESC》进入指令模式,而后即可选用下列指令

    离开vi。

    :q! 离开vi,并放弃刚在缓冲区内编辑的内容。

    :wq 将缓冲区内的资料写入磁盘中,并离开vi。

    :ZZ 同wq。

    :x 同wq。

    :w 将缓冲区内的资料写入磁盘中,但并不离开vi。

    :q 离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容。

    此指令可与:w 配合使用。

    21.4 vi 的操作模式
    vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。当使用者进入 vi 后,即处在指令模式下,此刻键入之任何字符皆被视为指令。在此模式下可进行删除、修改等动作。若要输入资料,则需进入输入模式。

    21.5 输入模式
    如何进入输入模式

    l a (append) 由光标之后加入资料。

    l A 由该行之末加入资料。

    l i (insert) 由光标之前加入资料。

    l I 由该行之首加入资料。

    l o (open) 新增一行于该行之下供输入资料之用。

    l 新增一行于该行之上供输入资料之用。

    如何离开输入模式

    l 《ESC》 结束输入模式。

    21.6 指令模式
    光标之移动

    l h 向左移一个字符。

    l J 向上移一个字符。

    l K 向下移一个字符。

    l L 向右移一个字符。

    l 移至该行之首

    l $ 移至该行之末。

    l ^ 移至该行的第一个字符处。

    l H 移至视窗的第一列。

    l M 移至视窗的中间那列。

    l L 移至视窗的最后一列。

    l G 移至该文件的最后一列。

    l + 移至下一列的第一个字符处。

    l - 移至上一列的第一个字符处。

    l ( 移至该句之首。 (注一)

    l ) 移至该句之末。

    l { 移至该段落之首。 (注二)

    l } 移至该段落之末。

    l nG 移至该文件的第 n 列。

    l n+ 移至光标所在位置之后的第 n 列。

    l 移至光标所在位置之前的第 n 列。

    l 会显示该行之行号、文件名称、文件中最末行之行号、光标所在行号占总行号之百分比。

    注一:句子(sentence)在vi中是指以『!』、『.』或『?』结束的一串字。

    注二:段落(paragraph)在vi中是指以空白行隔开的文字。

    21.7 视窗的移动

    l 视窗往下卷一页。
    l 视窗往上卷一页。
    l 视窗往下卷半页。
    l 视窗往上卷半页。
    l 视窗往下卷一行。
    l 视窗往上卷一行。

    21.8 删除、复制及修改指令介绍 (此单元较少使用)
    d(delete)、c(change)和y(yank)这一类的指令在 vi 中的指令格式为:

    Operator + Scope command

    (运算子) (范围)

    运算子:

    l d 删除指令。删除资料,但会将删除资料复制到记忆体缓冲区。

    l y 将资料(字组、行列、句子或段落)复制到缓冲区。

    l p 放置(put)指令,与 d 和 y 配和使用。可将最后delete或yank的资料放置于光标所在位置之行列下。

    l c 修改(change)指令,类似delete与insert的组和。删除一个字组、句子等之资料,并插入新键资料。

    范围:

    l e 由光标所在位置至该字串的最后一个字符。

    l w 由光标所在位置至下一个字串的第一个字符。

    l b 由光标所在位置至前一个字串的第一个字符。

    l $ 由光标所在位置至该行的最后一个字符。

    l 由光标所在位置至该行的第一个字符。

    l ) 由光标所在位置至下一个句子的第一个字符。

    l ( 由光标所在位置至该句子的第一个字符。

    l { 由光标所在位置至该段落的最后一个字符。

    l } 由光标所在位置至该段落的第一个字符。

    整行动作:

    l dd 删除整行。

    l D 以行为单位,删除光标后之所有字符。

    l cc 修改整行的内容。

    l yy yank整行,使光标所在该行复制到记忆体缓冲区。

    21.9 删除与修改
    l x 删除光标所在该字符。

    l X 删除光标所在之前一字符。

    l dd 删除光标所在该行。

    l r 用接于此指令之后的字符取代(replace)光标所在字符。如: ra 将光标所在字符以 a 取代之。

    l R 进入取代状态,直到《ESC》为止。

    l s 删除光标所在之字符,并进入输入模式直到《ESC》。

    l S 删除光标所在之该行资料,并进入输入模式直到《ESC》。

    21.10 移动与复制
    利用 delete 及 put 指令可完成资料移动之目的。

    利用 yank 及 put 指令可完成资料复制之目的。

    yank 和 delete 可将指定的资料复制到记忆体缓冲区,而藉由 put 指令可将缓冲区内的资料复制到屏幕上。

    例:

    移动一行 .在该行执行 dd

    .光标移至目的地

    .执行 p

    复制一行 .在该行执行 yy

    .光标移至目的地

    .执行 p

    21.11 指令重复
    在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n次。

    例:

    删除10行 .10dd

    复制10行 .10yy

    指标往下移10行 .10j

    21.12 取消前一动作(Undo)
    即复原执行上一指令前的内容。

    u 恢复最后一个指令之前的结果。

    U 恢复光标该行之所有改变。

    21.13 搜寻
    在vi中可搜寻某一字串,使光标移至该处。

    /字串 往光标之后寻找该字串。

    ?字串 往光标之前寻找该字串。

    n 往下继续寻找下一个相同的字串。

    N 往上继续寻找下一个相同的字串。

    21.14资料的连接
    J 句子的连接。将光标所在之下一行连接至光标该行的后面。

    若某行资料太长亦可将其分成两行,只要将光标移至分开点,进入输入模式 (可利用 a、i等指令)再按《Enter》即可。

    21.15 环境的设定
    :set nu 设定资料的行号。

    :set nonu 取消行号设定。

    :set ai 自动内缩。

    :set noai 取消自动内缩。

    自动内缩(automatic indentation)

    在编辑文件或程序时,有时会遇到需要内缩的状况,『:set ai』即提供自动内缩的功能,用下例解释之:

    .vi test

    .(进入编辑视窗后)

    this is the test for auto indent

    《Tab》start indent ← :set ai (设自动内缩)

    《Tab》data

    《Tab》data

    《Tab》data ← :set noai (取消自动内缩)

    the end of auto indent.

    .注: 可删除《Tab》字符。

    21.16 ex指令
    读写资料

    :w 将缓冲区的资料写入磁盘中。

    :10,20w test 将第10行至第20行的资料写入test文件。

    :10,20w>>test 将第10行至第20行的资料加在test文件之后。

    :r test 将test文件的资料读入编辑缓冲区的最后。

    删除、复制及移动

    :10,20d 删除第10行至第20行的资料。

    :10d 删除第10行的资料。

    :%d 删除整个编辑缓冲区。

    :10,20co30 将第10行至第20行的资料复制至第30行之后。

    :10,20mo30 将第10行至第20行的资料移动至第30行之后。

    字串搜寻与取代

    s(substitute)指令可搜寻某行列范围。g(global)指令则可搜寻整个编辑缓冲区的资料。

    s指令以第一个满足该条件的字串为其取代的对象,若该行有数个满足该条件的字串,也仅能取代第一个,若想取代所有的字串则需加上g参数。

    :1,$s/old/new/g 将文件中所有的『old』改成『new』。

    :10,20s/^/ / 将第10行至第20行资料的最前面插入5个空白。

    :%s/old/new/g 将编辑缓冲区中所有的『old』改成『new』。

    21.17 恢复编辑时被中断的文件
    在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未被写回磁盘时,当再度回到系统,执行下列指令即可回复中断前的文件内容。

    %vi -r filename

    21.18 编辑多个文件

    vi亦提供同时编辑多个文件的功能,方法如下:

    %vi file1 file2 ...

    当第一个文件编修完成后,可利用『:w』将该缓冲区存档,而后再利用 『:n』载入下一个文件。

    Popularity: 50%

Open Toolbar