Avatar billede force_master Praktikant
26. juli 2015 - 11:28 Der er 4 kommentarer

Læse bestemte steder i textfil/html fil.

Hej
Jeg har brug for at læse nogle data ud af en html/text fil.
Linje nummer kan variere og derfor skal der søges efter data.
Problemet er at selve data er jo forskelligt fra gang til gang,
også længden på data.

ligger lige et eksempel ind

" <td  bordercolor="#000000" style="border: thin solid rgb(0,0,0)" ><font face="verdana, Arial,

Helvetica"><font color=#228b22><strong><small><p>High Barometer</p><p>Low Barometer</p></small></strong></font></font></td>

<td align=left  bordercolor="#000000" style="border: thin solid rgb(0,0,0)" ><font face="verdana,

Arial, Helvetica"><strong><font color=#ff4500><small><p>1013.1&nbsp;hPa<font color=#228b22>&nbsp;

&nbsp;at&nbsp;&nbsp;</font><font color=#ff4500>11:52</font></p>

<p>1012.1&nbsp;hPa<font color=#228b22>&nbsp;&nbsp;at&nbsp;&nbsp;</font><font color=#ff4500>

0:00</font></p></small></font></strong></font></td>"

I det lille kodestump skal jeg have fundet "1013.1" "11:52" "1012.1" "0.00" så længden af det fundne kan variere fra 4 til 6 tegn.

Hvordan gør jeg lige det, har kunne finde linjen hvor ex "high Barometer" står.
ex.
$search = '<p>High Barometer</p>';
$lines = file('Current_Vantage_Pro_Plus.htm');

$found = false;
foreach($lines as $line)
{
  if(strpos($line, $search) !== false)
  {
    $found = true;
    echo $line;
  }
}

if(!$found)
{
  echo 'Intet fundet';
}
Avatar billede tryltryl Juniormester
26. juli 2015 - 13:38 #1
Det lyder som en opgave for preg_match. Hele siden er indlæst i $text:

$re = '|<p>High Barometer</p>.*?<p>\s*(\d+(?:\.\d+)?).*?>\s*(\d?\d:\d\d).*?<p>\s*(\d+(?:\.\d+)?).*?>\s*(\d?\d:\d\d)|si';

if(preg_match($re, $text, $match))
{
    echo "High: ".$match[1]." at: ".$match[2]."<br>";
    echo "Low: ".$match[3]." at: ".$match[4]."<br>";
}
else
{
    echo "ingen match";
}
Avatar billede force_master Praktikant
26. juli 2015 - 16:23 #2
Kan ikke lige få det til at virke,
HAr prøvet at læse alt text fra fil ind en "$text" men udfalder bliver
Warning: preg_match() expects parameter 2 to be string, resource given in C:\xampp\htdocs\test.php on line 48
ingen match

Her er min kode.
$text = fopen("Current_Vantage_Pro_Plus.htm", "r") or die("Unable to open file!");
fread($text,filesize("Current_Vantage_Pro_Plus.htm"));
fclose($text);
        $re = '|<p>High Barometer</p>.*?<p>\s*(\d+(?:\.\d+)?).*?>\s*(\d?\d:\d\d).*?<p>\s*(\d+(?:\.\d+)?).*?>\s*(\d?\d:\d\d)|si';

if(preg_match($re, $text, $match))
{
    echo "High: ".$match[1]." at: ".$match[2]."<br>";
    echo "Low: ".$match[3]." at: ".$match[4]."<br>";
}
else
{
    echo "ingen match";
}
Avatar billede tryltryl Juniormester
26. juli 2015 - 17:20 #3
Du bruger vist heller ikke fopen/fread rigtigt. Jeg ville nok benytte file_get_contents:

$text = @file_get_contents("Current_Vantage_Pro_Plus.htm");

if($text !== false)
{
    $re = '|<p>High Barometer</p>.*?<p>\s*(\d+(?:\.\d+)?).*?>\s*(\d?\d:\d\d).*?<p>\s*(\d+(?:\.\d+)?).*?>\s*(\d?\d:\d\d)|si';

    if(preg_match($re, $text, $match))
    {
        echo "High: ".$match[1]." at: ".$match[2]."<br>";
        echo "Low: ".$match[3]." at: ".$match[4]."<br>";
    }
    else
    {
        echo "ingen match";
    }
}
else
{
    echo "fejl ved indlæsning af fil";
}
Avatar billede force_master Praktikant
30. juli 2015 - 17:23 #4
Det virkede for resten ok,
Ligger på svar ind.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester