首页 >> 读书频道 >> 电脑 >> 小工具 search
 
· 命令行参数的分析
· 解析C语言中的sizeo
· linux系统调用实现代
· C语言常见错误小结
· C语言图像处理方法
· Linux下的主要的C语
· C 语言编程
· C++语言常见问题解答(
· C++语言常见问题解答(
· 要如何在使用者不必按 R
· 轻轻松松产生 Makef
· C#实战——应用集锦
 
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
· 2006高考录取规则
· 首批中国世界名牌产品和2
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

小工具 search


查看有无更新版本

关键字:C# 2006-8-31

 

刚上手玩 UNIX 的时候,对系统命令不熟,可是编程的时候,经常要到 include 目录里去查哪个函数或哪个常数等等的在哪个头文件里。include 里的文件实在是太多了!开始我只有去猜,后来实在猜不出就去查有这个功能命令,但立刻被 UNIX 的命令弄得头晕脑胀(我直到现在都还有“UNIX 命令恐惧症”)。后来一想,不如自己动手吧。既得到了想要的功能,又能帮助自己熟悉熟悉 UNIX 的编程,一举两得,何乐而不为呢?于是就有了 search 这个小工具。
 search 工具设计时我想有下面的功能:
1、基本功能:可以打开指定目录下的所有文件,按行搜索输入的关键字
2、支持子目录搜索
3、支持大小写不敏感搜索
 但我目前只实现了第一个功能,但立刻派上用场帮了我大忙,后来的两个功能觉得没有太大的必要性,自己写自己用的工具能用就行,这是我的观点。这是我在 UNIX 下第一次自己写工具,觉得自己写一些工具真的是一个在计算机界混的人所应具备的基本技能!我把这个工具的源码放上来,希望对初学者有一点参考价值,也希望有人能完成后两个功能,或是扩充更多的功能,别忘了通知我一声呀!请下载。这个文件在 SCO OpenServer 5 下用 cc 编译通过,在别的系统上改改头文件就能通过。
 
 
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <stdio.h>
#include <string.h>
int cou_f=0,cou_s=0,cou_t=0;
int x = 0;
int r = 0;
int c = 0;
char file_r[255] = "result";
char dirname[255] = ".";
char keyword[255] = "";
main(argc,argv)
int argc;
char **argv;
{
int i;
FILE *fp;
char buf[256];
void search();
 printf("Press 'search -h' to get help.n");
for (i=1; i<argc; i++)
{
if (strcmp(argv,"-x")==0) x = 1;
else if (strcmp(argv,"-r")==0) r = 1;
else if (strcmp(argv,"-c")==0) c = 1;
else if (strcmp(argv,"-o")==0) strcpy(file_r,argv[++i]);
else if (strcmp(argv,"-d")==0) strcpy(dirname,argv[++i]);
else if (strcmp(argv,"-k")==0) strcpy(keyword,argv[++i]);
else if (strcmp(argv,"-h")==0)
{
printf("n Tool for search keyword in files for SCO OpenServern");
printf(" Author: Daibo, 2000/3/29 n");
printf("n Usage: search -x -r -c -o ... -d ... -h n");
printf(" -xopen executive files.n");
printf(" -ropen child directory.n");
printf(" -cLower an Upper case sencitive.n");
printf(" -ofilenameThe output file,default is 'Result'.n");
printf(" -dpathnameThe path,default is the current path.n");
printf(" -kkeyword The keyword you want to search.n");
printf(" -hget help.n");
}
}
if ( strlen( keyword ) < 1 )
{
printf("You must input the keyword.n");
exit(1);
}
 if ((fp = fopen(file_r,"w"))==NULL)
{
printf("Error openning file %s.",file_r);
exit(1);
}
if ( (dirname[0] != '.') && (dirname[0] != '/') )
{
strcpy( buf, "./" );
strcat( buf, dirname );
strcpy( dirname, buf );
}
 printf("x:%dr:%dc:%dn",x,r,c);
printf("directory: %s output: %s", dirname, file_r);
 search(dirname);
if ((fp = fopen(file_r,"a"))==NULL) 
{
printf("Error openning file %s.",file_r);
exit(1);
}
printf("nI have searched %d files.n", cou_t);
printf("nThere are %d files, %d sentences include the keyword.nFor details,see the file %s.n", cou_f, cou_s, file_r);
fprintf(fp,"nI have searched %d files.n",cou_t);
fprintf(fp,"There are %d files, %d sentences include the keyword.n", cou_f, cou_s);
fclose(fp);
}
void search(char *dir_n)
{
DIR *dp;
struct direct *dir;
struct stat sbuf;
char c_dir[255] = ""; 
char c_dir1[255] = "";
void f_open(char* file);
 strcat(c_dir,dir_n);
strcat(c_dir,"/");
strcpy(c_dir1,c_dir);
 if ((dp = opendir(dir_n))==NULL)
{
printf("Error openning directory %s.n",dir_n);
exit(1);
}
 printf("nSearching %s ...n ", dir_n); //getchar();
while( ( dir = readdir(dp) )!=NULL )
{
strcpy(c_dir,c_dir1);
if ( dir->d_ino == 0 ) continue;
 if ( ( stat( dir->d_name,&sbuf ) )<0 ) continue;
 if ( (sbuf.st_mode & S_IFMT)==S_IFDIR )
if ( strcmp(dir->d_name, ".") != 0 )
if ( strcmp(dir->d_name, "..") != 0)
if (r==1) search( strcat(c_dir,dir->d_name ) );
 if ( (sbuf.st_mode & S_IFMT)==S_IFREG )
{
if ( x==1 ) f_open( strcat(c_dir, dir->d_name ) );
if ( x!=1 )
{
//if ( sbuf.st_mode & S_IEXEC==0)
if ( strcmp(file_r, dir->d_name) != 0 )
f_open( strcat(c_dir, dir->d_name ) );
}
}
}
printf( "%s search completed.n", dir_n );
}
void f_open(char* file)
{
char str[1000];
FILE *fp,*r_fp;
intflag=0;
intn=0;
 if ( ( fp = fopen( file, "r" ) ) == NULL)
{
printf("Error when openning file %sn", file);
exit(1);
}
if ( ( r_fp = fopen( file_r, "a" ) ) == NULL)
{
printf("Error when openning file %sn", file_r);
exit(1);
}
 printf("%s n",file);
while ( ( fgets(str, 1000, fp) )!=NULL )
{
n++;
if ( strstr( str, keyword )!=NULL )
{
cou_s++; flag = 1;
if (cou_s>1000)
{
printf( "Too many ... ... I'm tired.n" );
exit(0);
}
printf(" >> Found keyword %s in file %s line %d:n", keyword, file, n); 
printf(" %sn", str);
fprintf(r_fp," >> Found keyword %s in file %s line %d:n",keyword,file,n);
fprintf(r_fp," %sn", str);
} 
}
 if (flag) cou_f++;
cou_t++;
fclose(fp);
fclose(r_fp);
}

小工具 search

[ 1 ]
小工具 search num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