2010年 1月

久々の正規表現

PHPで日付チェック 時刻チェックをするのに久々に正規表現を使った。
相変わらず便利な機能だと思う。
最初に正規表現にあった時には、なんじゃこの暗号みたいなのは・・・・気持ちわりい!
と思ったのだが、今ではなくてはならないものになった。

ねっ! 気持ち悪いでしょ

 // 日付が正しいかをチェックする。例 2008/12/2
 static function IsYMD($text)
 {
  $array=null;
  if(!preg_match(“/^([0-9]{4})\/([0-9]{1,2})\/([0-9]{1,2})$/”,$text,$array)) <-ここでチェックしている
  {
   return ”;
  }
  if(!checkdate($array[2],$array[3],$array[1]))
  {
   return ”;
  }
  return str_pad(intval($array[1]), 4, ‘0’, STR_PAD_LEFT) . str_pad(intval($array[2]), 2, ‘0’, STR_PAD_LEFT) . str_pad(intval($array[3]), 2, ‘0’, STR_PAD_LEFT);
 }
 // 時刻が正しいかをチェックする。例 17:12:13
 static function IsHMS($text)
 {
  if(!preg_match(“/^([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2})$/”,$text,$array)) <-ここでチェックしている
    {
   return “”;
  }
  if(intval($array[1])<0 || intval($array[1])>23)
  {
   return ”;
  }
  if(intval($array[2])<0 || intval($array[2])>59)
  {
   return ”;
  }
  if(intval($array[3])<0 || intval($array[3])>59)
  {
   return ”;
  }
  return str_pad(intval($array[1]), 2, ‘0’, STR_PAD_LEFT) . str_pad(intval($array[2]), 2, ‘0’, STR_PAD_LEFT) . str_pad(intval($array[3]), 2, ‘0’, STR_PAD_LEFT);
 }

ソースコード自動生成ツールV.097完成

ソースコード自動生成ツールがやっと使えるところまでできました。

自動生成のプログラムを動かす環境には、ちょっとローカルな環境が必要ですが、
現在使えるテンプレートは、PHP PostgreSQL SMARTY環境での自動生成です。

http://XXX.XXX.1.70/scg でアクセスできます。

XXX.XXXの部分は、・・・・・・

どんなものか、一度見てやってください。

一覧表示 登録 削除 照会 削除 プログラムが生成できます。

いろいろご意見お待ちしています。

テンプレートを追加すれば、JAVA VB.NET ASPでも作成可能です。

他のひな型があれば、いつでも相談に乗ります。

虫だらけの長ーいトンネル

ソースコード自動作成ツール
一覧画面の作成用のテンプレートがやっと完成した。
これで、8度目の完成した宣言です。
ソフトウェアというものは、恐ろしいものだ、できたと思っても変な所に バグ・
今度は完ぺきだと思ってもまた バグ
今度は完ぺきだと思ってもまた バグ
今度は完ぺきだと思ってもまた バグ
いつになったらバグが消えるのだろう・・
1度目2度目の言い訳は、「えっ!そうですか、わかりました」
3度目の言い訳は「あっりゃ! そうなんですか」
4度目の言い訳は「あっごめんなさい」
5度目の言い訳は「あっ!」
6度目の言い訳は「うっ!」
7度目の言い訳は「・・・・」
このころから変な自問自答がはじまり、「ぶつぶつぶつ・・・・」「この!!ぶたやろう!!」と自分を責め始める。
もう、10回を超えると、自分が信じられなる。
しかし、こんなことを20年もやっていると、それなりに経験も積んできて自暴自棄にはならない、
ソフトウェアを作るということは、長ーいバグのいるトンネルに入っていくことと覚悟ができる。

ソースコード自動作成ツールが作ったソース

ソースコード自動作成ツールが作ったソースです。

 
<?php
require_once ‘html_util/BaseSmarty.php’;
require_once ‘db_access/db_class_商品統合管理.php’;
//require_once ‘user_info_util/session_info.php’;

HTME::form_trim_all();
//HTME::https_needs();
//session_info::login_needs();
form_load();

/**
 * 画面からの入力処理を行う
 */
