Simple Demo:


concat和Max混合用法:


select * from domain where enterpriseid='95358';

update `domain` set name=replace(name,name,concat(name,"shenbak")) where name not like "%shenbak" and enterpriseid='95358' ;
%表示后面有shenbak的,但是加了not,于是就没有问题了!

还回来:
update `domain` set name=replace(name,"shenbak","") where name like "%shenbak" and enterpriseid='95358';

update `film_info` set IMDB=REPLACE ( IMDB,'tt','');//将IMDB码的tt去掉,好建立索引


在数据转换的时候需要用到mysql的replace函数,这里简单介绍一下!

比如你要将 表 tb1里面的 f1字段的abc替换为def

Update tb1 SET f1=REPLACE(f1, 'abc', 'def');

REPLACE(str,from_str,to_str)    
在字符串   str   中所有出现的字符串   from_str   均被   to_str替换,然后返回这个字符串:    
mysql>   Select   REPLACE('www.mysql.com',   'w',   'Ww');  
                  ->   'WwWwWw.mysql.com'  
这个函数是多字节安全的。

示例:
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'</td>',
'' );
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'</tr>',
'' );
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'<tr>',
'' );      
Update  `dede_archives`  SET title=  REPLACE ( title,
'大洋新闻 - ',
'' );  
Update  `dede_addonarticle`  SET body =  REPLACE ( body,
'../../../../../../',
'http://special.dayoo.com/meal/' );

mysql replace

用法1.replace intoreplace into table (id,name) values(‘1‘,‘aa‘),(‘2‘,‘bb‘)
此语句的作用是向表table中插入两条记录。
2.replace(object, search,replace)
把object中出现search的全部替换为replaceselect replace(‘www.163.com‘,‘w‘,‘Ww‘)--->WwW wWw.163.com

例:把表table中的name字段中的 aa替换为bbupdate table set name=replace(name,‘aa‘,‘bb‘)

本文转载自『北漂石头的博客』
http://www.niutian365.com/blog/
更多精彩内容,欢迎访问北漂石头的博客!
#include <string>
#include <iostream>
#include <strstream>
#include <fstream>  //ifstream fin("ent_list");
#include "/usr/local/mysql/include/mysql/mysql.h"
const char mysqlServer[20] = "172.16.1.77";
//const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
unsigned  int port=3306;

using namespace std;

//去掉读出的一行的前后空格
void trim(string& str)
{
str.erase(str.find_last_not_of(' ')+1, string::npos);
str.erase(0, str.find_first_not_of(' '));
}
//去前后空格函数结束

int main()//main函数体
{
  MYSQL myData;
  
  MYSQL_RES *res;
  MYSQL_FIELD *fd;
  MYSQL_ROW row;
  int i,j,rowCount = 0,colCount = 0;
  char query[1024];
  
  mysql_init( &myData );
  if(!mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0))
  {
    printf("connect mysql error!\n");
        
  }
  //读取文本
  
  ifstream fin("ent_list");
  string str;    
  while(getline(fin,str))
  {  
    trim(str);//去掉读出的一行前后空格
    //cout<<str<<"\n";
    strcpy(query,"select path from enterprise where enterpriseid=");
    strcat(query,str.c_str());
    //fprintf(stderr,"FILE=%s,LINE=%d,query=%s\n",__FILE__,__LINE__,query);
    
    if( mysql_query(&myData, query) != 0 )
    {
    printf("query error!\n");
    return 0;
    }else{
    
    
        res = mysql_store_result( &myData );
        rowCount = (int) mysql_num_rows( res );
        colCount = (int) mysql_num_fields( res );
        //printf(" result: %d records found\n fields: %d \n", rowCount, colCount);
        row = mysql_fetch_row( res );
        for(i = 0; i < rowCount; i++)
        {
          
          for( j = 0; j < colCount; j++)
            {
            cout <<"cd ";
            printf("%s", row[j] );
            cout <<";touch .expire;";
            cout<<"\n";
            }

        }
    
      }

  
  }




  

  
}





  在该网站上注册一个帐号,就可以拥有该站提供的多台Solaris、Fedora等Unix/Linux服务器的登录帐号。对于想学习Unix/Linux系统,却又苦于没有合适的环境和条件的教师、学生和工程人员来说,这是一份不错的免费资源。

  Unix体验中心:http://www.unix-center.net/
  可以上传、下载文件的SSH客户端软件--SecureCRT:http://blog.s135.com/read.php/207.htm

  以下简介信息摘自Unix体验中心:

  Unix体验中心(Unix-Center.Net)的目标是为研究、学习和使用各种版本的Unix和类Unix操作系统的教师、学生和工程技术人员提供一个体验和测试各种版本的Unix和类Unix系统的软硬件平台。该平台能够为所有注册用户免费提供如下服务:

  -- SSH登录
  -- C/C++,Fortran,Java,Ruby,Python,Perl,Common Lisp等多种语言开发工具

  本站的注册用户可以远程登录进入多个不同的系统,享受该系统上普通用户的所有权限,学习和使用各种版本的Unix和类Unix操作系统的常用命令和功能。开发人员更可以将自己正在开发的应用程序上载到Unix体验中心的服务器,在不同的软硬件平台上编译和运行,充分体验多处理器、多核、多线程的高性能计算的乐趣。

  到目前为止,本站已经有五个系统正式投入使用,如下:

  T1000/Solaris系统:
  硬件环境:1 颗UltraSPARC T1芯片,CPU 主频为1.0 GHz,八核四线程配置8 GB内存
  软件环境:Solaris 10 Update 3 for SPARC
  机器域名:t1000.unix-center.net(公网),t1000-edu.unix-center.net(教育网)

  X4100/Solaris系统:
  硬件环境:2 颗双核单线程的AMD Opteron 280芯片,CPU 主频为2.4 GHz,配置4 GB内存
  软件环境:Solaris 10 Update 3 for x86/x64
  机器域名:x4100.unix-center.net(公网),x4100-edu.unix-center.net(教育网)

  PE860/Solaris系统:
  硬件环境:1 颗双核单线程的Intel Xeon 3050芯片,CPU 主频为2.13 GHz,配置1 GB内存
  软件环境:Solaris 10 Update 3 for x86/x64
  机器域名:solaris.unix-center.net(公网),solaris-edu.unix-center.net(教育网)

  PE860/Fedora系统:
  硬件环境:1 颗双核单线程的Intel Xeon 3050芯片,CPU 主频为2.13 GHz,配置1 GB内存
  软件环境:Fedora Core 6
  机器域名:fedora.unix-center.net(公网),fedora-edu.unix-center.net(教育网)

  龙芯福珑系统:
  硬件环境: 3 台配置龙芯2E处理器的龙芯福珑计算机,CPU 主频为666 MHz,配置256 MB内存
  软件环境:Debian Linux for MIPS
  机器域名:仅限内网连接

  在2007年6 月底之前,本站还将增加一批新的服务器,届时将可以为网友提供FreeBSD和Ubuntu等多个版本的Unix和类Unix操作系统
