Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sanojen jako riveille

Sivun loppuun

Vasta_alkaja [01.03.2008 13:37:54]

#

Wordwrapilla onnistuu kätevästi merkkijonon katkaisemeni vaikka 30 merkin kohdalta ja aloittaa uudelta riviltä, mutta millä olisi mahdollista katsoa 30 merkin jälkeen oleva seuraava piste tai tyhjä väli.


https://www.php.net/wordwrap

Niko [01.03.2008 13:41:10]

#

strpos?

Vasta_alkaja [01.03.2008 15:00:35]

#

merkkijono = abc def ghi jkl mno pqr stu vwx yzå äö

eli haluamani tulos olisi, katkaistaan merkkijono jokaisen 5 merkin välin jälkeen

abc def
ghi jkl
jne..

Äkkiseltään katsottuna tämä ei onnistu strpos:silla, voin olla kuitenkin väärässä.

esimerkki 2.
merkkijono = abcdefghijklmnopqrstuvwxyzåäö

abcde
fghij
jne...

Ongelmani tässä on, että jos sana on vaikka koirat, kävisi mielestäni wordwrapilla näin:

koira
t

T.M. [01.03.2008 15:07:09]

#

Älä katko niin pieniä sanoja? Ei mitään järkeä tuollaisessa...

tuntuu vähän että tää itse ongelma on ongelma vain teoriassa, vaikka oikeassa tilanteessa moista ei tapahtuisi, esim vähän väliä saa kuulla "miks mun taulukko venyy ku kirjotan sinne "gfdjkgdsjklgdsgdsjklgdsgds ..." vaik oikeesti ei tommosii kirjotella mihinkään...

Antti Laaksonen [01.03.2008 15:38:59]

#

Jos määrittelet haluamasi jakotavan tarkasti, sen voi varmasti myös toteuttaa.

Miksi esimerkissä 1 rivillä saa olla 7 merkkiä (abc def), mutta esimerkissä 2 uudelle riville täytyy siirtyä heti 5 merkin jälkeen?

Funktio wordwrap ei katkaise sanaa, jos katkaisua ei salli neljännessä parametrissa.

Vasta_alkaja [01.03.2008 23:45:12]

#

T.M.

Katkaisu tapahtuu realistisesti 100 merkin kohdalla. Viidellä merkillä saa vain helpommin esimerkin.

Antti. Huonosti esimerkkini selitin.
1234567 8

Eli tarkoitus olisi katkaista aina merkijono viiden merkin jälkeen tulevan välin kohdalta. Eli tämän esimerkin mukaan sana katkaistaisiin 7 jälkeen koska sen jälkeen tulee ensimmäinen väli viiden merkin jälkeen.

12345 67

Tämä taas katkaistaisiin 5 jälkeen, koska se on merkkijonon pituus jonka jälkeen etsitään ensimmäinen väli ja sehä tuleekin heti.

Eli tarkoitus oikeassa toiminnossa on tehdä tämä tarkistus joka sadan merkin jälkeen.

Antti Laaksonen [02.03.2008 00:27:05]

#

Yksi tapa on erottaa merkkijonon sanat taulukkoon ja lisätä niitä uuteen merkkijonoon rivi kerrallaan. Aina kun yhdelle riville on lisätty niin paljon sanoja, että rivin merkkien määrä ylittää halutun merkkien määrän, uuteen merkkijonoon tulee rivinvaihto.

<?php
$teksti = "Tämä teksti jakautuu kolmelle riville.";
$uusi = "";
$osat = explode(" ", $teksti);
$laskuri = 0;
for ($i = 0; $i < count($osat); $i++) {
    $uusi .= $osat[$i] . " ";
    $laskuri += strlen($osat[$i]) + 1;
    if ($laskuri >= 10) {
        $uusi .= "\n";
        $laskuri = 0;
    }
}
echo "<pre>----------\n$uusi</pre>";
?>

Koodi hieman lyhentyy säännöllisen lausekkeen avulla:

<?php
$teksti = "Tämä teksti jakautuu kolmelle riville.";
$uusi = preg_replace("/.{9}\\S* /", "\\0\n", $teksti);
echo "<pre>----------\n$uusi</pre>";
?>

Molemmissa yllä olevissa esimerkeissä rivi katkaistaan 10 merkin jälkeen.

Vasta_alkaja [02.03.2008 12:12:46]

#

kiitoksia. Pitääpäs kokeilla tuota.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta