1. 程式人生 > >Foundation框架之計算程式碼行數

Foundation框架之計算程式碼行數

                                            Foundation框架之計算程式碼行數

文章開始把我喜歡的這句話送個大家:這個世界上還有什麼比自己寫的程式碼執行在一億人的電腦上更酷的事情嗎,如果有那就是讓這個數字再擴大十倍

//

//  test_codeLineCount.m

//

//

//  Created by MacBook on 2018/9/23.

//

 

#import <Foundation/Foundation.h>

 

/*

//計算單個檔案的行數

NSUInteger codeLineCount(NSString *path)

{

//讀出檔案的內容

NSString *str =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

 

//輸出字串內容進行驗證 是否正確讀出檔案內容

NSLog(@"%@",str);

//將讀出的檔案內容一'\n'分開

NSArray *array = [str componentsSeparatedByString:@"\n"];

 

for( NSString *obj in array)

{

NSLog(@"%@",obj);

}

return array.count;

}

*/

 

//計算某個資料夾下所有檔案的行數

NSInteger codeLineCount(NSString *path)

{

    //新建一個檔案管理者,單例物件

    NSFileManager *mgr = [NSFileManager defaultManager];

    

    BOOL dir = NO;

    //判斷傳入的路徑是否是一個檔案

    BOOL exist = [mgr fileExistsAtPath:path isDirectory:&dir];

    if(!exist)

    {

        //檔案不存在 退出程式

        NSLog(@"檔案不存在");

        return 0;

    }

    

    

    

    //路徑合理 判斷路徑是一個檔案還是資料夾

    if(dir == YES)

    {

        

        int count = 0;//該資料夾中得檔案數為0

        

        //這是一個資料夾

        //讀取這個資料夾中得檔案 存放於陣列之中

        

        NSArray *array = [mgr contentsOfDirectoryAtPath:path error:nil];

        //輸出這個陣列中得內容

        for(NSString *filename in array)

        {    //輸出其路徑

            //NSLog(@"%@%@",path,filename);

            //拼接成全路徑

            NSString *fullpath = [NSString stringWithFormat:@"%@/%@",path,filename];

            

            //遞迴呼叫本函式codelinecount計算行數

            count += codeLineCount(fullpath);

            

        }

        return count;

        

    }

    else

    {

        //只計算字尾為.h .m .c的檔案

        //取出該檔案的字尾

        NSString *extension = [[path pathExtension] lowercaseString];

        

        if(![extension isEqualToString:@"m"] && [extension isEqualToString:@"h"] && [extension isEqualToString:@"c"])

        {

            return 0;

        }

        

        //NSLog(@"%@",extension);

        

        //這是一個檔案

        //讀出檔案的內容

        NSString *str =[NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];

        

        //輸出字串內容進行驗證 是否正確讀出檔案內容

        // NSLog(@"%@",str);

        

        //將讀出的檔案內容一'\n'分開

        NSArray *array = [str componentsSeparatedByString:@"\n"];

        

        /* for( NSString *obj in array)

         {

         NSLog(@"%@",obj);

         }

         */

        //打印出每個檔案的 檔名 跟行數

        //NSLog(@"%@  %ld",path,array.count);

        //上面的方法列印檔案路徑過於冗餘  修改簡單

        

        //先計算 榮譽路徑的範圍

        NSRange range = [path rangeOfString:@"/Users/Macbook/Desktop"];

        NSString *newpath = [path stringByReplacingCharactersInRange:range withString:@" "];

        NSLog(@"%@--%ld",newpath,array.count);

        return array.count;

        

    }

}

 

int main() {

    

    //呼叫函式

    NSUInteger linecount = codeLineCount(@"/Users/Macbook/Desktop");

    NSLog(@"%ld",linecount);

    

    return 0;

}

 

加油吧,程式設計師。