LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2742|回复: 25

统计行数?

[复制链接]
发表于 2004-4-25 16:40:36 | 显示全部楼层 |阅读模式
如何统计某个目录下所有.c和.h文件的总行数??
发表于 2004-4-25 17:44:23 | 显示全部楼层
  1. #!/usr/bin/perl -w
  2.       
  3.        $total=0;
  4.        @files=`ls *.c`;
  5.        while(@files)
  6.        { $cur=shift @files;
  7.          open(CUR,"$cur");
  8.          while(<CUR>)
  9.          {
  10.          if(/\n/){$total++}
  11.         }
  12.       }
  13.       print "$total\n";
复制代码


顺便问一下,用html写网页的时候,怎么用标签控制缩进啊
html里有没有code标签
发表于 2004-4-26 17:16:11 | 显示全部楼层
以读取/etc/fstab的行数为例:

  1. #!/usr/bin/perl -w
  2. $count=0;
  3. open(FH,"/etc/fstab") or die "Could not open /etc/fstab :$! "; #打开/etc/fatab为只读模式
  4. while (<FH>) {
  5. $count++ ;
  6. }
  7. close(FH);
  8. print "$count\n";
复制代码
发表于 2004-4-26 18:35:23 | 显示全部楼层
呵呵,版主又出现了  :p
发表于 2004-4-26 19:08:23 | 显示全部楼层
我也练着写了一个,望指点::thank
[php]
#!perl -w
#perl version:5.8.0
$line=0;
$dir="/home/javalee/test";
opendir DIR,$dir;
foreach $file(readdir DIR){
        if($file=~/\.[hc]$/){
                print "$file \n";
                open FILE,$file;
                while(<FILE>){$line++;}
        }
}
close FILE;
print "Total: $line lines\n";
closedir DIR;[/php]
Q:怎么同时打开多个文件?:ask :thank
发表于 2004-4-26 20:26:05 | 显示全部楼层
最初由 javalee 发表
我也练着写了一个,望指点::thank
[php]
#!perl -w
#perl version:5.8.0
$line=0;
$dir="/home/javalee/test";
opendir DIR,$dir;
foreach $file(readdir DIR){
        if($file=~/\.c$/){
                print "$file \n";
                open FILE,$file;
                while(<FILE>){$count++;}
        }
}
close FILE;
print "Total: $line lines\n";
closedir DIR;[/php]
Q:怎么同时打开多个文件?:ask :thank

只有创建子进程和线程了,不知道 perl有关于线程的函数吗?
用fork()会不会重复做次重复的动作呢? 我感觉用fork()不好,可能也不行!
发表于 2004-4-26 21:51:25 | 显示全部楼层
版主的头像好COOL~~~:cool:
ps:谢谢答复,刚刚开始学perl,好多东西不懂~ :sorry在上面的我的脚本中我想同时找到.h的文件,就像这样:
find -name "*.c" -o -name "*.h"
因为这样的话,才符号楼主的要求 ;)
发表于 2004-4-26 22:04:13 | 显示全部楼层
最初由 javalee 发表
版主的头像好COOL~~~:cool:
ps:谢谢答复,刚刚开始学perl,好多东西不懂~ :sorry

谢谢夸奖哟~~~~
同时打开,用了不同的时间片了,就需要不同的进程,用fork(),线程,可能还有超线程,才能产生不同的进程,不同的进程分别使用不同的时间片,看起来就象同时运行一样。
我也是蒙的,还请高手说说你的看法!!
发表于 2004-4-26 22:44:25 | 显示全部楼层
1:
       
ps:谢谢答复,刚刚开始学perl,好多东西不懂~ 在上面的我的脚本中我想同时找到.h的文件,就像这样:
find -name "*.c" -o -name "*.h"

perl的标准做法是这样的:
[php]
foreach my $file (glob("$dir/*.[ch]") {
  ……
}
[/php]

2:
关于统计行数,普通是这样:
[php]
open(FILE, $file) or die "Cannot open $file: $!";
$count++ while <FILE>;
[/php]
也可以这样:
[php]
for ($count=0; <FILE>; $count++) {};
[/php]
或这样:
[php]
1 while <FILE>;
$count = $.;
[/php]
但最快的方法据说是这样的:

  1. $count += tr/\n/\n/ while sysread(FILE, $_, 2 ** 20);
复制代码
发表于 2004-4-26 23:44:39 | 显示全部楼层
哇~~~,一个问题那么多解决方案!
唉~~~,慢慢消化吧~~ :thank
ps:BBDD,我的perl偶像!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表