[1]好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!

[2]可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!

[3]不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!

[4]多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!

[5]知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!

[6]抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!

[7]逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!

[8]工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!

[9]要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...

[10]该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
//该程序通过mysql数据库得到path,然后通过函数GetUserDetailFilename得到user_info?.conf ? 里面的数字,然后配合mysql数据库里面取得的内容写入到文本中,修复rpc造成的影响让webmail的企业通讯录下员工名录得以正常查看任何一个用户的详细信息!xiangdong2@staff.sina.com.cn
//测试enterpriseid=100334;
//CC -o user_info_mysql.cgi user_info_mysql.cpp -L/usr/local/lib/mysql -lmysqlclient -I/usr/local/include
#include <fstream>
#include <iostream>
#include <iostream>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <math.h>
#include "/usr/local/mysql/include/mysql/mysql.h"
const char mysqlServer[20] = "10.88.15.114";
const char user[20]="web";
const char password[20]="sinatest";
const char database[20]="enterprise";
unsigned  int port=3306;
#define DETAILFILE_NUM  10
static int GetUserDetailFilename(const char *email, char *filename, const unsigned int size=1);
char path[1024];
char ent_address[21]="/ent_address/";
char filename[100];
char  file_path_del[1024];
char buffer[1024],buffer1[1024],buffer2[1024],buffer3[1024],buffer4[1024],buffer5[1024],buffer6[1024],buffer7[1024],buffer8[1024],buffer9[1024];
using namespace std;
int main(int argc,char* argv[])
{
  
  MYSQL myData;
  MYSQL_RES *res;
  MYSQL_FIELD *fd;
  MYSQL_ROW row;
  int i,j,rowCount = 0,colCount = 0;
  string query="select path from enterprise where enterpriseid=";
  string query2 = "select email,realname,tel,mobile,address,office,enter_time,num,dept,flag from enterprisemail_info where enterpriseid=";
  if (argc < 2) {
    printf("usage:  请输入enterprise库enterprise表里面企业id(enterpriseid? Such As:./user_info_mysql.cgi 100334)\n", argv[0]);
    exit(1);
          }
    query+=argv[1];
  query2+=argv[1];

  mysql_init( &myData );
  if(!mysql_real_connect( &myData, mysqlServer, user, password, database,port,NULL,0))
  {
    printf("connect mysql error!\n");
        
  }
  
  
  if( mysql_query(&myData, query.c_str()) != 0 )
  {
  printf("query error!\n");
  return 0;
  }else{
    
     cout << "mysql query run ok!\n";
    
     }
  
  res = mysql_store_result( &myData );
  row = mysql_fetch_row( res );
  strcpy(path,row[0]);
  //cout << row[0]<<path;取得path然后加入ent_address/
  strcat(path,ent_address);
  //cout << path<<"\n";
  if( mysql_query(&myData, query2.c_str()) != 0 )
  {
  printf("query error!\n");
  return 0;
  }else{
    
     cout << "mysql query run ok!\n";
    
     }
  
  
  res = mysql_store_result( &myData );
  rowCount = (int) mysql_num_rows( res );
  colCount = (int) mysql_num_fields( res );
  //cout << "\t"<<colCount<<"\t"<<rowCount<<"\n";
  
  char num[2];
  for(i=0;i<=10;i++){//构造从user_info0.conf to user_info10.conf 路径然后del掉他们,为下面从数据库取写做准备

  strcpy(file_path_del,path);
  strcat(file_path_del,"user_info");
  sprintf(num,"%d",i);
  strcat(file_path_del,num);
  strcat(file_path_del,".conf");
  if( remove(file_path_del) != 0 )//删除文件
    cout << "Error deleting "<< file_path_del <<" file, \t Because it is not exit! But it is still Ok...\n";
    else
    cout << "File" <<file_path_del<<" successfully deleted\n";
  
    }
  
  for(i = 0; i < rowCount; i++)
  {      
    row = mysql_fetch_row( res );
    for(j=0;j<colCount;j++){
    strcpy(buffer,row[0]);
    strcpy(buffer1,row[1]);
    strcpy(buffer2,row[2]);
    strcpy(buffer3,row[3]);
    strcpy(buffer4,row[4]);
    strcpy(buffer5,row[5]);
    strcpy(buffer6,row[6]);
    strcpy(buffer7,row[7]);
    strcpy(buffer8,row[8]);
    strcpy(buffer9,row[9]);
        
    char* p = strstr(buffer,"@");
    *p=0;
    //取@前面的
    const char *uid;
    uid=buffer;
    
    if(GetUserDetailFilename(uid, filename, 100)<0)//获取目录位置
    {
      cout<<"GetUserDetailFilename() erro...";  
  
    }
      
                 }//字段数循环
    char file_path[1024];
    strcpy(file_path,path);
    strcat(file_path,filename);//得到文件的完整的path路径
    //cout<<"file_path="<<file_path<<"\n\n";

    //write file
    ofstream fout(file_path,ios_base::app);
    fout <<"[USER:"<<buffer<<"]\n"<<"EMAIL="<<buffer<<"\n"<<"REALNAME="<<buffer1<<"\n"<<"TEL="<<buffer2<<"\n"<<"MOBILE="<<buffer3<<"\n"<<"ADDRESS="<<buffer4<<"\n"<<"OFFICE="<<buffer5<<"\n"<<"ENTER_TIME="<<buffer6<<"\n"<<"NUM="<<buffer7<<"\n"<<"DEPT="<<buffer8<<"\n"<<"FLAG="<<buffer9<<"\n";

    fout.close();
    


    memset(file_path, 0, 1024);//清空该变量 清空其它字段缓存
    memset(buffer, 0, 1024);
    memset(buffer1, 0, 1024);
    memset(buffer2, 0, 1024);
    memset(buffer3, 0, 1024);
    memset(buffer4, 0, 1024);
    memset(buffer5, 0, 1024);
    memset(buffer6, 0, 1024);
    memset(buffer7, 0, 1024);
    memset(buffer8, 0, 1024);
    memset(buffer9, 0, 1024);
    
      
  }//条目数
  
  cout <<"\n\n\nVery good ,The task  finished all right!\t goodbye...\n\n\n";

}




int GetUserDetailFilename(const char *email, char *filename, const unsigned
int size)
{
  if(!email || !filename)return -1;
  int t=0, n;
  for(int i=0; i<strlen(email); i++)
    t+=email[i];
  
  n = (int)fmod(t, DETAILFILE_NUM)+1;
  if(snprintf(filename, size, "user_info%d.conf", n)>=size)return -1;
  return 0;
}
remove function
int remove ( const char * filename ); <cstdio>

