2010-12-13 63 views
2

如何從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

回答

1

在新行上爆炸並輸出0-50的數組值。

+0

當你有大文件時爆炸效率不高。除了可能的速度問題,您還需要2倍的內存才能完成。最好使用fgets逐行讀取或使用file()函數,如Oliver A.所建議的。 – 2010-12-13 16:39:13

+0

擊敗你。 ;) – DampeS8N 2010-12-13 16:39:58

3

使用文件($ 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

0

更少的內存密集型方法:

$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?

1

打開文件的副本與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行,這也是有效的。