2012-03-10 116 views
-1

我的文件中包含该内容(的1.txt):复制文件内容到另一个文件

  • user.php的ID = XXXXXX
  • user.php的ID = XXXXXX
  • user.php的? ID = XXXXXX
  • user.php的?ID = XXXXXX
  • user.php的?ID = XXXXXX
  • 文/数字
  • user.php的?ID = XXXXXX
  • user.php的?ID = XXXXXX
  • 等等...

(XXXXXX =数字)

有可能只采取user.php的?ID = XXXXXX,并将它们复制到另一个文件,而不处理不必要的文本,因为文件包含大约50 000行?

+6

似乎是一个非常简单的问题。你尝试了什么? – 2012-03-10 10:34:25

+0

是的,这是可能的。请提供一些你的代码。 – Alp 2012-03-10 10:36:05

回答

3
<?php 
    //Get all the matches from the file 
    $fileContents = file_get_contents('1.txt'); 
    preg_match_all('/user.php\?id=[0-9]{6}/', $fileContents, $matches); 

    //Output to new file 
    $fh = fopen('output.txt', 'w+'); 
    foreach ($matches['0'] as $match) { 
     fputs($fh, $match."\r\n"); 
    } 
    fclose($fh); 
?> 
+1

顺便说一句,应该是:$比赛[0] – ZeroSuf3r 2012-03-10 11:56:49

6
<?php 
    $file = fopen('source.txt', 'rb'); 
    $newfile = fopen('target.txt', 'wb'); 
    while(($line = fgets($file)) !== false) { 
    if(strpos($line, 'user.php') !== false) { 
     fputs($newfile, $line); 
    } 
    } 
    fclose($newfile); 
    fclose($file); 
    ?> 

此代码尚未经过测试,但我认为这将正常工作。

+0

这将工作,但由于输入文件很大,它不是非常有效的内存。逐行读写由'fopen'创建的流将更好。 – 2012-03-10 10:42:43

+0

我修改了它,你能帮我查看这段代码吗?我不确定它是否包含语法错误,因为我用我的诺基亚E63键入了它。 – 2012-03-10 10:54:33

+0

现在它工作的很好,正是我的意思。一个建议:加'B'标志开口模式(第二'fopen'参数),手动有对此问题的说明:'对于便携性,强烈建议用打开文件时总是使用“b”标记fopen()。请参阅['fopen'文档](http://php.net/manual/en/function.fopen.php)了解此建议背后的原因。 – 2012-03-10 11:02:06

-1
<?php 
error_reporting(0); 
$fs=fopen("1.txt", "r"); 
$ft=fopen("2.txt", "w"); 

if ($fs==NULL) 
{ 
    echo "Can't Open Source File ..."; 
    exit(0); 
} 

if ($ft==NULL) 
{ 
    echo "Can't Open Destination File ..."; 
    fclose ($fs); 
    exit(1); 
} 

else 
{ 
    while ($ch=fgets($fs)) 
     fputs($ft, $ch); 

    fclose ($fs); 
    fclose ($ft); 
} 

//echo "File Handling successfully ..."; 
?> 
+0

简单地张贴代码片段不能充分回答这个问题。考虑添加关于您的代码如何解决问题的解释。 – adamdunson 2013-12-09 14:30:07

相关问题