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
7 svar · 331 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";
}