从 txt 中提取值

extract values from txt

您好,我在太阳能逆变器的 Web 服务器上有一个 txt 文件。 这是文件 sys.txt 的示例: master#0.75kW#24.9#404.1#2630.5#42715.4#0#0#1;0;0.33;9.4;15555.6;132;1#2 ;0;0.15;6.0;11168.7;2097185;3#3;0;0.27;9.4;15991.0;2097185;3#x#

我需要介于#(本例中为 0.75 24.9 42715.4 )之间的 1°、2°、5° 数值,即实际功率、日功率和总功率。我试着写了一个 php 脚本,但我无法正确完成它..

/* ########## DATA SUNWAYS ########## */
    $url = “13.3.89.50/data/sys.txt”;
    $username = “customer”;
    $password = “00000000”;

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    $output = curl_exec($ch);
    curl_close($ch);

    $actualpower = strpos($output,'/\#(.#?)\#/');   //?????
    $dailypower = strpos($output,'/\#(.#?)\#/');    //?????
    $totalpower = substr($output,'/\#(.#?)\#/' );   //?????

你能帮帮我吗?

您可以使用 explode() 函数以 # 分隔不同的值,然后应用 filter_var() 仅提取数值。

http://php.net/manual/en/function.explode.php

http://php.net/manual/en/function.filter-var.php

http://php.net/manual/en/filter.filters.sanitize.php

所以这应该可以满足您的需求:

$input = 'master#0.75kW#24.9#404.1#2630.5#42715.4#0#0#1;0;0.33;9.4;15555.6;132;1#2;0;0.15;6.0;11168.7;2097185;3#3;0;0.27;9.4;15991.0;2097185;3#x#';
$inputArray = explode('#', $input); // get an array with all the separate values

// keep only numeric on the 2nd field (index 1)
$actualPower = filter_var($inputArray[1], FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$dailyPower = filter_var($inputArray[2],FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
$totalPower = filter_var($inputArray[5],FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

echo $actualPower . ' ' . $dailyPower . ' '. $totalPower;

将打印

0.75 24.9 42715.4

这个有效:

<?php
$login = 'customer';
$password = '00000000';
$url = 'http://13.3.89.50/data/sys.txt';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ch, CURLOPT_USERPWD, "$login:$password");
$result = curl_exec($ch);
curl_close($ch);

$results = explode('#', $result);

$actualPower = filter_var($results[1],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
$dailyPower = filter_var($results[2],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
$totalPower = filter_var($results[5],FILTER_SANITIZE_NUMBER_FLOAT,FILTER_FLAG_ALLOW_FRACTION);
?>