echo против file_put_contents с использованием preg_match_all - PullRequest
0 голосов
/ 02 ноября 2011
<?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 отличаются от выходных данных эха?Почему я получаю текст, который я удалил с помощью функции preg_match_all в моем CSV-файле?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2011

Извините, мне кажется, что у вас есть другая ошибка в вашем скрипте.Я уменьшил его до "самой простой программы, которая работает", чтобы воспроизвести ошибку.Вот что я получил:

<?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.Второй не продвигает строку, а перезаписывает текущую (просто в консоли, как в принтере), и я подозреваю, что это не то, что вы хотели.

0 голосов
/ 02 ноября 2011

Если вы хотите записать результат некоторых echo вызовов в файл, используйте:

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

Это будет гарантировать, что напечатанное - это то, что входит в файл.

...