存档

作者存档

BLOG重新开放.

2010年2月27日

SORRY, 最近太忙太忙, 心思也比较倦怠, 最大的喜事是我儿子于2010.1.10顺利诞生了, 一切平安.

博客评论功能已经重新开放了, 欢迎大家评论.

另外我的服务器挺快的, 但是运行wordpress我自己很明显的感觉到打开wordpress的速度太慢了, 受不了. 准备近期换BLOG系统, 我目前正在开发的PHP版本的SmallMVC框架即将完工, 稍后将会使用本框架重新开发一个BLOG系统代替目前的.

感谢大家支持.

admin PHP

评论暂时关闭

2010年1月3日

博客评论暂时关闭, 有问题请发信件到邮箱ircman@163.com

admin 生活

大灰狼串口调试软件V1.0

2009年8月26日

工作需要, 同事需要一个串口调试的小软件,网上的大多没刚好合适自己需要的功能, 于是帮他写了一个. :)
截图:
snap1
下载地址:
http://www.suiyuan.org/download/SerialPort.exe
这是C#写的,用的C#自带的SerialPort,软件很简单,有需要的可以下载用一下. :)

admin CSharp

PHP截取等长中英文混合UTF8编码字符串

2009年8月12日
/*utf8编码时截取等长中英文字串*/ //英文标点[.,\"\\?!:_']   
<?   
function substr_utf8($string,$start,$length)   
{       //by aiou   
     $chars = $string;   
     //echo $string[0].$string[1].$string[2];   
     $i=0;   
     do{   
        if (preg_match ("/[0-9a-zA-Z]/", $chars[$i])){//纯英文   
            $m++;   
        }   
    else {$n++;     }//非英文字节,   
        $k = $n/3+$m/2;   
        $l = $n/3+$m;//最终截取长度;$l = $n/3+$m*2?   
        $i++;   
    } while($k < $length);   
     $str1 = mb_substr($string,$start,$l,'utf-8');//保证不会出现乱码   
     return $str1;   
}

原文:http://aiou.javaeye.com/blog/371094

admin PHP

一个存储过程

2009年6月15日

用的是SQL SERVER2K
现在有一张表,
大概字段
id(自增长), SNumber(站号, 001, 002, etc.), SName(站名),GTime(datetime,获取测站数据时间),Level(float, 测站数据)

现在大概有7,80个站, 每隔6分钟就会同时向数据库里添加一条记录.

现在想实现把同一天内相同时间过来的数据先按照SNumber排列, 再按gtime倒序排列,然后对数据重新编号(1,2,3,etc) 请问如何实现?

例如原始记录
id snumber sname gtime level
66 023 测站1 2009-12-17 10:00:00 50.12
65 058 测站2 2009-12-17 10:00:00 30.24
64 018 测站3 2009-12-17 10:00:00 83.01
63 018 测站3 2009-12-17 09:54:00 50.12
62 058 测站2 2009-12-17 09:54:00 30.24
61 023 测站1 2009-12-17 09:54:00 83.01

按照要求排序后结果为
newid snumber sname gtime level
1 018 测站3 2009-12-17 10:00:00 83.01
2 023 测站1 2009-12-17 10:00:00 50.12
3 058 测站2 2009-12-17 10:00:00 30.24
1 018 测站3 2009-12-17 09:54:00 83.01
2 023 测站1 2009-12-17 09:54:00 50.12
3 058 测站2 2009-12-17 09:54:00 30.24

正解:

CREATE TABLE taoistong 
(id int identity(1,1)
,snumber char(3)
,sname nvarchar(4)
,gtime smalldatetime
,level float )
INSERT INTO taoistong SELECT 
'023',  N'测站1', '2009-12-17 10:00:00', 50.12 
INSERT INTO taoistong SELECT 
 '058', N'测站2', '2009-12-17 10:00:00', 30.24 
INSERT INTO taoistong SELECT 
 '018', N'测站3', '2009-12-17 10:00:00', 83.01 
INSERT INTO taoistong SELECT 
 '018', N'测站3', '2009-12-17 09:54:00', 50.12 
INSERT INTO taoistong SELECT 
 '058', N'测站2', '2009-12-17 09:54:00', 30.24 
INSERT INTO taoistong SELECT 
 '023', N'测站1', '2009-12-17 09:54:00', 83.01 
 
SELECT (SELECT count(1) FROM taoistong b WHERE a.gtime=b.gtime AND a.snumber>=b.snumber)
,snumber,sname,gtime,level  
FROM taoistong a ORDER BY gtime DESC,snumber

admin CSharp

PHP拾遗捡漏(一)

2009年5月6日

PHP拾遗捡漏(一)

