2013-05-14 2 views
1

텍스트 파일의 특정 줄을 읽으려고합니다.특정 줄의 파일 읽기 php

내 텍스트 파일은 같다 :

accueil:  demo1,demo2 
services:  demo3,demo4 
essai:   [email protected] 

내가 주석이 라인을 찾을 수 있습니다 :

# 
# Aliases in this file will NOT be expanded in the header from 
# Mail, but WILL be visible over networks or from /bin/mail. 

# Basic system aliases -- these MUST be present. 
mailer-daemon: postmaster 
postmaster:  root 

# General redirections for pseudo accounts. 
bin:   root 
nscd:   root 
pcap:   root 
apache:   root 
webalizer:  root 

# boite fonctionnelles 
# GEMEL 
accueil:  demo1,demo2 
services:  demo3,demo4 
essai:   [email protected] 

난 후에 재 작업이 줄을 수집 할 #의 GEMEL을

다음과 같이 할 수 있습니다.

if($lines = file($filename)){ 

    foreach ($lines as $key => $value) { 
     if(preg_match("/# GEMEL/", $value)) 
      for ($i=0; $i < ; $i++) { 
       # code... 
      } 


} 

} 

하지만 이중 탭이 정말 좋지는 않습니다 ... 해결책은 # GEMEL을 찾은 후 포인터를 이동하는 것이지만 어떻게 할 수 있습니까?

답변

1

딱 한 차원 루프 :

$resultLines = array(); 
$save = false; 

foreach ((array)file($filename) as $key => $value) { 
    if (preg_match("/# GEMEL/", $value)) { 
     $save = true; 
     continue; 
    } 

    if ($save) { 
     $resultLines[] = $value; 
    } 
} 

var_dump($resultLines); 

#GEMEL 코멘트 후에 만 ​​해당 라인이 존재해야합니다. 그렇지 않은 경우 다음 댓글을 확인하고 $save을 다시 false으로 설정할 수 있습니다.

+0

들으 @shadyyx, 난이 두 개의 루프 다른 솔루션에 비해 가장 좋은 방법 같아요. 이전에 나는 ** fseek **도 시도했지만 두 개의 루프도 있습니다 : 하나는 치료를위한 것이고 다른 하나는 치료를위한 것입니다. 어쨌든, thx;) – mpgn

+0

당신은 오신 것을 환영합니다! – shadyyx

0

fseek() 기능으로 파일 스트림의 포인터로 이동할 수 있습니다.

당신의 함수는 같을 수 있습니다

<?php 
$f=fopen($file,'rb'); 
$pos = 0; 
$blockSize = 8192; 
while(!feof($f)) 
{ 
    if($found = strpos(fread($f,$blockSize), '# GEMEL')) 
    { 
     $pos += $found; 
     break; 
    } 
    else 
    { 
     $pos += $blockSize ; 
    } 
} 
// now you can go to $pos 
fseek($f, $pos); 
// read line you need 
// ... 


fclose($f); 
?> 
0
if($lines = file($filename)){ 
    foreach ($lines as $key => $value) { 
     if(preg_match("/# GEMEL/", $value)) { 
      $myAccueil = $lines[$key+1]; 
      $myServices = $lines[$key+2]; 
      $myEssai = $lines[$key+3]; 
      break;  
     } 
    } 
} 
0

당신은 preg_match를 사용할 필요가 없습니다. 나는 당신을 strpos 추천한다.

<?php 

$collection = ''; 
$count = 0; 

$fp = fopen($filename,'rb') or die('Error'); 
while (($line = fgets($fp)) !== false) { 
    if ($count === 0 && strpos($line, '# GAMEL') === 0) { 
     $count++; 
     continue; 
    } 
    if ($count >= 1 && $count <= 3) { 
     $collection .= $line; 
    } 
    if ($count === 3) 
     $count = 0; 
} 

echo $collection; 

당신이 배열로 $collection을 원하는 경우에

,

<?php 

$collection = array(); 
$count = 0; 

$fp = fopen($filename,'rb') or die('Error'); 
while (($line = fgets($fp)) !== false) { 
    if ($count === 0 && strpos($line, '# GAMEL') === 0) { 
     $count++; 
     continue; 
    } 
    if ($count >= 1 && $count <= 3) { 
     $collection[] = rtrim($line); 
    } 
    if ($count === 3) 
     $count = 0; 
} 

print_r($collection);