Remove file

Deletes the file whose name is specified in filename.
This is an operation performed directly on a file; No streams are involved in the operation.


Parameters
filename
C string containing the name of the file to be deleted. This paramenter must follow the file name specifications of the running environment and can include a path if the system supports it.

Return value
If the file is successfully deleted, a zero value is returned.
On failure, a nonzero value is reurned and the errno variable is set to the corresponding error code. Error codes are numerical values representing the type of failure occurred. A string interpreting this value can be printed to the standard error stream by a call to perror.

Example
/* remove example: remove myfile.txt */
#include <stdio.h>

int main ()
{
  if( remove( "myfile.txt" ) != 0 )
    perror( "Error deleting file" );
  else
    puts( "File successfully deleted" );
  return 0;
}


If the file example.txt existed before the execution and we had write access to it, then the file will be deleted and this message will be written to stdout:
File successfully deleted

Otherwise, a message similar to this will be written to stderr:
Error deleting file: No such file or directory


See also
rename Rename file (function)
电脑重起故障,一般都是由这些原因引起的(根据出现概率排序):
  1.CPU过热
   此种原因导致的重起,一般重起的时间间隔比较有规律,并且在运行大型程序或游戏的时候重起比较频繁。这种比较好检测,重起现象发生后,立即进BIOS察看一下CPU的温度。如果INTEL的在70度以上,AMD的在65度以上,那就很有可能是这种原因导致的。 CPU过热基本都是散热器风扇故障、散热器风道积灰太多、散热器底座或扣具损坏引起的。
  我通常是这样判断是不是由CPU过热引起重起的:找个大文件或是电影,用RAR压缩5分钟以上,不重起就不是CPU过热引起的。 这种原因导致的重起是出现概率最高也是最容易判断的。
  
  2.电源故障
   如果检测不是CPU的问题,第二个该怀疑的就是电源了。判断电源故障引起的重起就很需要经验了。电源故障引起的重起有两种情况:1.开机后很快就重起; 2.无规律重起。开机后很快就重起这种情况,替换电源就很快可以判断是不是电源故障了;无规律重起判断起来就很麻烦了,这种情况通常发生在那些采用劣质电源(尤其是那些没有听说过名字的杂牌电源)或者是设备很多的计算机上。根据我和我的同事统计,这种原因引起重起的概率仅次于CPU过热。
  
  3.内存不完全损坏
   内存不完全损坏。是指内存有个别存储单元损坏或者是其他原因引起的热不稳定。内存不完全损坏通常还会引起一些其他的现象:经常程序报错,或是经常弹出对话框说某某程序引用错误的内存地址,或是偶尔还蓝屏。内存不完全损坏可以用微软内存检测工具来检测,我很喜欢这个检测软件,它检测的结果很准,就是速度奇慢很讨厌。
  
  4.主板故障
  主板故障引起的重起是最难判断的,这种原因导致的重起往往是没有规律没有特征的。CM最讨厌这种重起(呵呵,其实只要是无故重起,没有不讨厌的)。CM通常最后再检测是不是主板引起的重起。
  
  5.机箱按钮故障
  机箱按钮如果是使用时间太长,或是其他原因造成弹性不好。也会引起重起,一般的现象是开机后就不断的重起。当然也有少数是进系统之后无规律重起的。机箱按钮故障引起的重起,一般发生在老机器或是使用杂牌机箱的机器上。
  
  6.供电问题
   供电问题是指电压不稳,或者是电力线路有问题引起的。电压不稳引起的重起,通常可以在电脑附近开盏灯,如果重起时,灯突然变暗。那就是电压问题了。当然,如果有万用表、稳压器之类的东西来辅助判断就更好了。电力线路问题引起的故障也可以在接电脑的插线板上插个台灯来判断。如果重起的时候台灯突然灭了或是突然变暗,那就是电力线路有问题了。
  
  7.显卡过热
  显卡引起重起并不多见。通常在重起前会有短暂的花屏、黑屏现象。开箱后可也看到显卡风扇有问题,或者可以摸到显卡的显存、散热片很烫手。
  
  8.硬件冲突
  硬件冲突引起的重起,通常都很不好判断,需要有很多备件来测试。 我遇到过的最离谱的硬件冲突是几片昂达865的主板同CD 2.8的CPU冲突,换其他频率的CD就好了。真是匪夷所思,居然这样的硬件冲突也会发生。
  
  9.环境因素
   环境因素引起的重起就不好说了。我仅仅遇到过一次:一个客户的电脑总是重起,什么部件都换过了,就是不行,稳压器、UPS都装了,也不行。把他的电脑搬到公司烤了一个星期,什么问题都没有。最后发现他们家旁边的楼顶上有个基站。 总之,换个地方故障就消失的,那就是环境因素引起的。
  
  10.CPU不完全损坏或是热不稳定
  这种原因引起的重起CM目前还没有遇到过,不过我有几个同事都曾经遇到过了。我还不知道这种重起特征现象。相信只有用替换法才可以判断出来
  
  11.其他因素
  比如软件问题 、主机电源线松动、中了木马等等,这些原因引起的重起并不多见。
  
  
  CM才疏学浅,经验也不很丰富,如有遗漏或谬误,欢迎各位补充指正!
[博爱情感网]http://vastai.com/index.html
http://tieba.baidu.com/f?kz=334927979
点击在新窗口中浏览此图片
问:
用PHP把数据库导出为excel文件,并且能导出格式及背景、线条等!
______________________________________________________________________________________________
答1:
gz
______________________________________________________________________________________________
答2:
gz
______________________________________________________________________________________________
答3:
如果是直接导出到EXCEL的话,依目前的技术能力似乎还不能做到。连大名鼎鼎的OpenOffice对EXCEL的支持也不是很好。
不过有种投机取巧的方法可以实现,就是从数据库中取出数据后,生成一个表格,样式自己定义好,然后让浏览器识别为下载excel。以下只是一个示例:

<?php
// 转载请注明phpteam
$title = "数据库名:test, 数据表:test, 备份日期:" . date("Y-m-d H:i:s");

$conn = @mysql_connect("localhost", "root", "") or die("不能连接数据库");
@mysql_select_db("test", $conn);
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=test.xls");
header("Pragma: no-cache");
header("Expires: 0");
echo '<table border="1" cellspacing="2" cellpadding="2" width="50%" align="center">';
// 输出标题
echo '<tr bgcolor="#cccccc"><td colspan="3" align="center">' . $title . '</td></tr>';

