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.
7 svar · 333 visningar · startad av kris
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
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.
Problemet jag har är att jag inte vet hur lång strängen är, men jag vet vilket tecken som ligger sist.
/kris
Du får läsa in hela strängen, och sedan ur den strängen ta ut det du vill ha.
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
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";
}
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
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";
}