2011-03-28 13:09

[C語言] 讀取簡易的設定檔

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. #include <string.h> 
  4.  
  5. #define CONFIG_PATH "test.conf" 
  6. #define SIZE         256 
  7.  
  8. /*config vars*/ 
  9. char path[SIZE]; 
  10. char extension[SIZE]; 
  11. int limit=0; 
  12.  
  13. bool readConfig(){ 
  14.    char name[SIZE]; 
  15.    char value[SIZE]; 
  16.  
  17.    FILE *fp = fopen(CONFIG_PATH, "r"); 
  18.    if (fp == NULL) { return false; } 
  19.    while(!feof(fp)){ 
  20.        memset(name,0,SIZE); memset(value,0,SIZE); 
  21.  
  22.        /*Read Data*/ 
  23.        fscanf(fp,"%s = %s\n", name, value); 
  24.  
  25.        if (!strcmp(name, "path")){ 
  26.            strcpy(path, value); 
  27.  
  28.        }else if (!strcmp(name, "extension")){ 
  29.            strcpy(extension, value); 
  30.  
  31.        }else if (!strcmp(name, "limit")){ 
  32.            limit = atoi(value); 
  33.        } 
  34.    } 
  35.    fclose(fp); 
  36.  
  37.    return true; 
  38. } 
  39.  
  40.  
  41. /*= main function=*/ 
  42. int main(int argc, const char ** argv){ 
  43.    memset(path,0,SIZE); 
  44.    memset(extension,0,SIZE); 
  45.  
  46.    /*read config*/ 
  47.    if(!readConfig()){ 
  48.        fprintf(stderr,"read config fail!"); 
  49.        return 1; 
  50.    } 
  51.  
  52.    printf("path = %s\n", path); 
  53.    printf("extension = %s\n", extension); 
  54.    printf("limit = %d\n", limit); 
  55.    return 0; 
  56. } 

test.conf
  1. path = /tmp 
  2. extension = jpg,jpeg,png 
  3. limit = 10000 
2011-03-28 12:53

[C語言] 用 fnmatch 依副檔名過濾檔案類型

  1. #include <stdio.h> 
  2. #include <string.h> 
  3. #include <fnmatch.h> 
  4.  
  5. #define SIZE 256 
  6.  
  7. int main(int argc, const char ** argv){ 
  8.    char extension[] = "jpg,png,gif"; 
  9.  
  10.    char extensionTemp[SIZE]; 
  11.    char pattern[SIZE]; 
  12.    char *token; 
  13.  
  14.    for (int i = 1; i < argc; i++){ 
  15.        strcpy(extensionTemp,extension); 
  16.        token = strtok(extensionTemp,","); 
  17.        while (token != NULL && strlen(token)>0){ 
  18.            strcpy (pattern,"*."); // *. 
  19.            strcat (pattern,token); // *.jpg 
  20.  
  21.            if( fnmatch(pattern,argv[i],0) == 0 ) { 
  22.                printf("%s\n",argv[i]); 
  23.            } 
  24.  
  25.            token = strtok(NULL,","); 
  26.        } 
  27.    } 
  28.  
  29.    return 0; 
  30. } 
2011-03-28 12:53

[C語言] 取得檔案副檔名

  1. #include <string.h> 
  2.  
  3. char *getExtension(char *fileName){ 
  4.    int len = strlen(fileName); 
  5.    int i = len; 
  6.    while( fileName[i]!='.' && i>0 ){ i--; } 
  7.  
  8.    if(fileName[i]=='.'){ 
  9.        return &fileName[i+1]; 
  10.    }else{ 
  11.        return &fileName[len]; 
  12.    } 
  13. } 
2011-03-28 02:06

在 Blogger 加上各種推文按鈕(修正Plurk 的Bug)

網友提出了 Plurk 的 bug
說實在的找了半天的文件
Blogger 並沒有可以直接使用的參數
看來又只能依靠 JavaScript 來處理這種鳥問題了

最終版程式碼
在 Blogger 加上各種推文按鈕