最近在看<PHP和MySQL WEB开发>第四版, 把一些基础知识又复习了一遍, 还是很有收获的.
边看边记录一些文字吧.

1. echo 输出字符串
双引号和单引号的区别

$foo = 'hello';
echo $foo.' world!<br />';
echo "$foo world!<br />";
echo '$foo world!<br />';

运行后, 可以看出第一第二两个语句是等价的, 而第三个语句则原样输出.

结论: 对于任何简单类型的变量, 都可以将变量写入到一个由双引号引起来的字符串中, 在双引号中, 变量名称将被变量值所代替.而在单引号中, 变量名称,或者任何其他文本都会不经修改而直接发送到浏览器端.

Heredoc字符串也是插补的, 就像双引号字符串.

2.正确理解标识符
PHP中, 标识符是区分大小写的, $foo和$Foo是不同的, 而函数名称则不区分大小写.

$foo = 'foo';
$Foo = 'Foo';
echo "$foo<br />";
echo "$Foo<br />";
echo bar()."<br />";
echo Bar()."<br />";
 
function bar() {
	echo 'bar';
}

3.引用
PHP中引用操作符&可以在关联赋值时使用. 通常, 在将一个变量的值赋给另外一个变量的时候, 将先产生原变量的一个副本, 然后再将它保存在内存的其它的一个地方.
例如

$a = 5;
$b = $a;
$a = 7; // 此时$a=7, 而$b仍然等于5

这两行代码首先将产生一个$a的副本, 然后再将它保存到$b中, 如果随后改变$a的值, $b的值不会有任何变化.

可以通过引用操作符&来避免产生$a的副本, 此时$a和$b都指向了内存中的相同地址.

$a = 5;
$b = &$a;
$a = 7; // 此时$a和$b都等于7

可以通过unset($a)来重置它们来改变所指向的地址, 重置并不会改变$b(7)的值.

4. “执行操作符, 它是一对反向单引号, PHP将试着将其间的命令当做服务器端的命令行来执行. 表达式的值就是命令的执行结果.

$out = `dir c:` // windows, Linux为 `ls -la`
echo $out;

5. isset()和empty()
bool isset(mixed var)
该函数需要一个变量名称作为参数, 如果这个变量存在返回true,否则返回false. 也可以传递一个由逗号间隔的变量列表, 如果所有变量都被设置了. 返回true.
可以使用unset()来销毁一个变量.

函数empty()可以用来检测一个变量是否存在,以及它的值是否为空和非0, 相应的返回true和false.

简单的来说empty()比isset()多检测值的非空和非0状态.

6. range()可以使用range()函数自动创建一个按升序排列的数字数组.

// 例如以下的代码将创建一个1~10的数字数组
$numbers = range(1, 10);
//range()函数具有一个可选的第三个参数, 这个参数允许设定值之间的步幅. 例如创建一个1~10之间的奇数数组
$odds = range(1, 10, 2);
//range()函数也可以对字符进行操作, 如下
$letters = range('a', 'z');

7. 数组排序
使用sort()函数, sort()函数可以将数组按字母或数字升序进行排序

 $products = array('Tires', 'Oil', 'Spark Plugs');
 sort($products);
 $prices = array(100, 10, 4);
 sort($prices);

sort()函数的第二个参数是可选的, 这个可选参数可以传递SORT_REGULAR(默认值), SORT_NUMERIC或SORT_STRING, sort()函数是区分大小写的.

使用asort()和ksort()函数对关联数组排序
函数asort()根据数组的每个元素值进行排序.
函数ksort()根据数组的每个元素进行排序.

以上三个函数都使数组按升序排序, 它们每个都对应有一个反向排序的函数, 分别是rsort(), arsort(), krsort().

用户自定义排序usort()
usort()函数的参数分别是希望排序的数组和用户比较的函数的名称

 // 这是一个普通的二维数组, 存储了3种产品的代码,说明和价格.
 $products = array(array('TLR', 'Tires', 100),
		array('OIL', 'Oil', 10),
		array('SPK', 'Spark Plugs', 4));
 
 // 以下代码对订单数组中的第二列(说明)按字母进行排序
 function compare($x, $y) {
	if ($x[1] == $y[1])
		return 0;
	else if ($x[1] < $y[1])
		return -1;
	else
		return 1;
 }
 
 usort($products, 'compare')
 
 // 同时实现反向排序
 function reverse_compare($x, $y) {
	if ($x[1] == $y[1])
		returnn 0;
	else if ($x[1] < $y[1])
		return 1;
	else
		return -1;
 }
 
 usort($products, 'reverse_compare');

转载请注明出处: http://www.suiyuan.org

admin PHP