简易实现网上动态信息发布 尹路 绪论 ----目前Internet发展迅速,随着网络技术不断提高,网上内容极大丰富,从高科 技到衣食住行应有尽有,网上用户也从当初的科研人员发展到了各行各业的人士, 甚至寻常百姓、家庭主妇。有关专家推测,到2000年Internet的用户将超过亿。可 以说,Internet是一个广阔的市场。如何充分利用这个工具,加速信息的流通、发 布,是许多商业人士思考的问题。目前许多出版社,杂志社纷纷出台在网上发布、 刊登信息。 ----总的看来,根据这些信息发布的特点可以分为三类: ----(1)站点成熟,功能强大,具备多种查询方式。它们一般利用大型数据库软件, 如MSSQLServer、Oracle、sybase。这是目前一些大的信息发布商所采取的方案。一 般造价比较高,光这些软件的费用就由10,000~45,000,另外还得专门配备系统管 理员。这远是一些小单位、小企业所能承受的。 ----(2)站点简单,具有简单查询功能。通常是由软件公司编写建立的数据库,性 能不一定很成熟,而且价格约20,000左右。一般小企业也不能承受。另外程序开发 需要时间,不能马上进行运转。 ----(3)站点简单,没有数据库,无或极少具有查询功能,一般是信息罗列,一般 信息更新周期长。维护麻烦,每次更新的工作量大。 ----如何找到一种简单、迅速、便宜的信息发布方式。我在建设"中国改革"网站的 时候,也遇到过这个问题,经过一些尝试,建立了一一个解决方案。 方案背景: ----信息发布《每日财经信息》,共有26个栏目,每个栏目10~40条信息,每条信息 200~600字。每日信息量100K,需要每个工作日更新。由于单位经费紧张,任务要求 的时间较紧。短时间内不可能找公司编辑数据库软件或上大型数据库。但领导要求 该信息得能够按照日期查询,并能够提供访问权限,实行收费。 方案考虑: ----1.原文件格式的处理 ----由于信息源为纯文本文件按照各个栏目存放在相应的子目录内,要将它转换为 HTML文件格式以便能以更好的方式在网络上显示。 ----2.每日信息目录索引的建立 ----为方便访问者的查阅,有必要建立一个信息的索引。提供显示每条信息的标题 或简介。并且访问者可以直接通过索引查阅到相应文章。这就要求索引上必须有与 相应信息文本的超连接。 ----3.日期查询的实现 ----对于信息的日期查询,考虑到信息存储空间的限制,只提供一定时间段的信息。 由于这些时间段是动态的,为了不使查询工作繁琐,以及保持显示界面的简洁明了, 动态更新日期列表。并使其与相应的信息目录索引进行联结。 ----4.信息的访问权限 ----使用最简单的加密方法,将信息文本放在固定的子目录中,对服务器进行设置, 设制对该目录的访问权限以实现对信息的访问控制。 解决方法(以九月七日的信息处理为例): ----编写程序html.exe。其功能是: ----(1),读取当日信息日期。 ----(2),查找相应日期的源文件存放目录,读取目录下相应的文件。 ----(3),提出文件的标题字符串,放入当日的目录索引文件中。(例如index90 7.html)在放入的时候对它进行处理建立相应的超连接。另外对目录索引文件进行 处理,加入背景、及书签方便阅读。 ----(4),对信息的原纯文本文件进行处理,加入背景、字体等修饰,使之成为标 准的HTML文件。 ----(5),生成当日的日期查询列表:修改上次的列表,删除最早的日期,增加当 日日期,保证以一个固定的时间段的信息量。这样却保有一个稳定的存储空间,并 且避免出现由于非工作日无信息而导致的用户连接找不到相应地址的情况。 ----通过程序html.exe的运行对原信息进行相应处理,生成三组文件: ----1-信息文本,2-目录索引,3-日期索引。 ----每日将生成的三组文件上载到相应的子目录即实现了对信息的每日更新。 方案的优点: 每日的维护简单,操作容易,一般操作员都能很快上手。 整个操作安全稳定,不会出现连接中断网址找不到的情况。 费用很低,不需要购买大型数据库软件和编写专业的查询软件。 实现时间短,能够在较短的时间里实现信息的动态网上发布。 程 序 清 单: #include < stdio.h > #include < string.h > #include < conio.h > #define LANXMAX 150 FILE *FileR,*FileW,*FileWIndex; char Path1[]="c:\\html\\mrcj\\"; char Path2[]="c:\\html\\mrcj\\txt\\"; char Path3[50]; char Path4[]="c:\\html\\ccrindex.htm"; char Path5[]="c:\\html\\html.ini"; char Path6[]="c:\\html\\html-1"; char Path7[]="c:\\html\\html-2"; char Month[10],Date[10]; char FileName[50]; char FileNameIndex[20]; char FilePath1[50]; //...08\\ char FilePath2[50]; //...08\\jxxta\\ char WriteFileName[50]; char IndexFileName[50]; char FileBak[5]; char LanMu; char Time[20]; char YEAR; char IndexLANMU[6][19]={ "中外财经要闻","法律法规政策","经济形势分析", "企业改革透视","社会保障制度","改革发展研究"}; int FileNum; int Yea,Mon,Dat; void FileIni() { switch(Yea) { case 98: case 1998: YEAR='B'; case 99: case 1999: YEAR='J'; default: YEAR='B'; } if(Yea< 100) Yea+=1900; FileNum=0; sprintf(FilePath1,"c:\\fl\\%02d\\",Dat); sprintf(FileBak,".%1X%02d",Mon,Dat); } void AddFileProc(int num) { char FLanRead[LANXMAX]; char MainLan[LANXMAX]; char FENLEI[50]; char IndexLan[150]; int i; sprintf(FENLEI,".中国改革.每日财经信息. %02d月%02d日\r < br >\r\n< br >\r\n",Mon,Dat); printf("*"); sprintf(FileName,"%sjxxt%c%03d%s", FilePath2,LanMu,num,FileBak); if(!(FileR=fopen(FileName,"rb"))){ printf("cannot open this file\n"); return; } //-------------add htmlhead------------ fputs("< html > \r\n< body background=\ "../../../../images/bk_creform.jpg\" > \r\n",FileW); //-------------add htmlhead------------ fputs(FENLEI,FileW); fgets(FLanRead,LANXMAX-5,FileR); //---------add index procedure--------- sprintf(IndexLan,"< a href=\"txt/%02d/%s\" target=\"new\" >%s< br > \r",Dat,FileNameIndex,FLanRead); // fputs("< br >",FileWIndex); fputs(IndexLan,FileWIndex); //---------add index procedure--------- while(!feof(FileR)) { fputs("< br >",FileW); fputs(FLanRead,FileW); strcpy(FLanRead,""); fgets(FLanRead,LANXMAX-5,FileR); } FLanRead[strlen(FLanRead)-1]='\0'; fputs("< br >",FileW); fputs(FLanRead,FileW); fclose(FileR); fputs("\r\n",FileW); //-------------add htmlend------------ fputs("< /body > \r\n< /html > \r\n",FileW); //-------------add htmlend------------ } void MakeMainFile() { FILE *fp,*fpp,*fppp; char ccc,fn[50],fff[150]; int n,mm,ddd; //-----------html--------- if((fppp=fopen(Path4,"wb"))==NULL){ printf("不能打开目标文件!\n"); printf("Can not Write the file:%s\n",Path3); return; } if((fpp=fopen(Path6,"rb"))==NULL){ printf("不能打开文件数目文件!\n"); printf("Can not Open the file:%s\n",fpp); return; } ccc=fgetc(fpp); do{ fputc(ccc, fppp); ccc=fgetc(fpp); }while (!feof(fpp)); fclose(fpp); if((fp=fopen(Path7,"rb"))==NULL){ printf("不能打开文件数目文件!\n"); printf("Can not Open the file:%s\n",fp); return; } //---------html------------- if((fp=fopen(Path5,"rb"))==NULL){ printf("不能打开文件数目文件!\n"); printf("Can not Open the file:%s\n",fp); return; } n=0; fscanf(fp, "%d", &mm); fscanf(fp, "%d", &ddd); do { n++; if(mm< 1||ddd< 1||mm >12||ddd >31){ printf("日期错误!\n"); printf("date is wrong in: c:\html\html.ini"); return; } //---------add index procedure--------- sprintf(fff," < tr > < td align=\"center\" bgcolor=\"#FF0000\" > < a href=\"../mrcj/INDEX%1X%02d.HTM\" target=\"right\" > %d月%d日< /a >< /td > < /tr > \r", mm,ddd,mm,ddd); fputs(fff,fppp); //---------add index procedure---------- fscanf(fp, "%d", &mm); fscanf(fp, "%d", &ddd); } while((!feof(fp))&&(n< 25)); fclose(fp); //-------------html--------- if((fpp=fopen(Path7,"rb"))==NULL){ printf("不能打开文件数目文件!\n"); printf("Can not Open the file:%s\n",fpp); return; } ccc=fgetc(fpp); do{ fputc(ccc, fppp); ccc=fgetc(fpp); }while (!feof(fpp)); fclose(fpp); fclose(fppp); //-------------html--------- } void AddFile() { FILE *fp; char fn[50],fi[50]; int n; sprintf(FilePath2,"%sjxxt%c\\",FilePath1, LanMu); printf("\n%s",FilePath2); sprintf(fn,"%sjxxt%cdat%s",FilePath2,LanMu, FileBak); if((fp=fopen(fn,"rb"))==NULL){ printf("不能打开文件数目文件!\n"); printf("Can not Open the file:%s\n",fn); return; } if(!fp) return; else FileNum=fgetc(fp); fclose(fp); printf(" %02d ",FileNum); for(n=1;n< =FileNum;n++) { sprintf(FileNameIndex, "%c%1X%02d%c%03d.HTM",YEAR,Mon,Dat,LanMu,n); sprintf(WriteFileName,"%s%02d\\%s", Path2,Dat,FileNameIndex); if((FileW=fopen(WriteFileName,"wb"))==NULL){ printf("不能打开目标文件!\n"); printf("Can not Write the file:%s\n", WriteFileName); return; } AddFileProc(n); fclose(FileW); } } main() { FILE *findex; int xx; clrscr(); printf("-------------\n"); printf("CSRESR MRCJ TXT to HTML for CHINAREFORM.COM \n"); printf(" COPYRIGHT YINLU 1998.4.18 \n"); printf("-------------\n"); do{ printf("\nPlease input the date(year month date): "); scanf("%d %d %d",&Yea,&Mon,&Dat); }while(!((Mon >0)&&(Mon< 13)&&(Dat >0)&& (Dat< 32)&&(((Yea >94)&&(Yea< 99))|| ((Yea >1994) &&(Yea< 1999))))); FileIni(); MakeMainFile(); //---------add index procedure--------- sprintf(IndexFileName,"%sINDEX%1X%02d.htm", Path1,Mon,Dat); if((FileWIndex=fopen(IndexFileName,"wb")) ==NULL){ printf("不能打开目标文件!\n"); printf("Can not Write the file:%s\n", IndexFileName); return 0; } fputs("< !DOCTYPE HTML PUBLIC \" -//IETF//DTD HTML//EN\" > \r",FileWIndex); fputs("< html > \r< head > \r",FileWIndex); fputs("< meta http-equiv=\"Content-Type\" \r", FileWIndex); fputs("content=\"text/html; charset=gb_2312-80\" > \r",FileWIndex); fputs("< meta name=\"GENERATOR\" content=\"Microsoft FrontPage 2.0.yinlu\" > \r",FileWIndex); fputs("< title >中国改革.每日财经信息.目录 < /title >\n< /head > \r",FileWIndex); fputs("< body background=\ "../../images/bk_creform.jpg\" > \r",FileWIndex); fputs("< table border=\"0\" width=\"100%\" bgcolor=\"#FF0000\" > \r",FileWIndex); fputs("< tr >\r",FileWIndex); fputs("< td align=\"center\" > < a href=\"#中外财经要闻\"name=\"head\" > < font color=\"#FFFFFF\" face=\"黑体\" > < strong >中外财经要闻< /strong >< /font > < /a >< /td > \r",FileWIndex); fputs("< td align=\"center\" > < a href=\"#法律法规政策\" > < fontcolor=\"#FFFFFF\" face=\"黑体\" > < strong >法律法规政策< /strong > < /font >< /a > < /td > \r",FileWIndex); fputs("< td align=\"center\" > < a href=\"#经济形势分析\" > < fontcolor=\"#FFFFFF\" face=\"黑体\" > < strong >经济形势分析< /strong > < /font >< /a > < /td > \r",FileWIndex); fputs("< /tr >< tr >\r",FileWIndex); fputs("< td align=\"center\" > < a href=\"#企业改革透视\" > < fontcolor=\"#FFFFFF\" face=\"黑体\" > < strong >企业改革透视< /strong > < /font >< /a > < /td > \r",FileWIndex); fputs("< td align=\"center\" > < a href=\"#社会保障制度\" > < fontcolor=\"#FFFFFF\" face=\"黑体\" > < strong >社会保障制度< /strong > < /font >< /a > < /td > \r",FileWIndex); fputs("< td align=\"center\" > < a href=\"#改革发展研究\" > < fontcolor=\"#FFFFFF\" face=\"黑体\" > < strong >改革发展研究< /strong > < /font >< /a > < /td > \r",FileWIndex); fputs("< /tr >\n< /table >\n\n",FileWIndex); //---------add index procedure--------- for(LanMu='A',xx=0;LanMu< ='F';LanMu++,xx++) { //---------add index procedure---------- switch(xx) { case 0: fputs("< p >< a name=\"中外财经要闻\" > 中外财经要闻 < br >\n< /a > \r",FileWIndex); break; case 1: fputs("< p >< a name=\"法律法规政策\" > 法律法规政策 < br >\n< /a > \r",FileWIndex); break; case 2: fputs("< p >< a name=\"经济形势分析\" > 经济形势分析 < br >\n< /a > \r",FileWIndex); break; case 3: fputs("< p >< a name=\"企业改革透视\" > 企业改革透视 < br >\n< /a > \r",FileWIndex); break; case 4: fputs("< p >< a name=\"社会保障制度\" > 社会保障制度 < br >\n< /a > \r",FileWIndex); break; case 5: fputs("< p >< a name=\"改革发展研究\" > 改革发展研究 < br >\n< /a > \r",FileWIndex); break; } fputs(" \n\0",FileWIndex); //---------add index procedure--------- AddFile(); fputs("< /p > \n< p >< a href=\"#head\" > 返回页首< br > \n\0",FileWIndex); } //---------add index procedure--------- fclose(FileWIndex); //---------add index procedure--------- printf("\nAdd File is Succeed! \nPress Any Key To EXIT! \n"); return 1; }