Autor Zpráva
Darker
Profil
Pořád se mořím s tím parsováním doc, xml a ppt souborů od microsoftu.
Při parsování dat platí, že pokud je jako adresa dalšího sektoru -2, má se skončit, je to konec řetězu dat.
Tady je while, kterým načítám nějaká data, $SID je index v poli adres a zároveď adresa, jelikož soubor mám nahraný tak, že to vychází.
Pokaždé se z pole adres načte jako adresanové $SID, pokud se načte -2, mělo by to skončit. Proměnná $safe je ochrana protože se to neukončuje.
$retezec_slozek=array();
$SID=$headers[9];
$safe=0;
echo "Zacinam cist z id '$SID'\n";
while($SID!==-2&&$safe<10){
 $SID=$MSAT[$SID]>0?$MSAT[$SID]-1:$MSAT[$SID];
 echo "Id precteno z MSAT : '$SID'\n";
 if($SID==-2)echo "Konec\n";
 $data=str_split($sectors[$SID],128);
 for($i=0;$i<count($data);$i++)
  $retezec_slozek[]=$data[$i];

 $SID++;
 echo "Pokracujem dale : '$SID'\n";
 $safe++;
}
die();

Výstup:
Zacinam cist z id '40'
Id precteno z MSAT : '40'
Pokracujem dale : '41'
Id precteno z MSAT : '-2'
Konec
Pokracujem dale : '-1'
Id precteno z MSAT : ''
Pokracujem dale : '1'
Id precteno z MSAT : '1'
Pokracujem dale : '2'
Id precteno z MSAT : '2'
Pokracujem dale : '3'
Id precteno z MSAT : '3'
Pokracujem dale : '4'
Id precteno z MSAT : '4'
Pokracujem dale : '5'
Id precteno z MSAT : '5'
Pokracujem dale : '6'
Id precteno z MSAT : '6'
Pokracujem dale : '7'
Id precteno z MSAT : '7'
Pokracujem dale : '8'

Vyskočilo tam „konec“, takže podmínka určující while byla v tu chvíli false. Nechápu. Zatím dám místo echo "konec" příkaz break, ale moc by mě zajímalo, co mi uniká.
Keeehi
Profil
Darker:
!== kontroluje i typ
zkus !=

ps. jinak se v tom moc nevyznám, zkus to obohatit komentáři, nebo inteligentně pojmenovávat proměnné.
Darker
Profil
Keeehi:
!== kontroluje i typ
zkus !=
Původně jsem to měl bez typové kontroly, ale nic...
$retezec_slozek=array();
$SID=1;
$safe=0;
while($SID!=-2&&$safe<10){
 $SID=$MSAT[$SID]>0?$MSAT[$SID]-1:$MSAT[$SID];  //Nacte se ekvivalentni hodnota nebo -2 z pole

 $data=str_split($sectors[$SID],128); 
 for($i=0;$i<count($data);$i++)
  $retezec_slozek[]=$data[$i];

 $SID++; //Iterace

 $safe++; //iterace ochrany proti zaseknuti
}
die();
Marek88
Profil
Darker:
moc by mě zajímalo, co mi uniká.
Po tom vypsání "konec" k tomu přičítáš jedničku, takže tam už neni ta hodnota -2...

$retezec_slozek=array();
$SID=$headers[9];
$safe=0;
echo "Zacinam cist z id '$SID'\n";
while($SID!==-2&&$safe<10){
 $SID=$MSAT[$SID]>0?$MSAT[$SID]-1:$MSAT[$SID];
 echo "Id precteno z MSAT : '$SID'\n";
 if($SID==-2)echo "Konec\n";
 $data=str_split($sectors[$SID],128);
 for($i=0;$i<count($data);$i++)
  $retezec_slozek[]=$data[$i];

 $SID++;
 echo "Pokracujem dale : '$SID'\n";
 $safe++;
}
Darker
Profil
Marek88:
Aha, děkuju moc. Koukám že jsem úplně špatně chápal princip while. Ještě že jsem na to narazil, kdoví, co bych ještě spáchal.
Domníval jsem se titiž, že podmínku to kontroluje jakoby pořád.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0