Logické řešení pro jednu funkci

webhope

Re: Logické řešení pro jednu funkci
« Odpověď #15 kdy: 14. 08. 2011, 19:27:49 »
Díky za odpovědi. Hledání pomocí polí si nechám na příště.

Ten XML modul, který obsahuje DOM se musí stáhnout samostatně? Používám Wamp server a nezdá se, že by to v tom bylo obsažené (je to ale starší verze Wampu).


Kit

Re: Logické řešení pro jednu funkci
« Odpověď #16 kdy: 14. 08. 2011, 20:12:46 »
Ten XML modul, který obsahuje DOM se musí stáhnout samostatně? Používám Wamp server a nezdá se, že by to v tom bylo obsažené (je to ale starší verze Wampu).
A to je tak těžké použít Google?

Buď použiješ modernější DOMdocument nebo starší SimpleXML, příp. XMLReader. K požadovanému účelu poslouží všechny, liší se způsobem ovládání a schopnostmi. Parser článků root.cz mám na 25 řádcích i s generováním výstupu.

webhope

Oprava dokončena
« Odpověď #17 kdy: 14. 08. 2011, 20:31:11 »
No mě se ten můj script povedlo úspěšně opravit.

Tady je řešení:
Přidal jsem jednu proměnnou static do části, která rozhoduje o opravě tolerance.

Kód: [Vybrat]
  /** VÝPOČET SPRÁVNÉ TOLERANCE */
  $tolerance = $this->c->multiline->SearchLimit['before_strings'][$index]; // předběžná hodnota

  /* Vysvětlení: Nemohu přidávat větší toleranci např. 9. když předchozí
     řádek měl toleranci 0 nebo 1. Toleranci je možné zvýšit na novém
     řádku o jedna, ale pokud zůstávám na tom samém řádku (v cyklu $i/$index),
     pak neměnit toleranci. Tolerance se takto uplatňuje jen na hledání dopředu. */

  if ($last_tolerance < $tolerance){ // HLAVNÍ PODMÍNKA část A)
     
      if (!$tolerance_correction_set && $tolerance >= 1){
        $last_tolerance--;
        $tolerance_correction_set = true;
        } 
     
      if ( $allow_set_tolerance == true ){
        $last_tolerance++; // přičíst pouze jednou / když spouštím cyklus poprvé
        $allow_set_tolerance = false; // Když začalo postupné navyšování tolerance, zmenšit toleranci o 1. Tím se vyvolá opoždění, a do hledání nebude zahrnutý ten, řádek, který jsem už jednou procházel.
        } 
 
      $tolerance=$last_tolerance;
      if ($last_tolerance+1 == $tolerance) $tolerance = $this->c->multiline->SearchLimit['before_strings'][$index];
      }
  else if ($last_tolerance >= $tolerance) {  // HLAVNÍ PODMÍNKA část B)
              $last_tolerance = $tolerance;
              $tolerance_correction_set = false; // ZASTAVIT ODEČÍTÁNÍ

Jsem šťastný, že se mi to povedlo dotáhnout do konce. Vypadalo to fakt beznadějně. I když jste přišli s dejme tomu lepším řešením, tohle přeci jen bylo rychlejší na dokončení.

webhope

Re: Logické řešení pro jednu funkci
« Odpověď #18 kdy: 18. 08. 2011, 14:05:03 »
Kalanis:
Dneska jsem zkoušel ten tvůj kód:
Kód: [Vybrat]
# $fcarr = explode('||',file_get_contents($fd))
A lámal si hlavu proč to nejede.

Takhle je to správně:
Kód: [Vybrat]
# $fcarr = explode("||",file_get_contents($fd))

Kit

Re: Logické řešení pro jednu funkci
« Odpověď #19 kdy: 18. 08. 2011, 16:41:22 »
Kód: [Vybrat]
# $fcarr = explode('||',file_get_contents($fd))
Kód: [Vybrat]
# $fcarr = explode("||",file_get_contents($fd))
Nějak jsem nepochpil rozdíl, chyba byla asi v něčem jiném.


webhope

Re: Logické řešení pro jednu funkci
« Odpověď #20 kdy: 19. 08. 2011, 08:52:08 »
Kit:
Sorry, ale do uvozovek jsem dal \n, takto:

Toto mi ve Windows nerozparsovalo řádky a hodilo to vše pod jeden index:
Kód: [Vybrat]
$temp_arr = explode('\n',file_get_contents($path));

A toto funguje správně:
Kód: [Vybrat]
$temp_arr = explode("\n",file_get_contents($path));

Jinak jsem ale zjistil, že tam je třeba dát trim na konec řádku, jinak to zanechává zalomení, ord. 13 na posledním řádku.

Kód: [Vybrat]
      $this->options_count = count($temp_arr);
      foreach ($temp_arr as $line): // odstranit zalomení ord 13 (při print_r() není vidět!)
         $line = explode(",",$line);
         $last = count($line)-1;
         $line[$last] = trim($line[$last]); 
         $this->options[] = $line;
      endforeach;