PHP - 如何剪切文本文档中的一行代码?

问题描述:

如何从PHP中的文本文件剪出一段文本。例如,我想取出0到50行,并将它变成一个字符串。也许甚至会把一些HTML格式化在那里。我已经知道我需要切出哪些线我只是不知道如何选择它们并将它们放入一个字符串中。PHP - 如何剪切文本文档中的一行代码?

+0

划定的线条如何?硬返回?如果是这样,你可以爆炸()你的字符串到一个数组中,然后从数组中取第一个50(0-49)'行'。 – CrowderSoup 2010-12-13 16:35:40

+0

这里有一个非常类似的问题,如何获得文本文件的前20行:http://stackoverflow.com/questions/4410077/remove-all-lines-except-first-20-using-php/4410128#4410128 – 2010-12-13 16:37:40

+0

@Surreal这是一个不同的问题,当涉及到从文本 – Gordon 2010-12-13 16:47:04

在新行上爆炸并输出0-50的数组值。

+0

当你有大文件时爆炸效率不高。除了可能的速度问题,您还需要2倍的内存才能完成。最好使用fgets逐行读取或使用file()函数,如Oliver A.所建议的。 – 2010-12-13 16:39:13

+0

击败你。 ;) – DampeS8N 2010-12-13 16:39:58

使用文件($ filename)。 结果是一个数组,其中每个元素都是来自文件的一行。 样品:

$lines = file("foo.txt"); 
//extract desired lines 
$lines = array_slice($lines,19,21); 
$string) implode("\n",$lines); 
+0

http://php.net/manual/en/function.file.php – 2010-12-13 16:37:59

+1

是的,你是对的。让我来推翻它。 – DampeS8N 2010-12-13 16:38:25

更少的内存密集型方法:

$fileObject  = new SplFileObject('yourFile.txt'); 
$fileIterator = new LimitIterator($fileObject, 0, 49); 
$firstFiftyLines = implode(iterator_to_array($fileIterator)); 

或作为替代

$fileObject  = new SplFileObject('yourFile.txt'); 
$fileIterator = new LimitIterator($fileObject, 0, 49); 
$firstFiftyLines = ''; 
foreach ($fileIterator as $currentLine) { 
    $firstFiftyLines .= $currentLine; 
} 

如果需要其它线路,改变了第二个和第三个参数LimitIterator。首先是开始偏移量,第二次迭代计数(在此上下文中的行数来读取)。

标记答案CW因为问题(和回答)是Read a file from line X to line Y?

打开文件的副本与fopen,读出的第一使用fgets 50行。

$fp = fopen('myfile.txt', 'rt'); 
if ($fp) 
{ 
    for ($i = 0; $i < 50; $i++) 
    { 
     $s = fgets($fp); 
     ...add error checking and do something with the line here 
    } 
} 

即使您需要读取大型文件的前50行,这也是有效的。