Zistenie poslednej pozície reťazca

Zistenie poslednej pozície reťazca
5 / 5 (100%) 1 hlasov

Už som tu písal článok o tom, ako zistíme pozíciu x-tého výskytu znaku alebo reťazca. V článku bol postup, kde sme si naprogramovali funkciu. Keďže to môže byť pre menej skúsených užívateľov trošku problém, dnes si ukážeme postup, kde nebude treba nič programovať.

K tejto téme ma inšpirovala otázka pána Jána, ktorý potreboval z reťazcov ponechať text za poslednou dvojbodkou. Jeho údaje mali nasledovnú štruktúru:

Pôvodný reťazec

Keby bol v každom reťazci rovnaký počet dvojbodiek, tak by to bolo jednoduché. V našom príklade ich je rôzny počet, preto musíme zistiť, koľko. To spravíme porovnaním (rozdielom) počtu znakov reťazca s dvojbodkami a reťazca bez dvojbodiek.

zistenie-poctu-dvojbodiek

Pekne je vidno problém, že reťazce majú rôzny počet dvojbodiek.

V našom príklade potrebujeme „vyrezať“ text za poslednou dvojbodkou. To bude jednoduché, spravíme to pomocou funkcie MID(). Problém je iba to, že síce vieme, ktorá dvojbodka je posledná, ale nepoznáme jej pozíciu. To musíme v ďalšom kroku zistiť.

Funkcia SEARCH() vyhľadá pozíciu reťazca, ale len prvú (buď od začiatku alebo od zadanej pozície). My máme tých dvojbodiek viacero, preto nedokážeme funkciu SEARCH() použiť s dvojbodkou. Musíme najskôr nahradiť poslednú dvojbodku za iný reťazec funkciou SUBSTITUTE() (taký, ktorý sa normálne v texte nenachádza) a až tomu funkciou SUBSTITUTE() zistíme pozíciu. My použijeme takýto postup: nahradíme poslednú dvojbodku za dve striešky ^^ (ale kľudne to môžu byť napr. dva paragrafy §§, alebo hocičo iné, čo sa v texte nenachádza).

Výmena poslednej dvojbodky

No a konečne môžeme použiť funkciu MID(). Vyrežeme dostatočný počet znakov (v našom prípade 100, predpokladám, že obec s dlhším názvom neexistuje) od pozície dvoch striešok ^^ (tam dáme +2, lebo začíname nie od pozície striešok, ale až za nimi). Funkciou SEARCH() sme zistili pozíciu, od ktorej chceme začať „vyrezávať“. Bolo to bez problémov, lebo dve striešky ^^ sa v texte nikdy nenachádzajú viac krát, ale len jeden krát.

Výsledok, vyrezaný reťazec

Ok, všetko je v poriadku, výsledok je správny. Pre tých, čo sa radi s Excelom „hrajú“: môžete to všetko spraviť aj pomocou jedného vzorca. Spravte si sami, ale pre kontrolu:

=MID(SUBSTITUTE(A2;“:“;“^^“;LEN(A2)-LEN(SUBSTITUTE(A2;“:“;““)));SEARCH(„^^“;SUBSTITUTE(A2;“:“;“^^“;LEN(A2)-LEN(SUBSTITUTE(A2;“:“;““))))+2;100)

Súbor s príkladom Zistenie poslednej pozície reťazca si môžete stiahnuť. Je tam hárok bez riešenia a aj s riešením.

 

Komentáre
Zistenie poslednej pozície reťazca
5 / 5 (100%) 1 hlasov