• 技术改变生活——电影目录核对工具(php)


      在这个和谐泛滥的年代,想下载一部电影是如此的不容易,于是我就养成了收藏电影的习惯,2个1T的硬盘收藏了近600部片子,于是很多同事朋友知道后,纷纷向我借硬盘拷电影,于是问题也就来了……

      因为没有硬盘锁,所以我无法控制他们对硬盘是否“动手脚”,比如手误造成的剪切或者误删。虽然我有专门一个记录电影目录的txt文件,如下

      但要一个一个核对过去,不仅浪费时间,而且会造成疲劳导致漏看。既然如此,何不用自己的专业技能来实现我的需求呢,说干就干吧。

      首先我要把电影目录从txt文件里读取出来并存为php数组

    $fp = fopen('D:\movieList.txt','r');
    for($i=0; $i<562; $i++){
    	$arr[] = trim(substr(fgets($fp),4));
    }
    fclose($fp);
    

      其中562是txt文件行数,因为一部电影我就存放一行。因为存放目录里头4个字符是影片清晰度类型,有DVD、BD和MKV三个,所以我用substr(fgets($fp),4)去掉头4个字符,然后用trim去掉首尾的空格,这样最终存放到数组里的片名就不包含任何其他字符了。

      然后要做的就是读取移动硬盘下的电影目录,这里我找的是一段网上读取文件夹下文件名的function

    function myreaddir($dir){
    	$handle = opendir($dir);
    	$i = 0;
    	while($file=readdir($handle)){
    		if(($file != ". ")&&($file != ".. ")){
    			$list[$i] = $file;
    			$i = $i+1;
    		}
    	}
    	closedir($handle);
    	return $list;
    }
    $movie = myreaddir("I:\movies");
    

      这个方法有一个缺陷,就是不能读取子文件下的文件,不过对于我来说已经足够了,大家有兴趣可以在这基础上扩展下去。

      然后就是核对的过程

    foreach($arr as $v){
    	$f = false;
    	foreach($movie as $vv){
    		if(strstr($vv,$v)!=""){
    			$f = true;
    		}
    	}
    	if(!$f){
    		echo $v."<br>";
    	}
    }
    

      核对的核心方法就是判断字符串A里是否包含字符串B,也就是电影文件名里是否包含电影目录里的片名,如果不包含,则输出。

      测试后正确率基本有80%,但有一个bug,比如我的电影目录里有部电影叫“电锯”,但是我文件夹里没有“电锯1024*768.rmvb”,而有部叫“电锯惊魂1024*768.rmvb”的,这样程序是判断通过的。

      唯一的解决办法就是在记录电影目录的时候,就把完整的文件名记录下来,不要只记录“电锯”,而应该记录“电锯1024*768”,或者干脆把文件格式也记录下来,这样在核对的时候,可以直接进行字符串比较。

      如果有更好的解决办法,欢迎告诉我。

  • 相关阅读:
    LOJ DFS序
    牛客练习赛31 D神器大师泰兹瑞与威穆
    Codeforces Round #487 (Div. 2) C
    Manthan, Codefest 18 (rated, Div. 1 + Div. 2) C D
    [Windows Server 2003] 还原SQL Server数据库
    [Windows Server 2008] 查看PHP详细错误信息
    [Windows Server 2008] 安装网站伪静态
    网站Gzip压缩
    [Windows Server 2008] SQL Server 2008 数据库还原方法
    [Windows Server 2008] 安装Apache+PHP+MySQL
  • 原文地址:https://www.cnblogs.com/hooray/p/2228990.html
Copyright © 2020-2023  润新知