使用PHP解析文件中的行

时间:2014-08-12 10:21:44

标签: php json file parsing graph

我正在尝试绘制现有.log文件(或.txt文件中的数据图表,这没关系。)

文件的组织方式如下。

Unixepochtime value value.\n
Unixepochtime value value value value

第一行是不同的,因为它在时间之后只有两个值,而以下所有行(200+可能)与上面看到的第二行完全相同。

然而,不需要第二行和后续行中的最后两个值。

输出需要以下列方式放在文件或字符串中:

[unixepochtime, value], [unixepochtime, value]

当然,每条线路都会有一条,但为了清楚起见,上面的字符串将覆盖两行数据。

对于文件中的第二个值,它需要具有与其行上相同的unixepochtime,但是以上面的格式写入另一个字符串中。

这适用于行数不明的文件吗?我正在使用Flot,如果有帮助的话。这段代码是否也适用于只有一个值的文件?

1 个答案:

答案 0 :(得分:1)

<?php
$pathToLogfile = 'logfile.txt';

// Check if file exists.
if(!file_exists($pathToLogfile)) {
  echo('Can not find log file');
  exit;
}

// Extract separate lines.
$logEntries = file($pathToLogfile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMTPY_LINES);
// Build code in lines.
$entries = array();
foreach($logEntries as $logEntry) {
  // Split logline into separate values by whitespace.
  $logLineParts = explode(" ", $logEntry);

  // Check if unix epoch is set.
  if(!isset($logLineParts[0])) {
    echo('Missing unix timestamp...');
    continue;
  }
  $unixTimestamp = $logLineParts[0];

  // Check for all values but unix timestamp.
  for($i = 1; $i < count($logLineParts); ++$i) {
    $entries[] = '[' . $unixTimestamp .', '. $logLineParts[$i] .']';
  }
}

echo('Following log items found: '. implode(', ', $entries));
?>

我评论过它,所以我希望你能从中学习(这里最重要的是什么!)应该工作 - 虽然未经测试......