$query = "select * from test";
$result = mysql_query($query) or die(mysql_error());
$fields = mysql_num_fields($result);
// 输出字段名
echo '<tr bgcolor="blue">';
for($i = 0; $i < $fields; $i++) {
    echo '<td>' . mysql_field_name($result, $i) . '</td>';
}
echo '</tr>';
// 输出内容
while($row = mysql_fetch_row($result)) {
    echo '<tr>';
    for($i = 0; $i<$fields; $i++) {
        echo '<td>' . $row[$i] . '</td>';
    }
    echo '</tr>';
}
echo '</table>';
?>
______________________________________________________________________________________________
答4:
其实这个问题应该这样问:用ASP把数据库导出为excel文件,并且能导出格式及背景、线条等
如果行,则用php就行

______________________________________________________________________________________________
答5:
我今天找到一个网上,可以这样做的,但不知道怎么做的。

http://www.time-assistant.com/tastandard/hlogin.php

username:joesen

password:joesen

进入admin菜单下,有一个XLS按钮,导出为excel,导到本地,你看一下就知道了。
______________________________________________________________________________________________
答6:
哈哈,托你的福,我已经知道怎么解决了,你把下面着段代码存为.xls文件看看,知道该怎么做了吧?


  <html xmlns:o="urn:schemas-microsoft-com:office:office"
        xmlns:x="urn:schemas-microsoft-com:office:excel"
        xmlns="http://www.w3.org/TR/REC-html40">
  <head>
        <meta http-equiv="expires" content="Mon, 06 Jan 1999 00:00:01 GMT">
        <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
        <!--[if gte mso 9]><xml>
        <x:ExcelWorkbook>
        <x:ExcelWorksheets>
                <x:ExcelWorksheet>
                <x:Name></x:Name>
                <x:WorksheetOptions>
                        <x:DisplayGridlines/>
                </x:WorksheetOptions>
                </x:ExcelWorksheet>
        </x:ExcelWorksheets>
        </x:ExcelWorkbook>
        </xml><![endif]-->

  </head>

<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td align="center" class="big6" >Users (except the ones disabled)</td></tr>

<tr><td class="greyborder">
  <table border="1" align="center" width="100%" cellpadding="1" cellspacing="1">
  <tr align="center">
      <td class="TableTopHeader" nowrap>
      Login   </td>
   <td class="TableTopHeader" nowrap>
      Name   </td>
   <td class="TableTopHeader" width="3%" nowrap>
      EMail   </td>
   <td class="TableTopHeader" nowrap>
    Department   </td>
   <td class="TableTopHeader" nowrap>
    Position   </td>
   <td class="TableTopHeader" nowrap width="1%">
     Level   </td>
   <td class="TableTopHeader">Address</td>
   <td class="TableTopHeader">Phone</td>
</tr>
    <tr  class="even">
    
      <td class="mtlist"> joesen</td>
      <td class="mtlist"> hong joesen</td>
      <td class="mtlist" >allfu@163.net</td>
      <td class="mtlist"> Software developments</td>
      <td class="mtlist"> System Administrator</td>
      <td class="mtlist"> Admin</td>
    
      
      <td class="mtlist"> </td>
      <td class="mtlist"> </td>
  </tr>
  </table>
</td></tr>  
</table>
______________________________________________________________________________________________
答7:
结贴吧!
这就是 phpteam(我忍住不哭) 提供的方法

不错,不错。有长见识了!

______________________________________________________________________________________________
答8:
能说清楚点吗?我还是不明白。
______________________________________________________________________________________________
答9:
up
______________________________________________________________________________________________
答10:
zh_yuandc(中原大帝)贴出的就是从http://www.time-assistant.com/tastandard/hlogin.php
下载下来的.xls文件,你用文本编辑器打开就是那个样子。你用Excel打开就可以进行编辑。

我理解他是一个Excel可识别处理的xml文档,不是真正的Excel文档。但这已经很好了。
”文件”中如果没有指定路径,则在该可执行文件相同的文件夹下,如果指定路径则在该路径下,如:
ofstream ofile("output.dat");
ofstream ofile("c:\\temp\\output.dat");

如果文件不存在,则一般新建一个文件。打开方式,如按二进制打开
ofstream ofile("output.dat", ios_base::binary);
[b]如果追加方式打开,则:[/b]
ofstream ofile("output.dat", ios_base::app);
注意:ofstream 流在打开方式中已经默认了ios_base::out,故这个参数一般不必重复使用,如:
ofstream ofile("output.dat", ios_base::out);

早期的C++语言使用ios代替ios_base

序论
  我曾发表过文件输入输出的文章,现在觉得有必要再写一点。文件 I/O 在C++中比烤蛋糕简单多了。 在这篇文章里,我会详细解释ASCII和二进制文件的输入输出的每个细节,值得注意的是,所有这些都是用C++完成的。

一、ASCII 输出
  为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream.h>包含了, 所以你不必包含所有这两个文件, 如果你想显式包含他们,那随便你。我们从文件操作类的设计开始, 我会讲解如何进行ASCII I/O操作。如果你猜是"fstream," 恭喜你答对了! 但这篇文章介绍的方法,我们分别使用"ifstream"?和 "ofstream" 来作输入输出。
如果你用过标准控制台流"cin"?和 "cout," 那现在的事情对你来说很简单。 我们现在开始讲输出部分,首先声明一个类对象。

ofstream fout;

这就可以了,不过你要打开一个文件的话, 必须像这样调用ofstream::open()。

fout.open("output.txt");

你也可以把文件名作为构造参数来打开一个文件.

ofstream fout("output.txt");

  这是我们使用的方法, 因为这样创建和打开一个文件看起来更简单. 顺便说一句, 如果你要打开的文件不存在,它会为你创建一个, 所以不用担心文件创建的问题. 现在就输出到文件,看起来和"cout"的操作很像。 对不了解控制台输出"cout"的人, 这里有个例子。

int num = 150;char name[] = "John Doe";fout << "Here is a number: " << num << "\n";fout << "Now here is a string: " << name << "\n";

  现在保存文件,你必须关闭文件,或者回写文件缓冲. 文件关闭之后就不能再操作了, 所以只有在你不再操作这个文件的时候才调用它,它会自动保存文件。 回写缓冲区会在保持文件打开的情况下保存文件, 所以只要有必要就使用它。回写看起来像另一次输出, 然后调用方法关闭。像这样:

fout << flush; fout.close();

现在你用文本编辑器打开文件,内容看起来是这样:

Here is a number: 150 Now here is a string: John Doe

  很简单吧! 现在继续文件输入, 需要一点技巧, 所以先确认你已经明白了流操作,对 "<<" 和">>" 比较熟悉了, 因为你接下来还要用到他们。继续…

二、ASCII 输入
  输入和"cin" 流很像. 和刚刚讨论的输出流很像, 但你要考虑几件事情。在我们开始复杂的内容之前, 先看一个文本:

12 GameDev 15.45 L This is really awesome!

为了打开这个文件,你必须创建一个in-stream对象,?像这样。

ifstream fin("input.txt");

  现在读入前四行. 你还记得怎么用"<<" 操作符往流里插入变量和符号吧?好,?在 "<<" (插入)?操作符之后,是">>" (提取) 操作符. 使用方法是一样的. 看这个代码片段.

int number; float real; char letter, word[8]; fin >> number; fin >> word; fin >> real; fin >> letter;

也可以把这四行读取文件的代码写为更简单的一行。

fin >> number >> word >> real >> letter;

  它是如何运作的呢? 文件的每个空白之后, ">>" 操作符会停止读取内容, 直到遇到另一个>>操作符. 因为我们读取的每一行都被换行符分割开(是空白字符), ">>" 操作符只把这一行的内容读入变量。这就是这个代码也能正常工作的原因。但是,可别忘了文件的最后一行。

This is really awesome!

  如果你想把整行读入一个char数组, 我们没办法用">>"?操作符,因为每个单词之间的空格(空白字符)会中止文件的读取。为了验证:

char sentence[101]; fin >> sentence;

  我们想包含整个句子, "This is really awesome!" 但是因为空白, 现在它只包含了"This". 很明显, 肯定有读取整行的方法, 它就是getline()。这就是我们要做的。

fin.getline(sentence, 100);

  这是函数参数. 第一个参数显然是用来接受的char数组. 第二个参数是在遇到换行符之前,数组允许接受的最大元素数量. 现在我们得到了想要的结果:“This is really awesome!”。
你应该已经知道如何读取和写入ASCII文件了。但我们还不能罢休,因为二进制文件还在等着我们。

三、二进制 输入输出
  二进制文件会复杂一点, 但还是很简单的。 首先你要注意我们不再使用插入和提取操作符(译者注:<< 和 >> 操作符). 你可以这么做,但它不会用二进制方式读写。你必须使用read() 和write() 方法读取和写入二进制文件. 创建一个二进制文件, 看下一行。

ofstream fout("file.dat", ios::binary);

  这会以二进制方式打开文件, 而不是默认的ASCII模式。首先从写入文件开始。函数write() 有两个参数。 第一个是指向对象的char类型的指针, 第二个是对象的大小(译者注:字节数)。 为了说明,看例子。

int number = 30; fout.write((char *)(&number), sizeof(number));

  第一个参数写做"(char *)(&number)". 这是把一个整型变量转为char *指针。如果你不理解,可以立刻翻阅C++的书籍,如果有必要的话。第二个参数写作"sizeof(number)". sizeof() 返回对象大小的字节数. 就是这样!
二进制文件最好的地方是可以在一行把一个结构写入文件。 如果说,你的结构有12个不同的成员。 用ASCII?文件,你不得不每次一条的写入所有成员。 但二进制文件替你做好了。 看这个。

struct OBJECT { int number; char letter; } obj; obj.number = 15;obj.letter = ‘M’; fout.write((char *)(&obj), sizeof(obj));

  这样就写入了整个结构! 接下来是输入. 输入也很简单,因为read()?函数的参数和 write()是完全一样的, 使用方法也相同。

ifstream fin("file.dat", ios::binary); fin.read((char *)(&obj), sizeof(obj));

  我不多解释用法, 因为它和write()是完全相同的。二进制文件比ASCII文件简单, 但有个缺点是无法用文本编辑器编辑。 接着, 我解释一下ifstream 和ofstream 对象的其他一些方法作为结束.

四、更多方法
  我已经解释了ASCII文件和二进制文件, 这里是一些没有提及的底层方法。

检查文件
你已经学会了open() 和close() 方法, 不过这里还有其它你可能用到的方法。
方法good() 返回一个布尔值,表示文件打开是否正确。
类似的,bad() 返回一个布尔值表示文件打开是否错误。 如果出错,就不要继续进一步的操作了。
最后一个检查的方法是fail(), 和bad()有点相似, 但没那么严重。

读文件
方法get() 每次返回一个字符。
方法ignore(int,char) 跳过一定数量的某个字符, 但你必须传给它两个参数。第一个是需要跳过的字符数。 第二个是一个字符, 当遇到的时候就会停止。 例子,

fin.ignore(100, ‘\n’);

会跳过100个字符,或者不足100的时候,跳过所有之前的字符,包括 ‘\n’。
方法peek() 返回文件中的下一个字符, 但并不实际读取它。所以如果你用peek() 查看下一个字符, 用get() 在peek()之后读取,会得到同一个字符, 然后移动文件计数器。
方法putback(char) 输入字符, 一次一个, 到流中。我没有见到过它的使用,但这个函数确实存在。

写文件
只有一个你可能会关注的方法.?那就是 put(char), 它每次向输出流中写入一个字符。

打开文件
当我们用这样的语法打开二进制文件:

ofstream fout("file.dat", ios::binary);

  "ios::binary"是你提供的打开选项的额外标志. 默认的, 文件以ASCII方式打开, 不存在则创建, 存在就覆盖. 这里有些额外的标志用来改变选项。
ios::app   添加到文件尾
ios::ate   把文件标志放在末尾而非起始。
ios::trunc   默认. 截断并覆写文件。
ios::nocreate   文件不存在也不创建。
ios::noreplace      文件存在则失败。

文件状态
  我用过的唯一一个状态函数是eof(), 它返回是否标志已经到了文件末尾。 我主要用在循环中。 例如, 这个代码断统计小写‘e’ 在文件中出现的次数。

ifstream fin("file.txt"); char ch; int counter; while (!fin.eof()) {      ch = fin.get();       if (ch == ‘e’) counter++; }fin.close();

  我从未用过这里没有提到的其他方法。 还有很多方法,但是他们很少被使用。参考C++书籍或者文件流的帮助文档来了解其他的方法。

结论
  你应该已经掌握了如何使用ASCII文件和二进制文件。有很多方法可以帮你实现输入输出,尽管很少有人使用他们。我知道很多人不熟悉文件I/O操作,我希望这篇文章对你有所帮助。 每个人都应该知道. 文件I/O还有很多显而易见的方法,?例如包含文件 <stdio.h>. 我更喜欢用流是因为他们更简单。 祝所有读了这篇文章的人好运, 也许以后我还会为你们写些东西。 


