2010-07-16 61 views
1

開頭的行我正在閱讀一個平面文本文件,通常前幾行是註釋,我怎麼能告訴我腳本忽略它們?忽略以#

腳本的相關部分是:

<?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:// 

回答

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++; 
    ... 
} 
+0

謝謝你的完美工作 – kitenski 2010-07-16 13:20:12

0

我認爲你可以做的爆炸PHP函數的東西。它會給你一個陣列,你會得到'#'和其他東西分開。然後用一個遞歸算法,將只放入不是'#'的元素放在新選項卡中。

+0

爆炸()的作品與陣列。線是一個字符串。字符串函數更好。 – dwich 2010-07-16 13:06:25

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

你可能想的$line=...$field[$loop] = ...之間是這樣的:

//Does not store this line if the first non-whitespace character is a #. 
if(strpos(trim($line), '#') === 0 ) 
    continue; 

以上也意味着你移動你的$循環++審定後,除非你不關心你的陣列中的差距。