CSS 程式碼

  1. /*Social Icon*/ 
  2. .social{ 
  3. background:transparent url(http://www.xxxx.com/social_icons.png) 0 0 no-repeat; 
  4. /*16*16按鈕的圖片網址*/ 
  5.  
  6. display: -moz-inline-box; 
  7. display: inline-block; 
  8. height:16px; 
  9. margin:0 4px; 
  10. text-indent:-999999px; 
  11. vertical-align:middle; 
  12. width:16px; 
  13. opacity:0.75; 
  14. overflow:hidden; 
  15. } 
  16. .social:hover{ 
  17. opacity:1; 
  18. } 
  19.  
  20. a.toFacebook{ background-position: 0 0; } 
  21. a.toPlurk{ background-position: 0 -16px; } 
  22. a.toTwitter{ background-position: 0 -32px; } 
  23. a.toTechnorati{ background-position: 0 -48px; } 
  24. a.toDelicious{ background-position: 0 -64px; } 
  25. a.toBuzz{ background-position: 0 -80px; } 
  26. a.toDigg{ background-position: 0 -96px; } 
  27. a.toStumbleUpon{ background-position: 0 -112px; } 
  28. a.toDesignFloat{ background-position: 0 -128px; } 
  29. a.getAtomRSS{ background-position: 0 -144px; } 
  30. a.toReader{ background-position: 0 -160px; } 

首先打開『版面配置』→『修改HTML』
將『展開小裝置範本』打勾
找到 ]]></b:skin> 將 CSS 的程式貼在上一行
小技巧:所有的瀏覽器都有搜尋功能 (Ctrl + F),只要搜尋 "skin" 就可以找到這行了



HTML 程式碼

找尋 <div class='post-footer'> 這一行
然後向下找尋相對應的 </div>
這裡沒有比較清楚的標示
找起來會比較困難一點
將下面的程式貼在 </div> 之前
  1. <div class='post-footer-line post-footer-line-99'> 
  2. <span class='post-social-icons' name='post-social-icons' expr:t='data:post.title' expr:u='data:post.url' expr:h='data:blog.homepageUrl'></span> 
  3. </div> 


JavaScript 程式碼

