webForumDet fria alternativet

läsa med fgets

7 svar · 331 visningar · startad av kris

krisMedlem sedan sep. 200278 inlägg
#1

Hallå!

Om jag läser en fil med fgets(), går det då att ställa in så att den slutar läsa vid ett visst tecken, ex. "|"? Eller finns det något annat kommando för detta?

/kris

MatteMedlem sedan aug. 20002 975 inlägg
#2

fgets läser till det antal byte (minus 1) du angivit, eller till radens slut, beroende på vilket som kommer först.

Du får läsa in det i en variabel, och plocka ut det från variabeln istället.

krisMedlem sedan sep. 200278 inlägg
#3

Problemet jag har är att jag inte vet hur lång strängen är, men jag vet vilket tecken som ligger sist.

/kris

MatteMedlem sedan aug. 20002 975 inlägg
#4

Du får läsa in hela strängen, och sedan ur den strängen ta ut det du vill ha.

krisMedlem sedan sep. 200278 inlägg
#5

Jag kanske ska förklara mig lite bättre :)
Jag vill göra ett skript som kopplar upp mig mot en server. Servern skickar en text-sträng till klienten och förväntar sig därefter ett svar. Text-strängen kan vara av varierand längd men slutar alltid med ett "|".

Om servern inte får svar inom en viss tid blir det timeout. Därför har jag lite problem med att använda tex "feof".

Hoppas att det blir lite klarare nu :)

/kris

MatteMedlem sedan aug. 20002 975 inlägg
#6

Du skulle kunna testa något på det här hållet:

$content = '';

if ($fp = fopen($server, 'r')) {

   while (!feof($fp)) {
      $row = fgets($fp, 4096);
      if (($strpos = strpos($row, "|")) !== false) {
         $content .= substr($row, 0, $strpos);
         break;
      } else {
         $content .= $row;
      }
   }
   fclose($fp);
   
   echo $content;

} else {

   echo "Inget serversvar";

}
krisMedlem sedan sep. 200278 inlägg
#7

Tackar tackar! :) verkar funka utmärkt. En fråga till bara: om det finns till exempel tre stycken "|"-tecken i strängen och jag vill att den ska läsa till det tredje, hur gör jag då?

/kris

MatteMedlem sedan aug. 20002 975 inlägg
#8

Testa

$content = '';

if ($fp = fopen($server, 'r')) {

   $pinn = 0;
   while (!feof($fp)) {

      $row = fgets($fp, 4096);
      if (strpos($row, "|") !== false) {
        $pinn++;
      }
      $content .= $row;
      if ($pinn > 2) {
         break;
      }

   }
   fclose($fp);

} else {

   echo "Inget serversvar";

}

if (preg_match_all("/[^|]+(?=\|)/is", $content, $matches)) {
   $strings = $matches[0];
} else {
   $strings = array();
   echo "Ingen sträng hittades";
}

Foreach ($strings as $key => $val) {
   echo ($key+1).": $val <br>\n";
}
134 ms totalt · 3 externa anrop · v20260731065814-full.7de19299
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)