//使用(C++库)ofstream写文件数据
//simple example
#include <iostream>
#include <fstream>
using namespace std;
#ifdef WIN32
#define TEST_FILE "c:\\shi\\aaa.txt"
#else
#define TEST_FILE "/tmp/test.txt"
#endif
void test()
{
//ofstream ofs;
//ofs.open(TEST_FILE);
ofstream ofs(TEST_FILE);
char ch = '#';
const char buf[] = "1234567890";
ofs.put(ch);//simple
ofs.write(buf, sizeof(buf));
ofs.put(ch);
ofs.close();
}
int main(int argc, char* argv[])
{
test();
return 0;
}
  MM说:"我爱你."

  我脸红了.我不想害她:"我没钱,更没有房子和车."

  MM盯着我的眼睛:"我知道."

  "我的月薪只有一千五."

  MM的目光仍然坚定无比:"以后会多的."

  我用颤抖的双手拿出一支烟叼在嘴上:"我每天要抽一包烟,一喝酒就闹事."

  MM笑了,"以后有我在,你放心."

  我的脊梁上冒起一阵寒意,结结巴巴地说:"其实……其实我很流氓……幼儿园就喜欢去女厕所,小学就没了初吻,中学就……"

  MM没等我说完就软在了我的怀里,声音细若蚊鸣:"早知道你好色,你老偷偷瞄我胸脯……"

  一股鼻血喷涌而出,我抱紧了MM,温热娇小的身体让我热血沸腾.这时我忽然想到了一件很重要的事情,我决定把这事告诉MM.

  5秒钟后,MM抬头问我:"真的?"我悲愤地点点头.

  MM沉默片刻,挣开我的怀抱,抬手给了我一个耳光,她愤怒地朝我喊道:"你丫竟然是程序员!"

http://www.cnblogs.com/meil/category/62517.html?Show=All
JavaScript 是使用“对象化编程”的,或者叫“面向对象编程”的。所谓“对象化编程”,意思是把 JavaScript 能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编程都以对象为出发点,基于对象。小到一个变量,大到网页文档、窗口甚至屏幕,都是对象。这一章将“面向对象”讲述 JavaScript 的运行情况。
对象的基本知识
对象是可以从 JavaScript“势力范围”中划分出来的一小块,可以是一段文字、一幅图片、一个表单(Form)等等。每个对象有它自己的属性、方法和事件。对象的属性是反映该对象某些特定的性质的,例如:字符串的长度、图像的长宽、文字框(Textbox)里的文字等等;对象的方法能对该对象做一些事情,例如,表单的“提交”(Submit),窗口的“滚动”(Scrolling)等等;而对象的事件就能响应发生在对象上的事情,例如提交表单产生表单的“提交事件”,点击连接产生的“点击事件”。不是所有的对象都有以上三个性质,有些没有事件,有些只有属性。引用对象的任一“性质”用“<对象名>.<性质名>”这种方法。

基本对象
现在我们要复习以上学过的内容了——把一些数据类型用对象的角度重新学习一下。

Number “数字”对象。这个对象用得很少,作者就一次也没有见过。不过属于“Number”的对象,也就是“变量”就多了。

属性

MAX_VALUE 用法:Number.MAX_VALUE;返回“最大值”。
MIN_VALUE 用法:Number.MIN_VALUE;返回“最小值”。
NaN 用法:Number.NaN 或 NaN;返回“NaN”(不是数值)在很早就介绍过了。
NEGATIVE_INFINITY 用法:Number.NEGATIVE_INFINITY;返回:负无穷大,比“最小值”还小的值。
POSITIVE_INFINITY 用法:Number.POSITIVE_INFINITY;返回:正无穷大,比“最大值”还大的值。

方法

toString() 用法:<数值变量>.toString();返回:字符串形式的数值。如:若 a == 123;则 a.toString() == '123'。

String 字符串对象。声明一个字符串对象最简单、快捷、有效、常用的方法就是直接赋值。

属性

length 用法:<字符串对象>.length;返回该字符串的长度。

方法

charAt() 用法:<字符串对象>.charAt(<位置>);返回该字符串位于第<位置>位的单个字符。注意:字符串中的一个字符是第 0 位的,第二个才是第 1 位的,最后一个字符是第 length - 1 位的。
charCodeAt() 用法:<字符串对象>.charCodeAt(<位置>);返回该字符串位于第<位置>位的单个字符的 ASCII 码。
fromCharCode() 用法:String.fromCharCode(a, b, c...);返回一个字符串,该字符串每个字符的 ASCII 码由 a, b, c... 等来确定。
indexOf() 用法:<字符串对象>.indexOf(<另一个字符串对象>[, <起始位置>]);该方法从<字符串对象>中查找<另一个字符串对象>(如果给出<起始位置>就忽略之前的位置),如果找到了,就返回它的位置,没有找到就返回“-1”。所有的“位置”都是从零开始的。
lastIndexOf() 用法:<字符串对象>.lastIndexOf(<另一个字符串对象>[, <起始位置>]);跟 indexOf() 相似,不过是从后边开始找。
split() 用法:<字符串对象>.split(<分隔符字符>);返回一个数组,该数组是从<字符串对象>中分离开来的,<分隔符字符>决定了分离的地方,它本身不会包含在所返回的数组中。例如:'1&2&345&678'.split('&')返回数组:1,2,345,678。关于数组,我们等一下就讨论。
substring() 用法:<字符串对象>.substring(<始>[, <终>]);返回原字符串的子字符串,该字符串是原字符串从<始>位置到<终>位置的前一位置的一段。<终> - <始> = 返回字符串的长度(length)。如果没有指定<终>或指定得超过字符串长度,则子字符串从<始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串,则返回空字符串。
substr() 用法:<字符串对象>.substr(<始>[, <长>]);返回原字符串的子字符串,该字符串是原字符串从<始>位置开始,长度为<长>的一段。如果没有指定<长>或指定得超过字符串长度,则子字符串从<始>位置一直取到原字符串尾。如果所指定的位置不能返回字符串,则返回空字符串。
toLowerCase() 用法:<字符串对象>.toLowerCase();返回把原字符串所有大写字母都变成小写的字符串。
toUpperCase() 用法:<字符串对象>.toUpperCase();返回把原字符串所有小写字母都变成大写的字符串。

Array 数组对象。数组对象是一个对象的集合,里边的对象可以是不同类型的。数组的每一个成员对象都有一个“下标”,用来表示它在数组中的位置(既然是“位置”,就也是从零开始的啦)。

数组的定义方法:

var <数组名> = new Array();

这样就定义了一个空数组。以后要添加数组元素,就用:

<数组名>[<下标>] = ...;

注意这里的方括号不是“可以省略”的意思,数组的下标表示方法就是用方括号括起来。

如果想在定义数组的时候直接初始化数据,请用:

var <数组名> = new Array(<元素1>, <元素2>, <元素3>...);

例如,var myArray = new Array(1, 4.5, 'Hi'); 定义了一个数组 myArray,里边的元素是:myArray[0] == 1; myArray[1] == 4.5; myArray[2] == 'Hi'。

但是,如果元素列表中只有一个元素,而这个元素又是一个正整数的话,这将定义一个包含<正整数>个空元素的数组。

注意:JavaScript只有一维数组!千万不要用“Array(3,4)”这种愚蠢的方法来定义 4 x 5 的二维数组,或者用“myArray[2,3]”这种方法来返回“二维数组”中的元素。任意“myArray[...,3]”这种形式的调用其实只返回了“myArray[3]”。要使用多维数组,请用这种虚拟法:

var myArray = new Array(new Array(), new Array(), new Array(), ...);

其实这是一个一维数组,里边的每一个元素又是一个数组。调用这个“二维数组”的元素时:myArray[2][3] = ...;

属性

length 用法:<数组对象>.length;返回:数组的长度,即数组里有多少个元素。它等于数组里最后一个元素的下标加一。所以,想添加一个元素,只需要:myArray[myArray.length] = ...。

方法

join() 用法:<数组对象>.join(<分隔符>);返回一个字符串,该字符串把数组中的各个元素串起来,用<分隔符>置于元素与元素之间。这个方法不影响数组原本的内容。
reverse() 用法:<数组对象>.reverse();使数组中的元素顺序反过来。如果对数组[1, 2, 3]使用这个方法,它将使数组变成:[3, 2, 1]。
slice() 用法:<数组对象>.slice(<始>[, <终>]);返回一个数组,该数组是原数组的子集,始于<始>,终于<终>。如果不给出<终>,则子集一直取到原数组的结尾。
sort() 用法:<数组对象>.sort([<方法函数>]);使数组中的元素按照一定的顺序排列。如果不指定<方法函数>,则按字母顺序排列。在这种情况下,80 是比 9 排得前的。如果指定<方法函数>,则按<方法函数>所指定的排序方法排序。<方法函数>比较难讲述,这里只将一些有用的<方法函数>介绍给大家。

按升序排列数字:

function sortMethod(a, b) {
    return a - b;
}

myArray.sort(sortMethod);

按降序排列数字:把上面的“a - b”该成“b - a”。

有关函数,请看下面。

Math “数学”对象,提供对数据的数学计算。下面所提到的属性和方法,不再详细说明“用法”,大家在使用的时候记住用“Math.<名>”这种格式。

属性

E 返回常数 e (2.718281828...)。
LN2 返回 2 的自然对数 (ln 2)。
LN10 返回 10 的自然对数 (ln 10)。
LOG2E 返回以 2 为低的 e 的对数 (log2e)。
LOG10E 返回以 10 为低的 e 的对数 (log10e)。
PI 返回π(3.1415926535...)。
SQRT1_2 返回 1/2 的平方根。
SQRT2 返回 2 的平方根。

方法

abs(x) 返回 x 的绝对值。
acos(x) 返回 x 的反余弦值(余弦值等于 x 的角度),用弧度表示。
asin(x) 返回 x 的反正弦值。
atan(x) 返回 x 的反正切值。
atan2(x, y) 返回复平面内点(x, y)对应的复数的幅角,用弧度表示,其值在 -π 到 π 之间。
ceil(x) 返回大于等于 x 的最小整数。
cos(x) 返回 x 的余弦。
exp(x) 返回 e 的 x 次幂 (ex)。
floor(x) 返回小于等于 x 的最大整数。
log(x) 返回 x 的自然对数 (ln x)。
max(a, b) 返回 a, b 中较大的数。
min(a, b) 返回 a, b 中较小的数。
pow(n, m) 返回 n 的 m 次幂 (nm)。
random() 返回大于 0 小于 1 的一个随机数。
round(x) 返回 x 四舍五入后的值。
sin(x) 返回 x 的正弦。
sqrt(x) 返回 x 的平方根。
tan(x) 返回 x 的正切。

Date 日期对象。这个对象可以储存任意一个日期,从 0001 年到 9999 年,并且可以精确到毫秒数(1/1000 秒)。在内部,日期对象是一个整数,它是从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。如果所指日期比 1970 年早,则它是一个负数。所有日期时间,如果不指定时区,都采用“UTC”(世界时)时区,它与“GMT”(格林威治时间)在数值上是一样的。

定义一个日期对象:

var d = new Date;

这个方法使 d 成为日期对象,并且已有初始值:当前时间。如果要自定初始值,可以用:

var d = new Date(99, 10, 1);     //99 年 10 月 1 日
var d = new Date('Oct 1, 1999'); //99 年 10 月 1 日

等等方法。最好的方法就是用下面介绍的“方法”来严格的定义时间。

方法

以下有很多“g/set[UTC]XXX”这样的方法,它表示既有“getXXX”方法,又有“setXXX”方法。“get”是获得某个数值,而“set”是设定某个数值。如果带有“UTC”字母,则表示获得/设定的数值是基于 UTC 时间的,没有则表示基于本地时间或浏览期默认时间的。

如无说明,方法的使用格式为:“<对象>.<方法>”,下同。

g/set[UTC]FullYear() 返回/设置年份,用四位数表示。如果使用“x.set[UTC]FullYear(99)”,则年份被设定为 0099 年。
g/set[UTC]Year() 返回/设置年份,用两位数表示。设定的时候浏览器自动加上“19”开头,故使用“x.set[UTC]Year(00)”把年份设定为 1900 年。
g/set[UTC]Month() 返回/设置月份。
g/set[UTC]Date() 返回/设置日期。
g/set[UTC]Day() 返回/设置星期,0 表示星期天。
g/set[UTC]Hours() 返回/设置小时数,24小时制。
g/set[UTC]Minutes() 返回/设置分钟数。
g/set[UTC]Seconds() 返回/设置秒钟数。
g/set[UTC]Milliseconds() 返回/设置毫秒数。
g/setTime() 返回/设置时间,该时间就是日期对象的内部处理方法:从 1970 年 1 月 1 日零时正开始计算到日期对象所指的日期的毫秒数。如果要使某日期对象所指的时间推迟 1 小时,就用:“x.setTime(x.getTime() + 60 * 60 * 1000);”(一小时 60 分,一分 60 秒,一秒 1000 毫秒)。
getTimezoneOffset() 返回日期对象采用的时区与格林威治时间所差的分钟数。在格林威治东方的市区,该值为负,例如:中国时区(GMT+0800)返回“-480”。
toString() 返回一个字符串,描述日期对象所指的日期。这个字符串的格式类似于:“Fri Jul 21 15:43:46 UTC+0800 2000”。
toLocaleString() 返回一个字符串,描述日期对象所指的日期,用本地时间表示格式。如:“2000-07-21 15:43:46”。
toGMTString() 返回一个字符串,描述日期对象所指的日期,用 GMT 格式。
toUTCString() 返回一个字符串,描述日期对象所指的日期,用 UTC 格式。
parse() 用法:Date.parse(<日期对象>);返回该日期对象的内部表达方式。