找尋 </body> 這一行,將 JavaScript 的程式貼在上一行
  1. <script type="text/javascript"> 
  2. var data = [ 
  3.    {&quot;c&quot;:&quot;toFacebook&quot;, &quot;u&quot;:&quot;http://www.facebook.com/sharer.php?u=$url$&amp;t=$title$&quot;,&quot;t&quot;:&quot;Facebook&quot;}, 
  4.    {&quot;c&quot;:&quot;toPlurk&quot;, &quot;u&quot;:&quot;http://www.plurk.com/?qualifier=shares&amp;status=$url$ ($title$)&quot;,&quot;t&quot;:&quot;Plurk&quot;}, 
  5.    {&quot;c&quot;:&quot;toTwitter&quot;, &quot;u&quot;:&quot;http://twitter.com/home?status=$title$ $url$&quot;,&quot;t&quot;:&quot;Twitter&quot;}, 
  6.    {&quot;c&quot;:&quot;toTechnorati&quot;, &quot;u&quot;:&quot;http://technorati.com/faves?add=$url$ $title$&quot;,&quot;t&quot;:&quot;Technorati&quot;}, 
  7.    {&quot;c&quot;:&quot;toDelicious&quot;, &quot;u&quot;:&quot;http://del.icio.us/post?url=$url$ $title$&quot;,&quot;t&quot;:&quot;Delicious&quot;}, 
  8.    {&quot;c&quot;:&quot;toDigg&quot;, &quot;u&quot;:&quot;http://digg.com/submit?phase=2&amp;url=$url$&amp;title=$title$&quot;,&quot;t&quot;:&quot;Digg&quot;},   
  9.    {&quot;c&quot;:&quot;toStumbleUpon&quot;, &quot;u&quot;:&quot;http://www.stumbleupon.com/submit?url=$url$&amp;title=$title$&quot;,&quot;t&quot;:&quot;Stumble Upon&quot;}, 
  10.    {&quot;c&quot;:&quot;toDesignFloat&quot;, &quot;u&quot;:&quot;http://www.designfloat.com/submit.php?url=$url$&amp;title=$title$&quot;,&quot;t&quot;:&quot;Design Float&quot;}, 
  11.    {&quot;c&quot;:&quot;toReader&quot;, &quot;u&quot;:&quot;http://www.google.com/reader/link?url=$url$&amp;title=$title$&amp;srcURL=$home$&quot;,&quot;t&quot;:&quot;Google Reader&quot;}, 
  12.    {&quot;c&quot;:&quot;toBuzz&quot;, &quot;u&quot;:&quot;http://www.google.com/buzz/post?url=$url$&quot;,&quot;t&quot;:&quot;Buzz&quot;}, 
  13.    {&quot;c&quot;:&quot;getAtomRSS&quot;, &quot;u&quot;:&quot;/feeds/posts/default&quot;, &quot;t&quot;:&quot;Atom / RSS&quot;}    
  14. ]; 
  15.  
  16.  
  17. var list=document.getElementsByName(&#039;post-social-icons&#039;); 
  18.  
  19. for (var li=0,ll=list.length; li&lt;ll; li++){ 
  20.    var title=encodeURIComponent(list[li].getAttribute(&#039;t&#039;));     
  21.    var url=encodeURIComponent(list[li].getAttribute(&#039;u&#039;));     
  22.    var home=encodeURIComponent(list[li].getAttribute(&#039;h&#039;)); 
  23.    var temp=&quot;分享至 &amp;#65306;&quot;; 
  24.    for (var di=0,dl=data.length; di&lt;dl; di++){ 
  25.        var href=data[di].u.replace(&quot;$title$&quot;,title).replace(&quot;$url$&quot;,url).replace(&quot;$home$&quot;,home); 
  26.        temp+=&quot;&lt;a class=&#039;social &quot;+data[di].c+&quot;&#039; href=&#039;&quot;+href+&quot;&#039; title=&#039;分享至 &quot;+data[di].t+&quot;&#039;&gt;&quot;+data[di].t+&quot;&lt;/a&gt;&quot; 
  27.    }; 
  28.    list[li].innerHTML=temp; 
  29. }; 
  30. </script> 


JavaScript 原始碼

  1. var data = [ 
  2.    {"c":"toFacebook", "u":"http://www.facebook.com/sharer.php?u=$url$&t=$title$","t":"Facebook"}, 
  3.    {"c":"toPlurk", "u":"http://www.plurk.com/?qualifier=shares&status=$url$ ($title$)","t":"Plurk"}, 
  4.    {"c":"toTwitter", "u":"http://twitter.com/home?status=$title$ $url$","t":"Twitter"}, 
  5.    {"c":"toTechnorati", "u":"http://technorati.com/faves?add=$url$ $title$","t":"Technorati"}, 
  6.    {"c":"toDelicious", "u":"http://del.icio.us/post?url=$url$ $title$","t":"Delicious"}, 
  7.    {"c":"toDigg", "u":"http://digg.com/submit?phase=2&url=$url$&title=$title$","t":"Digg"},   
  8.    {"c":"toStumbleUpon", "u":"http://www.stumbleupon.com/submit?url=$url$&title=$title$","t":"Stumble Upon"}, 
  9.    {"c":"toDesignFloat", "u":"http://www.designfloat.com/submit.php?url=$url$&title=$title$","t":"Design Float"}, 
  10.    {"c":"toReader", "u":"http://www.google.com/reader/link?url=$url$&title=$title$&srcURL=$home$","t":"Google Reader"}, 
  11.    {"c":"toBuzz", "u":"http://www.google.com/buzz/post?url=$url$","t":"Buzz"}, 
  12.    {"c":"getAtomRSS", "u":"/feeds/posts/default", "t":"Atom / RSS"}    
  13. ]; 
  14.  
  15.  
  16. var list=document.getElementsByName('post-social-icons'); 
  17.  
  18. for (var li=0,ll=list.length; li<ll; li++){ 
  19.    var title=encodeURIComponent(list[li].getAttribute('t'));     
  20.    var url=encodeURIComponent(list[li].getAttribute('u'));     
  21.    var home=encodeURIComponent(list[li].getAttribute('h')); 
  22.    var temp="分享至 :"; 
  23.    for (var di=0,dl=data.length; di<dl; di++){ 
  24.        var href=data[di].u.replace("$title$",title).replace("$url$",url).replace("$home$",home); 
  25.        temp+="<a class='social "+data[di].c+"' href='"+href+"' title='分享至 "+data[di].t+"'>"+data[di].t+"</a>" 
  26.    }; 
  27.    list[li].innerHTML=temp; 
  28. }; 


圖片來源:

Social Media Network Icons | Komodo Media
2011-03-21 01:16

[轉載] PHP中冒号、endif、endwhile、endfor这些都是什么

轉載自:PHP中冒号、endif、endwhile、endfor这些都是什么

我们经常在wordpress一类博客程序的模板里面看到很多奇怪的PHP语法,比如:
  1. <?php if( empty($_GET['a']) ): ?> 
  2. <font color="red">空的</font> 
  3. <?php endif; ?> 


对于相当一部分PHP爱好者来说根本没见过啊,这些是什么东西呢?难道是那些博客的开发者自己搞的仿PHP的模板语言?
非也,其实这些都是PHP的语法,只不过不常用而已,这些都是PHP流程控制的替代语法。
这里就就给大家详细说一下PHP流程控制的替代语法。什么是替代语法?
简单的说就是一些语法的另类写法。

PHP中那些语法有替代语法?
流程控制(包括if,while,forforeach,switch)这几个语句有替代语法。

替代语法的基本形式:
左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;

举个例子吧:
  1. <?php if ($a<0): ?> 
  2. 是负数拉 
  3. <?php endif; ?> 

上面的语句等同于
  1. <?php if ($a<0){ ?> 
  2. 是负数拉 
  3. <?php } ?> 



为什么纯PHP代码里面几乎看不到?
这些语法有点不符合C家族的传统有点另类,大家不大习惯于这种语法,而且不是很方便

大家都不习惯,而且这么另类要他有什么用?蛋疼吗?
存在就是合理,它自有它的用处,这些语法能发挥的地方是在PHP和HTML混合页面的代码里面。好处如下:
  1. 使HTML和PHP混合页面代码更加干净整齐。
    有代码洁癖的朋友最惧怕的就是乱七八糟的混合代码,有了这些没有花括号的替代语法,各位爱干净的朋友开心到尿震。
  2. 流程控制逻辑更清晰,代码更容易阅读
    要改别人的PHP和HTML混合代码,打开发现,我擦!太TMD垃圾了!如果用替代语法,我想再垃圾的程序开发人员也不至于写的太乱吧。
  3. 一些从ASP等其他类basic语言家族转来的朋友,会更容易使用PHP。


讲半天没用的,捞点干的行不?这东西怎么用?

根据之前描述的使用方法,if语句的替代语法使用如下:
  1. <?php if ($a == 5): ?> 
  2.  <div>等于5</div> 
  3. <?php elseif ($a == 6): ?> 
  4.  <div>等于5</div> 
  5. <?php else: ?> 
  6.  <div>不是5就是6</div> 
  7. <?php endif; ?> 

while替代语法:
  1. <?php while (expr): ?> 
  2.  <li>循环点什么</li> 
  3. <?php endwhile; ?> 

for替代语法:
  1. <?php for (expr1; expr2; expr3): ?> 
  2.  <li>循环点什么</li> 
  3. <?php endfor; ?> 

foreach替代语法:
  1. <?php foreach (expr1): ?> 
  2.  <li>循环点什么</li> 
  3. <?php endforeach; ?> 

switch替代语法:
  1. <?php 
  2. switch ($i): 
  3.    case 0: 
  4.        echo "i equals 0"; 
  5.        break; 
  6.    case 1: 
  7.        echo "i equals 1"; 
  8.        break; 
  9.    case 2: 
  10.        echo "i equals 2"; 
  11.        break; 
  12.    default: 
  13.        echo "i is not equal to 0, 1 or 2"; 
  14. endswitch; 
  15. ?> 
2011-03-02 16:19

[PHP] 取得生日對應的星座名稱

在 Google 上找了一下能用 function,花了十分鐘決定自己寫了,說實在的在 social 的網站上這算是基本需求,而以前寫的也不知道丟哪去了,這次好好記錄下來免得以後又要再寫一份。

  1. function getStarSignsName($month, $day) { 
  2.    $list=array( 
  3.        array('name'=>"摩羯座",'min'=>'12-22','max'=>'01-19'),   
  4.        array('name'=>"水瓶座",'min'=>'01-20','max'=>'02-18'), 
  5.        array('name'=>"雙魚座",'min'=>'02-19','max'=>'03-20'), 
  6.        array('name'=>"牡羊座",'min'=>'03-21','max'=>'04-19'), 
  7.        array('name'=>"金牛座",'min'=>'04-20','max'=>'05-20'), 
  8.        array('name'=>"雙子座",'min'=>'05-21','max'=>'06-21'), 
  9.        array('name'=>"巨蟹座",'min'=>'06-22','max'=>'07-22'), 
  10.        array('name'=>"獅子座",'min'=>'07-23','max'=>'08-22'), 
  11.        array('name'=>"處女座",'min'=>'08-23','max'=>'09-22'), 
  12.        array('name'=>"天秤座",'min'=>'09-23','max'=>'10-23'), 
  13.        array('name'=>"天蠍座",'min'=>'10-24','max'=>'11-22'), 
  14.        array('name'=>"射手座",'min'=>'11-23','max'=>'12-21'), 
  15.    );  
  16.  
  17.    $time=strtotime("1970-$month-$day"); 
  18.    foreach ($list as $row){ 
  19.        $min=strtotime("1970-".$row['min']); 
  20.        $max=strtotime("1970-".$row['max']); 
  21.        if($min<=$time && $time<=$max){ 
  22.            return $row['name']; 
  23.        } 
  24.    } 
  25.    /*other to 摩羯座*/ 
  26.    return $list[0]['name']; 
  27. } 


測試程式:
  1. $test=array( 
  2.    array('n'=>"水瓶座",'m'=>'01','d'=>'20'), 
  3.    array('n'=>"水瓶座",'m'=>'02','d'=>'08'), 
  4.    array('n'=>"水瓶座",'m'=>'02','d'=>'18'), 
  5.  
  6.    array('n'=>"雙魚座",'m'=>'02','d'=>'19'), 
  7.    array('n'=>"雙魚座",'m'=>'03','d'=>'10'), 
  8.    array('n'=>"雙魚座",'m'=>'03','d'=>'20'), 
  9.  
  10.    array('n'=>"牡羊座",'m'=>'03','d'=>'21'), 
  11.    array('n'=>"牡羊座",'m'=>'04','d'=>'09'), 
  12.    array('n'=>"牡羊座",'m'=>'04','d'=>'19'), 
  13.  
  14.    array('n'=>"金牛座",'m'=>'04','d'=>'20'), 
  15.    array('n'=>"金牛座",'m'=>'05','d'=>'10'), 
  16.    array('n'=>"金牛座",'m'=>'05','d'=>'20'), 
  17.  
  18.    array('n'=>"雙子座",'m'=>'05','d'=>'21'), 
  19.    array('n'=>"雙子座",'m'=>'06','d'=>'1'), 
  20.    array('n'=>"雙子座",'m'=>'06','d'=>'21'), 
  21.  
  22.    array('n'=>"巨蟹座",'m'=>'06','d'=>'22'), 
  23.    array('n'=>"巨蟹座",'m'=>'07','d'=>'02'), 
  24.    array('n'=>"巨蟹座",'m'=>'07','d'=>'22'), 
  25.  
  26.    array('n'=>"獅子座",'m'=>'07','d'=>'23'), 
  27.    array('n'=>"獅子座",'m'=>'08','d'=>'02'), 
  28.    array('n'=>"獅子座",'m'=>'08','d'=>'22'), 
  29.  
  30.    array('n'=>"處女座",'m'=>'08','d'=>'23'), 
  31.    array('n'=>"處女座",'m'=>'09','d'=>'02'), 
  32.    array('n'=>"處女座",'m'=>'09','d'=>'22'), 
  33.  
  34.    array('n'=>"天秤座",'m'=>'09','d'=>'23'), 
  35.    array('n'=>"天秤座",'m'=>'10','d'=>'03'), 
  36.    array('n'=>"天秤座",'m'=>'10','d'=>'23'), 
  37.  
  38.    array('n'=>"天蠍座",'m'=>'10','d'=>'24'), 
  39.    array('n'=>"天蠍座",'m'=>'11','d'=>'02'), 
  40.    array('n'=>"天蠍座",'m'=>'11','d'=>'22'), 
  41.  
  42.    array('n'=>"射手座",'m'=>'11','d'=>'23'), 
  43.    array('n'=>"射手座",'m'=>'12','d'=>'02'), 
  44.    array('n'=>"射手座",'m'=>'12','d'=>'21'), 
  45.  
  46.    array('n'=>"摩羯座",'m'=>'12','d'=>'22'), 
  47.    array('n'=>"摩羯座",'m'=>'01','d'=>'09'), 
  48.    array('n'=>"摩羯座",'m'=>'01','d'=>'19'), 
  49. ); 
  50.  
  51. foreach ($test as $v){ 
  52.    if(getStarSignsName($v['m'],$v['d'])!==$v['n']){ 
  53.        echo $v['n'],"error<br/>"; 
  54.    }else{ 
  55.        echo $v['n'],"OK<br/>"; 
  56.    } 
  57. }