function form_load()
{
//  $user_info = session_info::is_login();
    $o_smarty = new BaseSmarty();
    HTME::form_post_set($o_smarty);
    switch($_POST[“form_name”])
    {
        case    ‘商品統合管理_list.html’:
            switch($_POST[‘action_cmd’])
            {
                case ‘search’:
                    $_POST[‘page_no’] = page_no(1,0);
                    search_list($o_smarty);
                    break;
                case ‘next’:
                    $_POST[‘page_no’] = page_no($_POST[‘page_no’],1);
                    search_list($o_smarty);
                    break;
                case ‘jump’:
                    $_POST[‘page_no’] = page_no($_POST[‘page_no’],0);
                    search_list($o_smarty);
                    break;
                case ‘prior’:
                    $_POST[‘page_no’] = page_no($_POST[‘page_no’],-1);
                    search_list($o_smarty);
                    break;
                case ‘sort’:
                    $_POST[‘page_no’] = page_no($_POST[‘page_no’],0);
                    search_list($o_smarty);
                    break;
                case ‘clear’:
                    form_clear($o_smarty);
                    break;
            }
            $o_smarty->display(“商品統合管理_list.html”);
            break;
        default:
            HTME::form_get_set($o_smarty);
            form_init($o_smarty);
            $o_smarty->display(“商品統合管理_list.html”);
            break;
    }
}

/**
 * 最初の画面を表示する
 * @param $o_smarty     SMARTYのインスタンスを渡す
 * @param $action_cmd   画面のアクションコマンド
 * @return なし
 */
function form_init($o_smarty)
{
    $_POST[‘sort_key’] = ‘商品コード’; /* 初回のソートキーを入れる*/
    $_POST[‘sort_order’] = ‘asc’;
    search_list($o_smarty);
}

/**
 * フィールドをクリアする
 * @param $o_smarty     SMARTYのインスタンスを渡す
 * @return なし
 */
function form_clear($o_smarty)
{
    $o_smarty->txtput(‘_商品コード’,”);
}

/**
 * 検索する
 * @param $o_smarty     SMARTYのインスタンスを渡す
 * @param $action_cmd   画面のアクションコマンド
 * @return なし
 */
function search_list($o_smarty)
{
    $sort_key       = sort_key($o_smarty);
    $class          = new db_class_商品統合管理();
    $class->_商品コード = $_POST[‘_商品コード’];
    $line_len       =   line_len($_POST[‘line_len’]);
    $page_no        =   $_POST[‘page_no’];
    $max_page_no    =   0;
    $record_count   =   0;
    $list_data = db_class_商品統合管理::db_select_list($class,$line_len,$sort_key,$page_no,$max_page_no,$record_count);
    $o_smarty->txtput(‘line_len’,$line_len);
    $o_smarty->txtput(‘page_no’,$page_no);
    $o_smarty->txtput(‘max_page_no’,$max_page_no);
    $o_smarty->txtput(‘record_count’,$record_count);
    $o_smarty->htmput(‘list_data’,$list_data);
}

/**
 * ソート順番を求める
 * @param $o_smarty     SMARTYのインスタンスを渡す
 * @return ソート順を格納した配列を返す
 */
function sort_key($o_smarty)
{
    $sort_key = ”; /* この配列にソートキーとソートオーダーを入れる*/
    if(!$_POST[‘sort_key’] && !$_POST[‘sort_key_old’]) return null;
    $key =      $_POST[‘sort_key’];
    if(!$key) $key = $_POST[‘sort_key_old’];
    if($_POST[‘sort_key’]==$_POST[‘sort_key_old’])
    {
        if($_POST[‘sort_order’]==’desc’)
        {
            $sort_key[$key] = ‘asc’;
        }
        else
        {
            $sort_key[$key] = ‘desc’;
        }
    }
    else
    {
        if($_POST[‘sort_key’])
        {
            $sort_key[$key] = ‘asc’;
        }
        else
        {
            if($_POST[‘sort_order’]==’asc’)
            {
                $sort_key[$key] = ‘asc’;
            }
            else
            {
                $sort_key[$key] = ‘desc’;
            }
        }
    }
    $o_smarty->txtput(‘sort_key_old’,$key);
    $o_smarty->txtput(‘sort_order’,$sort_key[$key]);
    return $sort_key;
}

/**
 * ページ番号を加算減算する
 * @param $page_no  現在のページ番号
 * @param $add      加算減算する値
 * @return 結果のページを返す
 */
function page_no($page_no,$add)
{
    if(!is_numeric($page_no)) $page_no=0;
    if(!is_numeric($add)) $add=0;
    $page_no = intval($page_no) + intval($add);
    if($page_no<1) $page_no=1;
    return $page_no;
}

/**
 * 表示行数を求める
 * @param $line_len 表示行数
 * @return 表示行数を返す
 */
function line_len($line_len)
{
    if(!is_numeric($line_len)) $line_len=10;
    if($line_len<1) $line_len = 10;
    $line_len = intval($line_len);
    return $line_len;
}
?>

ソースコード自動作成ツール