全局对象
全局对象从不现形,它可以说是虚拟出来的,目的在于把全局函数“对象化”。在 Microsoft JScript 语言参考中,它叫做“Global 对象”,但是引用它的方法和属性从来不用“Global.xxx”(况且这样做会出错),而直接用“xxx”。

属性

一早就说过了。

方法

eval() 把括号内的字符串当作标准语句或表达式来运行。
isFinite() 如果括号内的数字是“有限”的(介于 Number.MIN_VALUE 和 Number.MAX_VALUE 之间)就返回 true;否则返回 false。
isNaN() 如果括号内的值是“NaN”则返回 true 否则返回 false。
parseInt() 返回把括号内的内容转换成整数之后的值。如果括号内是字符串,则字符串开头的数字部分被转换成整数,如果以字母开头,则返回“NaN”。
parseFloat() 返回把括号内的字符串转换成浮点数之后的值,字符串开头的数字部分被转换成浮点数,如果以字母开头,则返回“NaN”。
toString() 用法:<对象>.toString();把对象转换成字符串。如果在括号中指定一个数值,则转换过程中所有数值转换成特定进制。
escape() 返回括号中的字符串经过编码后的新字符串。该编码应用于 URL,也就是把空格写成“%20”这种格式。“+”不被编码,如果要“+”也被编码,请用:escape('...', 1)。
unescape() 是 escape() 的反过程。解编括号中字符串成为一般字符串。

函数
函数的定义

所谓“函数”,是有返回值的对象或对象的方法。

函数的种类

常见的函数有:构造函数,如 Array(),能构造一个数组;全局函数,即全局对象里的方法;自定义函数;等等。

自定义函数

定义函数用以下语句:

function 函数名([参数集]) {
    ...
    [return[ <值>];]
    ...
}

其中,用在 function 之后和函数结尾的大括号是不能省去的,就算整个函数只有一句。

函数名与变量名有一样的起名规定,也就是只包含字母数字下划线、字母排头、不能与保留字重复等。

参数集可有可无,但括号就一定要有。

参数 是函数外部向函数内部传递信息的桥梁,例如,想叫一个函数返回 3 的立方,你就要让函数知道“3”这个数值,这时候就要有一个变量来接收数值,这种变量叫做参数。

参数集是一个或多个用逗号分隔开来的参数的集合,如:a, b, c。

函数的内部有一至多行语句,这些语句并不会立即执行,而只当有其它程序调用它时才执行。这些语句中可能包含“return”语句。在执行一个函数的时候,碰到 return 语句,函数立刻停止执行,并返回到调用它的程序中。如果“return”后带有<值>,则退出函数的同时返回该值。

在函数的内部,参数可以直接当作变量来使用,并可以用 var 语句来新建一些变量,但是这些变量都不能被函数外部的过程调用。要使函数内部的信息能被外部调用,要么使用“return”返回值,要么使用全局变量。

全局变量 在 Script 的“根部”(非函数内部)的“var”语句所定义的变量就是全局变量,它能在整个过程的任意地方被调用、更改。



function addAll(a, b, c) {
    return a + b + c;
}

var total = addAll(3, 4, 5);

这个例子建立了一个叫“addAll”的函数,它有 3 个参数:a, b, c,作用是返回三个数相加的结果。在函数外部,利用“var total = addAll(3, 4, 5);”接收函数的返回值。

更多的时候,函数是没有返回值的,这种函数在一些比较强调严格的语言中是叫做“过程”的,例如 Basic 类语言的“Sub”、Pascal 语言的“procedure”。

属性

arguments 一个数组,反映外部程序调用函数时指定的参数。用法:直接在函数内部调用“arguments”。
建议一:技术换干股

        淘宝网是个好东东,当个掌柜就可以赚钱,当淘宝掌柜赚了钱干什么呢?最好是做个自己的网站,把淘宝店当宣传和门市,把自己的网站当资产,耕耘升值。

        程序员的机遇在于,99%的淘宝掌柜自己做不了一个成长性强可维护的独立网站,如果有人给你10%的股份请你编程,你就可以想买权证一样,赌它一把,最坏是零蛋,最好是VC第一轮进入,你就套现。

       程序员要在心态上把建网站当成炒权证,一分钱的现金都不要对方的,就要股份,这样,那天心情不爽了,或者那个掌柜干的事没戏,立刻就散伙,没有一分钱的心理压力。



捷径二:技术换人脉

        董路博客火吧,可董路为啥没象徐静蕾一样自己做个鲜花村的网站呢?不是不想,肯定是没技术+不愿意花钱操心去弄。

        如果你帮董路免费弄一个呢,一分钱不要,一个百分点的股份也不要,就要他的网站下面有一行字:本站由董路粉丝程序员小X公益制作维护,联系邮件….

        程序员不可能都去谷歌百度拿上期权等套现,人家已经规范了,要想发财,就要搭上潜力企业,怎么搭上潜力企业的CEO呢?

        根据SNS六度空间理论,名人的粉丝最杂,你帮名人的忙,一定有名人的粉丝帮你一把。

        眼光不用太高,比董路小100号的,某行业的名人也很使用,你要是给你们家乡的县长弄个网站,保证你们家人一定受益,当然,前提是要落实清楚,Y是不是个马上双规的贪官。



捷径三:技术换市场

        程序员最容易犯的错误是盲目自信地给自己的产品定义用户。

        这些日子闹腾最凶的新浪搜狐腾讯博客互相搬家就是典型,大家都嚷嚷自己有个博客搬家工具,恶狠狠地把自己的程序产品功能定义成:为从某处搬家到我这里的博客用户服务。

其实,博客的粉丝们才最需要这样一个工具:

【博客珍藏工具】

把你最喜欢的博客,全部下载到你的硬盘,全部Word文档、保存全部链接和评论,你可以随时看,也可以随便把这些博客整理分享给你的好朋友。

如果新浪肯出这样一个工具,贫僧一定把当年明月的博客都珍藏下来,然后,闲着没事的时候,到处转贴。

如果博客的粉丝们都用新浪的【博客珍藏工具】到处下载搜狐和腾讯和Blogbus的博客,那新浪的【博客珍藏工具】岂不就可以轻松PK那个搜狗输入法的影响力了?

So,程序员应该想到某个应用,就开发一个小程序,然后免费给大家随便用,让用户自己去定义它能做什么,程序员唯一的回报是:品牌市场的口碑营销。

如果,你真做了一个万能的【博客珍藏工具】

张朝阳请你去他的游艇上谈谈收购,也不是没可能的,只要是产品真有用,真好使,就不怕张朝阳不担心万一新浪专用了,搜狐又落后挨打很操蛋。

分页: 289/339 第一页 上页 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 下页 最后页 [ 显示模式: 摘要 | 列表 ]