doujiaoang69440 2014-08-12 10:21
浏览 23
已采纳

使用PHP解析文件中的行

I am trying to graph data from existing .log files (or .txt file, it doesn't matter).

The file is organised like this.

Unixepochtime value value.

Unixepochtime value value value value

The first line is different as it only has two values after the time, whereas all the following lines (200+ maybe) are exactly the same as the second line seen above.

However these last two values in the second line and following lines are not needed.

The output needs to be in a file or string in the following manner:

[unixepochtime, value], [unixepochtime, value]

Of course there will be one for every line though, so to make that clear, the string above would cover two lines of data.

For the second value in the file, it needs to have the same unixepochtime as was on its line, but be written in the format above in another string.

Can this work for files with an unknown amount of lines also? I'm using Flot, if that helps. Can this code also work for files with only one value following the time please?

  • 写回答

1条回答 默认 最新

  • dq23171 2014-08-12 10:50
    关注
    <?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));
    ?>
    

    I commented it so I hope you can learn from it (what is the most important thing here!) Should work - although untested...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法