iT邦幫忙

0

[php]請問要如何比對TXT檔案中的資料再取出呢?

php

各位大哥大姐們好,小弟我是大學新手想問問這個怎麼處理。
例如:我有一個log.txt檔
裡面資料是這樣
upload=> used[ 00:00:00:00:00:03 ]= 25704
upload=> used[ 00:00:00:00:00:03 ]= 63504
upload=> used[ 00:00:00:00:00:03 ]= 102816
我想比較後面數字的大小後再取出 最大或最小值這樣
稍微查了一下 preg_replace 能辦到嗎?

看更多先前的討論...收起先前的討論...
外獅佬 iT邦大師 1 級 ‧ 2015-06-01 16:11:36 檢舉
塞進陣列裡...然後asort...
外獅佬 iT邦大師 1 級 ‧ 2015-06-01 16:27:26 檢舉
別管什麼php程式語法
想想你自己拿到這樣的資料的時候,會怎麼找出你想要的資訊
再把這個想法轉換成程式碼就行了
非常贊同外獅佬的意見
到現在還記得唸書時有個程式作業
班上有個同學,寫了700多個if/else去完成
學習階段,過程比答案重要
先學爬,再學走路,再學跑
覺得能在這裡回答的邦友
不少都是會飛的超人

稍微查了一下 preg_replace 能辦到嗎?
寫一小段程式跑看看,不就知道了...
newkevin iT邦高手 1 級 ‧ 2015-06-02 11:19:34 檢舉
類似這樣嗎疑惑
A. 先有一個輸入讀取哪個LOG的
B. 確認讀取資料的格式
(1 儲存每一段的資料. 2 排序.3 讀取最大跟最小)
(1 讀取第一筆當最大與最小基準.
2 讀取次一筆.比較2種基準.
3 比較最大的基準比他大放在暫存最大的
4 比較最小的基準比他小放在暫存最小的 )
C 跑完後輸出 最大最小
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

2
weiclin
iT邦高手 4 級 ‧ 2015-06-01 17:16:10
最佳解答

反正只要能取出最後的數字來比大小就行了
你知道什麼方法就用什麼方法

<pre class="c" name="code">
<?php

function parseFile($fd)
{
    $min = $max = null;
    $data = array('min' => null, 'max' => null);
    while (false !== ($buf = fgets($fd))) {
        $line = trim($buf);
        $value = preg_replace('#.*=\s*(\d+)#', '$1', $line);
        if (null === $value || $value === $line) {
            // skip invalid record
            continue;
        }

        if (null === $min || $min > $value) {
            $min = $value;
            $data['min'] = $line;
        }
        
        if (null === $max || $max < $value) {
            $max = $value;
            $data['max'] = $line;
        }
    }
    return $data;
}

$fd = fopen("data.txt", 'r');
if (false === $fd) {
    echo "fained to open data file\n";
    exit(1);
}

var_dump(parseFile($fd));
phil8217 iT邦新手 5 級 ‧ 2015-06-06 01:43:11 檢舉

謝謝您的解答 我有補充新問題喔!

phil8217 iT邦新手 5 級 ‧ 2015-06-06 12:11:31 檢舉

喔喔喔喔!!!!!我會了!!

2
wiseguy
iT邦超人 1 級 ‧ 2015-06-01 19:08:39

你想用 regular expression,可以用 preg_match_all:

<pre class="c" name="code"><?php
$data = file_get_contents('test.txt');
preg_match_all('/\d+$/m', $data, $match);
sort($match[0], SORT_NUMERIC);
var_dump($match);
?>

排序完,陣列第一個就是最小,最後一個就是最大。

wiseguy iT邦超人 1 級 ‧ 2015-06-01 23:05:19 檢舉

補充:如果你是要比大小之後,取出整列,那可以改為這樣寫:

<pre class="c" name="code"><?php
$data = file_get_contents('log.txt');
preg_match_all('/^.* (\d+)$/m', $data, $m);
$a = array_combine($m[1], $m[0]);
ksort($a, SORT_NUMERIC);
var_dump($a);
?>
phil8217 iT邦新手 5 級 ‧ 2015-06-06 01:44:21 檢舉

謝謝您的解答 可以教我如何用preg_match_all解決我補充的內容嗎?

phil8217 iT邦新手 5 級 ‧ 2015-06-06 12:11:42 檢舉

喔喔喔喔!我會了!!!

我要發表回答

立即登入回答