Skip navigation.

极湖

无不用其“极”

Posts tagged with "Programming"

给 perl 增加 trim 函数

, ,

这个虽然简单,却常用,因此纪录一下。
#!/usr/bin/perl

sub trim($) {
    ($string) = $_[0];
    $string =~ s/^\s*(.+)\s*$/$1/;
    return  $string;
}

#测试
print trim(" abcd   ");
print "\n";

执行外部程序并取得PID、标准输出、返回值的脚本

, , , ...

看到 どう書く?org 上面新出的题:
指定コマンドを別プロセスで起動 (根据指定命令启动别的进程)

要求同时取得被启动进程的PID、标准输出、返回值。

可能过于简单,回答的人寥寥。我比较喜欢这些看起来简单的任务,于是提供了两个答案。

Windows 下的 VBScript 代码:
Dim WSH, ExecObj
Set WSH = CreateObject("WScript.Shell")
Set ExecObj = WSH.Exec("hostname")
WScript.Echo "pid:" & ExecObj.processID
WScript.Echo "stdout: " & ExecObj.StdOut.ReadAll
WScript.Echo "exit: " & ExecObj.exitCode
WScript.Quit(ExecObj.exitCode)
Set ExecObj = Nothing
Set WSH = Nothing

Linux/Unix 下的 PHP 代码:
<?
exec("hostname; echo $$", $output, $return_cd);
$pid = array_pop($output);
echo "pid: $pid\n";
echo "\noutput: ".join("\n", $output)."\n";
echo "\nreturn code: $return_cd\n";
?>

如果您需要其他语言的答案,到这儿找就是了。(虽然是日文,相信都能看得懂代码)

网站推荐:どう書く?org

, , ,

今天发现一个不错的站点: どう書く?org

网站标题翻译成中文应该是: 怎么写?org

这是一个程序员的社区,很适合程序员之间互相交流和学习,其基本模式是:有人出题,然后征集答案,答案中的程序代码不拘语言,多多益善。答案中的源代码有高亮显示功能,阅读起来比较轻松;系统提供打分的功能,可以对每个答案打分,也可以对题目本身打分;系统还有统计的功能,因此能看到哪些人的答案获得好评最多。题目和答案能用标签分类;该网站的题目和答案提供RSS格式的输出,因此可以订阅。目前我所看到的就这些功能。

看了一下现有的题目和答案,发现这个站点的用户水平比较高,不论哪一门语言,都有“高手”级的人提供代码,如果您关注这个站点的程序,肯定能学到东西。

有点可惜的是,该站点目前只有日文版和部分英文界面,没有中文界面。国内也有人在做类似的社区,不过往往流于论坛的形式,没有新意。如果您正在做类似的站点,或许可以从这个站点上吸取一些灵感。

JavaScript: 给 Date 对象添加格式化方法

, ,

以下这段程序,从这儿发现。

/* Date/Time Format v0.2; MIT-style license
By Steven Levithan <http://stevenlevithan.com> */

Date.prototype.format = function(mask) {
    var d = this; // Needed for the replace() closure
    
    // If preferred, zeroise() can be moved out of the format() method for performance and reuse purposes
    var zeroize = function (value, length) {
        if (!length) length = 2;
        value = String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };
    
    return mask.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|m{1,4}|yy(?:yy)?|([hHMs])\1?|TT|tt|[lL])\b/g, function($0) {
        switch($0) {
            case 'd':   return d.getDate();
            case 'dd':  return zeroize(d.getDate());
            case 'ddd': return ['Sun','Mon','Tue','Wed','Thr','Fri','Sat'][d.getDay()];
            case 'dddd':    return ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'][d.getDay()];
            case 'm':   return d.getMonth() + 1;
            case 'mm':  return zeroize(d.getMonth() + 1);
            case 'mmm': return ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'][d.getMonth()];
            case 'mmmm':    return ['January','February','March','April','May','June','July','August','September','October','November','December'][d.getMonth()];
            case 'yy':  return String(d.getFullYear()).substr(2);
            case 'yyyy':    return d.getFullYear();
            case 'h':   return d.getHours() % 12 || 12;
            case 'hh':  return zeroize(d.getHours() % 12 || 12);
            case 'H':   return d.getHours();
            case 'HH':  return zeroize(d.getHours());
            case 'M':   return d.getMinutes();
            case 'MM':  return zeroize(d.getMinutes());
            case 's':   return d.getSeconds();
            case 'ss':  return zeroize(d.getSeconds());
            case 'l':   return zeroize(d.getMilliseconds(), 3);
            case 'L':   var m = d.getMilliseconds();
                    if (m > 99) m = Math.round(m / 10);
                    return zeroize(m);
            case 'tt':  return d.getHours() < 12 ? 'am' : 'pm';
            case 'TT':  return d.getHours() < 12 ? 'AM' : 'PM';
            // Return quoted strings with the surrounding quotes removed
            default:    return $0.substr(1, $0.length - 2);
        }
    });
};

如果你对JavaScript以及正则表达式比较熟悉,或许看程序本身就能知道怎么用。建议还是看看原文,这段程序还是比较酷的。

JavaScript: 单选钮的取值和设值

,

//*********************************
// 单选钮的取值
//*********************************
function getRadioValue(objRadio) 
{
    if(!objRadio) {
        return "";
    }
    var radioLength = objRadio.length;
    if(radioLength == undefined) {
        if(objRadio.checked) {
            return objRadio.value;
        } else {
            return "";
        }
    }
    for(var i = 0; i < radioLength; i++) {
        if(objRadio[i].checked) {
            return objRadio[i].value;
        }
    }
    return "";
}

//*********************************
// 单选钮的设值
//*********************************
function setRadioValue(objRadio, newValue)
{
    if(!objRadio) {
        return;
    }
    var radioLength = objRadio.length;
    if(radioLength == undefined) {
        objRadio.checked = (objRadio.value == newValue.toString());
        return;
    }
    for(var i = 0; i < radioLength; i++) {
        objRadio[i].checked = false;
        if(objRadio[i].value == newValue.toString()) {
            objRadio[i].checked = true;
        }
    }
}
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31