2011-11-02 29 views
0
<?php 

$start_date = "20111101"; 
$todays_date = date('Ymd'); 

$html = file_get_contents("http://online.wsj.com/mdc/public/page/2_3021-tradingdiary2-{$start_date}.html?mod=mdc_pastcalendar"); 

preg_match_all(
'#<td style="text-align:left;padding-top:18px;" valign="bottom" class="colhead">(.*?)</td>#', 
    $html, 
    $EXCHANGE, 
    PREG_PATTERN_ORDER); 

preg_match_all(
'#<td class="num">(\d.\d\d)</td>#', 
    $html, 
    $TRIN, 
    PREG_PATTERN_ORDER); 

    echo "{$EXCHANGE[0][0]}, \r"; 
    echo "TRIN : {$TRIN[0][0]}, \r"; 
    echo "{$EXCHANGE[0][1]}, \r"; 
    echo "TRIN : {$TRIN[0][1]}, \r"; 
    echo "{$EXCHANGE[0][2]}, \r"; 
    echo "TRIN : {$TRIN[0][2]}, \r"; 
    echo "{$EXCHANGE[0][3]}, \r"; 
    echo "TRIN : {$TRIN[0][3]}, \r"; 

// write this to a file 
$WSJData = 'WJSData.csv'; 
$WriteMe = "{$TRIN[0][0]}, {$TRIN[0][1]}, {$TRIN[0][2]}, {$TRIN[0][3]}"; 

file_put_contents($WSJData, $WriteMe); 

?> 

爲什麼WSJData.csv中的輸出與echo輸出不同?爲什麼我通過CSV文件中的preg_match_all函數獲取我刪除的文本?echo vs file_put_contents using preg_match_all

回答

0

如果你想寫一些echo調用文件的結果,使用方法:

ob_start(create_function('$a','file_put_contents(FILENAME,$a); return $a;')); 
echo ... 
echo ... 
... 
echo ... 
ob_end_flush(); 

這將確保印什麼是文件中發生的事情。

0

對不起,在我看來,你的腳本中有其他錯誤。我將它簡化爲「最簡單的程序」以重現錯誤。以下是我的了:

<?php 

    $TRIN = array(array("E0","E1","E2","E3")); 

    echo "TRIN : {$TRIN[0][0]}/"; 
    echo "TRIN : {$TRIN[0][1]}/"; 
    echo "TRIN : {$TRIN[0][2]}/"; 
    echo "TRIN : {$TRIN[0][3]} \n"; 

    // write this to a file 
    $WSJData = 'WJSData.csv'; 
    $WriteMe = "{$TRIN[0][0]}, {$TRIN[0][1]}, {$TRIN[0][2]}, {$TRIN[0][3]}"; 

    file_put_contents($WSJData, $WriteMe); 

    echo file_get_contents($WSJData); 

,輸出是:

$ php test.php 
TRIN : E0/TRIN : E1/TRIN : E2/TRIN : E3 
E0, E1, E2, E3 

輸出的第一行是從相呼應。第二個來自「file_get_contents」。 替代工作正常。事實上,它在分配變量時發生,而不是在迴應或保存到文件時發生。

順便說一句,我會建議使用\ n而不是\ r。第二個不會推進一條線,而是覆蓋當前的一條線(就像在打印機中一樣),我懷疑那不是你想要的。