【问题标题】:Read selected column from log file [duplicate]从日志文件中读取选定的列[重复]
【发布时间】:2019-05-16 02:53:03
【问题描述】:

你能帮我解决这个问题吗? 我有一个日志文件,里面有列。我只想看一个专栏。

这是示例日志文件:

2019-05-14 00:00:00 1558449 v7.41 33309
2019-05-14 00:00:00 1335564 v7.38 33600
2019-05-14 00:00:00 1584141 v7.34 39800
2019-05-14 00:00:00 1556654 v7.38 33600
2019-05-14 00:00:00 1456993 v7.39 33600
2019-05-14 00:00:00 1581138 v7.39 33600
2019-05-14 00:00:00 1224055 v7.39 33600
2019-05-14 00:00:00 1557900 v7.35 33309
2019-05-14 00:00:00 1576229 v7.39 33600
2019-05-14 00:00:00 1553292 v7.35 33309

我只需要阅读这个 1558449 专栏。

我试过的代码在这个链接中:

https://www.quora.com/How-do-I-to-read-lines-from-text-file-into-a-table-format-in-PHP

我希望输出会是这样的:

1558449
1335564
1584141
1556654
1456993
1581138
1224055
1557900
1576229
1553292

【问题讨论】:

标签: php


【解决方案1】:

你应该做的是:

  • 打开文件
  • 逐行阅读
  • 用分隔符分隔行(" ") {将字符串转换为数组}
  • 获取数组的第三个元素(索引 2)

例子

$fn = fopen("log.txt","r");
while(! feof($fn))  {
    $line = fgets($fn);
    $val = explode(" ", $line)[2];
    echo $val."<br>";
}
fclose($fn);

【讨论】:

    【解决方案2】:

    嘿,用正则表达式来解决它。

    首先,使用 PHP 的file_get_contents() 函数读取文件。此函数将整个文件读入字符串。 Reads entire file into a string - PHP

    现在使用 PHP preg_match_all() 函数,从字符串中获取您想要的任何内容。 PHP: preg_match_all - Manual

    见:

    /**
    $file = "2019-05-14 00:00:00 1558449 v7.41 33309
    2019-05-14 00:00:00 1335564 v7.38 33600
    2019-05-14 00:00:00 1584141 v7.34 39800
    2019-05-14 00:00:00 1556654 v7.38 33600
    2019-05-14 00:00:00 1456993 v7.39 33600
    2019-05-14 00:00:00 1581138 v7.39 33600
    2019-05-14 00:00:00 1224055 v7.39 33600
    2019-05-14 00:00:00 1557900 v7.35 33309
    2019-05-14 00:00:00 1576229 v7.39 33600
    2019-05-14 00:00:00 1553292 v7.35 33309";
    */
    $file = file($addressOfFile);
    preg_match_all("/.*([0-9]{7}).*/", $file, $matches);
    

    其结果将是:

    array(2) {
      [0] =>
      array(10) {
        [0] =>
        string(39) "2019-05-14 00:00:00 1558449 v7.41 33309"
        [1] =>
        string(39) "2019-05-14 00:00:00 1335564 v7.38 33600"
        [2] =>
        string(39) "2019-05-14 00:00:00 1584141 v7.34 39800"
        [3] =>
        string(39) "2019-05-14 00:00:00 1556654 v7.38 33600"
        [4] =>
        string(39) "2019-05-14 00:00:00 1456993 v7.39 33600"
        [5] =>
        string(39) "2019-05-14 00:00:00 1581138 v7.39 33600"
        [6] =>
        string(39) "2019-05-14 00:00:00 1224055 v7.39 33600"
        [7] =>
        string(39) "2019-05-14 00:00:00 1557900 v7.35 33309"
        [8] =>
        string(39) "2019-05-14 00:00:00 1576229 v7.39 33600"
        [9] =>
        string(39) "2019-05-14 00:00:00 1553292 v7.35 33309"
      }
      [1] =>
      array(10) {
        [0] =>
        string(7) "1558449"
        [1] =>
        string(7) "1335564"
        [2] =>
        string(7) "1584141"
        [3] =>
        string(7) "1556654"
        [4] =>
        string(7) "1456993"
        [5] =>
        string(7) "1581138"
        [6] =>
        string(7) "1224055"
        [7] =>
        string(7) "1557900"
        [8] =>
        string(7) "1576229"
        [9] =>
        string(7) "1553292"
      }
    }
    

    现在您可以通过$matches[1] 这是一个数组来访问您想要的内容。

    【讨论】:

    • 谢谢伙计,但很抱歉我不小心提到了正则表达式。我对正则表达式一无所知。但提前感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多