Szöveg tördelése több, adott hosszúságú sorba

Néha előfordul, hogy egy szöveget úgy kell megjeleníteni, hogy a sorhossz, vagyis az egy sorban kiírható karakterek maximális száma előre meghatározott. Ilyenkor a szöveget a szóelválasztó karaktereket figyelembe véve több sorba kell tördelni. A sortörésnél arra kell figyelni, hogy az csak egész szó végén történjen, valamint arra, hogy a szóhatároló karakter vagy karakterlánc a sorok végén feleslegesen ne jelenjen meg.

Egy szöveg több sorba való tördelését végző wrap_text nevű függvény egy lehetséges megvalósítása a következő:

A függvény első argumentuma a tördelendő szöveg. A második argumentummal határozható meg a maximális sorhossz karakterszámban mérve. A harmadik argumentummal adható meg, hogy az adott szövegben mi tekintendő szóhatároló karakterláncnak. A függvény egy olyan listával tér vissza, amelynek elemei az egyes sorokba kerülő karakterláncok. Ebből következik, hogy e lista elemszáma megadja, hogy az eredeti szöveg hány sorba lett tördelve. A függvény logikája nem túl bonyolult, és a részletes kommentből követhető. Csupán annak megvalósítása igényel némi átgondolást, hogy a szóelválasztó karakterlánc a sorok végén ne jelenjen meg.

A tesztelést egy külön függvény segítségével végezzük, amelynek definíciója ez:

Ebben először kiírjuk a tördelendő szöveget és a maximális sorhosszt, amit vizuálisan is megjelenítünk szaggatott vonallal, amelynek hossza mutatja a sorhosszkorlátot. Utána kiírjuk a wrap_text függvény visszatérési értékét jelentő listát, amiből láthatjuk a sorok pontos tartalmát, pl. azt, hogy hol van szóhatároló szóköz és hol nincs. Ezt követően azt is kiírjuk, hogy az egyes sorok milyen hosszúak, amiből ellenőrizhető, hogy egyik sem lépi túl a korlátot. Végül az egyes sorokat egymás alatt megjelenítjük.

A teszteket és eredményeiket alább láthatjuk:

Az első tesztben a szóhatároló karakterlánc az alapértelmezett szóköz, ami a szövegekben a leggyakoribb. A tesztet három sorhosszkorlátra futtattuk le. Nyilvánvaló, hogy minél hosszabb sort engedünk, annál kevesebb sorra kell az eredeti szöveget tördelni. Mindhárom esetben a követelményeknek megfelelően lettek a sorok előállítva.

A második tesztben a szóhatároló karakterlánc egy vessző és azt követő szóköz. Ez tipikusan felsorolásoknál fordul elő. A tesztet itt is három sorhosszkorlátra végeztük el, és látható, hogy ebben az esetben is a követelményeknek megfelelően tördelődtek a sorok.

Ebben a feladatban a karakterláncokkal és listákkal való műveletek voltak a középpontban. Mindezekről a Python tudásépítés lépésről lépésre című e-könyvben elsősorban a „Beépített konténerobjektumok”, „Műveletek” és a „Beépített típusok nyilvános metódusai” fejezetekben lehet részleteiben olvasni.

Érdekel a Python tudásépítés lépésről lépésre az alapoktól az első asztali alkalmazásig című e-könyv.