x-ƒ (x_f)

Ķeza 

sestdien, 18.12.2004 @1:38 pm | x-ƒ

Man nepatīk, ka cibiņi tik reti raksta saviem pukstiem tēmas nosaukumu, tāpēc es izdomāju, ka, lai tam paredzētajā vietā nebūtu tukšums, varētu izvadīt kaut vai paša puksta pirmos vārdus. (Tas pats ir arī komentāriem.) Izdarīts tas tiek ļoti vienkārši – norādot tekstu un nepieciešamo garumu, vienkārši nogriež pārējo nost.

Taču. Daži aizrādīja, ka nav labi tā pārtraukt vārdus, nogriezt tiem pusi nost. Turklāt ir jau vēl arī problēma ar pašu griešanu – tā nenotiek pa simboliem, bet gan pa baitiem, tāpēc latviskos burtus var pārgriezt uz pusēm.

Tāpēc es uzrakstīju (it kā) elementāru funkciju, kas sameklētu, piemēram, pēdējo atstarpi, un tad grieztu no tās. Taču nestrādā. Un es nesaprotu, kur ir tā vaina. Tad te nu ir tās divas funkcijas, kurām būtu automātiski jāveido tēmas nosaukumi:

#################################################
## atgriež viena simbola atrašanās vietu tekstā.
## ja $dir ir -1, meklē no beigām.
## kur, ko, no kura gala

function chrpos(string haystack, string needle, int dir) : int {

  var int result = -1; # ja nav atrodams..
  var int pos = 0;

  if ($dir == -1) { $haystack = reverse $haystack; }

  foreach var string char($haystack) {
    if($char == $needle) {
      $result = $pos;
    } else {
     $pos = $pos + 1;
    }
  }

  if ($dir == -1) { $result = $haystack->length() - $result; }

 return $result;
}

function chrpos(string haystack, string needle) : int {
 return chrpos($haystack, $needle, 1);
}


function autosubject(string text, int maxlen) : string {
  var string result;
  $result = $text->substr(0, $maxlen);
  var int tuksne = chrpos($result, " ", -1);
  if ($tuksne > 0) {
    $result = $result->substr(0, $tuksne);
  }
  $result = $result + "..";
 return $result;
}

Nu? Es saprastu, ja tās vispār nestrādātu, taču kaut kādā dīvainā veidā tās darbojas. Varat apskatīties manā Saitetestu lapā. Kods, lai izvadītu to sarakstiņu, ir šāds:
var string teststring = "šī ir testa teksta virkne, šī ir testa teksta virkne";
print "\$teststring: " + $teststring + "<br />";
print "20: " + autosubject($teststring, 20) + "<br />";
print "25: " + autosubject($teststring, 25) + "<br />";
print "30: " + autosubject($teststring, 30) + "<br />";
print "35: " + autosubject($teststring, 35) + "<br />";
print "40: " + autosubject($teststring, 40) + "<br />";
print "(3): " + chrpos($teststring, " ", 1) + "<br />";
print "(47): " + chrpos($teststring, " ", -1) + "<br />";

$teststring garums ir 56 (52) simboli, lai nebūtu jāskaita.
Pēdējās divās rindiņās vajadzētu tikt izvadītiem tiem skaitļiem, kas iekavās. Tas tā nenotiek. Kapē?

Kaitnieks-San (kaitnieks)
Aa, tikko pieleca - katrs .lv.. | Kaitnieks-San (atbildēt)

sestdien, 18.12.2004 @5:20 pm

Aa, tikko pieleca - katrs .lv burts tachu ir divi chari.