先週から始めたソースコードの自動生成ツールもだいぶんできました。途中経過です。

いまは、PHPのソースを生成するのですが、テンプレートをいれると、JavaでもVBでも作成可能です。

このプログラムの威力を十分に発揮するためには、基本となるよくできたソースコードが必要となります。

皆さんの良い意見をお待ちしています。

完成FINALを、お楽しみください。

作成したソースのサンプル

Eclipse のデフォルト文字コードを全部UTF-8にする

ASCII S-JIS EUC UTF-16 UTF-8 EBICDIC IBM漢字 富士通JEF NEC漢字といろいろあるけれど、これからの新規開発はすべて、UTF-8でやる!
そのためのEclipseの設定は、下記のとおり

eclipse.exeと同フォルダにあるeclipse.iniに、

-Dfile.encoding=utf-8
をいれるだけでよい。
デフォルトは、MS932になっているようだ。

TAB(\9)を空白にする関数

誰か、TABをスペースに置き換えてくれる関数を知らないですか~~~
とGoogle BING に叫んでも教えてくれないので、ちょこっと作ってみました。

/** タブを空白にする関数。
  * @param string $str  変換する元
  * @param Array  $タブ数
  * @return string
*/
function tab2space($str,$n)
{
 $ret = ”;
 $str = preg_replace(“/(\r\n|\n|\r)/”, “\n”, $str);
 $array = split(“\n”,$str);
 foreach($array as $v)
 {
  $s = 0;
  $l = ”;
  $a = explode(“\t”,$v,strlen($v));
  foreach($a as $s)
  {
   $l.=$s;
   $c=strlen($l)%$n;
   if($c==0) $l .= fillspace($n);
   else   $l .= fillspace($n – $c);
  }
  $l = rtrim($l);
  $ret .= $l . “\n”;
 }
 return $ret;
}

function fillspace($count)
{
 $s=”;
 for($i=0;$i<$count;$i++)
 {
  $s.=’ ‘;
 }
 return $s;
}

情報処理試験対策用の良いサイトを見つけた!!

「相手が誰でも関係ない!!!ガンガンメールしてもただ♪♪♪」
なんて歌にはまっている私ですが、ふとネットサーフィンをやっていると、こんなサイトを見かけた。

http://masudahp.web.fc2.com/

むかしむかしあるところに、入門C言語 実習C言語 応用C言語 という本があったそうな・・・・

あの時代にインターネットがあって、こんなサイトがあったら、大枚をはたかなくてもよかったのに。

OpenIDにびっくり

20年以上も開発屋をやっているといろんなことがあるが、自分が考えていることはみんな考えているし、なかなか新しいアイデアなんてものは見つからない。
そろそろ年もくってきたことだし、後進の輩に何か残してやりたいと思い、あれやこれやポンコツの頭をひねっていた。
そういえば、私もいろんなサイトでユーザ登録を行っているのだが、ユーザIDとパスワードの数の多さにはげんなりしている。
何とか、もっと簡単な方法でログインできないものだろうかと考え、「そうだ!、そういうシステムを作ってしまえばいいのだ」なんて思い、久しぶりに興奮していた。
「いや?!まてよ・・・・」 こういういいことを思いついても、また、きっと誰かが先に考えているかもしれない、そう思い、おそるおそるGoogleを検索してみた。
やっぱり・・・・ 
その興奮もわずか数秒でボルテージ200%から一気に0%にたたきおとされた。
そりゃそうだ・・・ ということで、以下のサイトを見れば一目瞭然、大手のサイトは既に行っているようです。

http://www.openid.ne.jp/

http://openid.net/

http://www.sixapart.jp/about/openid/

実に残念であるが、考えてみればラッキーでもある。
世にあるものは、すべて使ってしまおうとプラス思考で考え続けた20数年はだてじゃない、これを利用して新たなシステム作りを考えることにした。

えっ!!?
「この記事は単なる決意表明なんですか?」 って・・

その通りです。
後日(う~んと後日)には、当社のシステムをこれに対応させたいと思います。

 

webFXTreeを使って、TREE表示をする

webFXTreeを使うと、エクスプローラのようなTree表示のウェブサイトが簡単にできます。

http://webfx.eae.net/dhtml/xtree/index.html

これは、javascript のクラスになっています。

これと、WebFXLoadTree を使うとサーバとの連携で、これまた簡単にTree表示が簡単になります。

http://webfx.eae.net/dhtml/xloadtree/xloadtree.html

両方使うと、ウェブアプリケーションがリッチなクライアントになります。

phpMyAdminやphpPgAdminは、これを改造して使っているようです。

使い方は、私に聞いてください。