忽略以#开头的行

时间:2010-07-16 12:54:55

标签: php ignore

我正在阅读一个平面文本文件,通常前几行是注释,我怎么能告诉我脚本忽略它们?

脚本的相关部分是:

<?php
$delimiter = chr(1);
$eoldelimiter = chr(2) . "\n";
$fp = fopen('app2','r');
if (!$fp) {echo 'ERROR: Unable to open file.</table></body></html>'; exit;}

$loop = 0;
while (!feof($fp)) {
  $loop++;
    $line = stream_get_line($fp,4096,$eoldelimiter); //use 2048 if very long lines
    $field[$loop] = explode ($delimiter, $line);
    echo '
<tr>
<td>'.$field[$loop][0].'</td>
<td>'.$field[$loop][1].'</td>
<td>'.$field[$loop][2].'</td>
<td>'.$field[$loop][3].'</td>
<td>'.$field[$loop][4].'</td>
<td>'.$field[$loop][5].'</td>
<td>'.$field[$loop][6].'</td>
<td>'.$field[$loop][7].'</td>
<td>'.$field[$loop][8].'</td>
<td>'.$field[$loop][9].'</td>
<td>'.$field[$loop][10].'</td>
<td>'.$field[$loop][11].'</td>
<td>'.$field[$loop][12].'</td>
<td>'.$field[$loop][13].'</td>
<td>'.$field[$loop][14].'</td>
<td>'.$field[$loop][15].'</td>
<td>'.$field[$loop][16].'</td>

</tr>';
    $fp++;
}

fclose($fp);
?>

该文件如下所示:

#export_dateapplication_idtitlerecommended_ageartist_nameseller_namecompany_urlsupport_urlview_urlartwork_url_largeartwork_url_smallitunes_release_datecopyrightdescriptionversionitunes_versiondownload_size
#primaryKey:application_id
#dbTypes:BIGINTINTEGERVARCHAR(1000)VARCHAR(20)VARCHAR(1000)VARCHAR(1000)VARCHAR(1000)VARCHAR(1000)VARCHAR(1000)VARCHAR(1000)VARCHAR(1000)DATETIMEVARCHAR(4000)LONGTEXTVARCHAR(100)VARCHAR(100)BIGINT
#exportMode:FULL
1276678802857300728328Shanghai Pudong Miracle4+iJour Inc.Stanley Huanghttp://www.ijour.com.cn/http://www.ijour.com.cn/http://test.com/app/shanghai-pudong-miracle/id300728328?uo=5http://

4 个答案:

答案 0 :(得分:2)

 function my_filter($var){
    return $var[0] != '#';
 }
 $array = array_filter(file('/path/to/file'),'my_filter');

答案 1 :(得分:1)

$line=...$field[$loop] = ...

之间,您可能需要这样的内容
//Does not store this line if the first non-whitespace character is a #.
if( strpos(trim($line), '#') === 0  )
    continue;

以上还暗示您在验证后移动$ loop ++,除非您不关心数组中的间隙。

答案 2 :(得分:1)

像这样:

while (!feof($fp)) {
    $line = stream_get_line($fp, 4096, $eoldelimiter); //use 2048 if very long lines

    if ($line[0] === '#') continue;  //Skip lines that start with #
    $loop++;
    ...
}

答案 3 :(得分:0)

我认为你可以用爆炸的php功能做点什么。它会给你一个数组,你会得到'#'和其他东西分开。然后使用递归算法,将只有非'#'的元素放入应该制作它的新选项卡中。