středa 15. dubna 2009

Apostrof v řetězci

Práce s řetězci je v Matlabu velmi jednoduchá a téměř intuitivní. Však je také tato problematika popisována hned v úvodních kapitolách většiny učebnic. Zkráceně, řetězec vytvoříme většinou tak, že požadovaný text “obalíme” apostrofy:

'textový řetězec'
ans =
textový řetězec

Samozřejmě, že s tako vytvořeným řetězcem můžeme dále libovolně nakládat a zpracovávat ho mnoha funkcemi Matlabu pro práci s řetězci. Spojování řetězců se provádí pomocí funkce strcat, nebo stejně jako spojování matic, pomocí hranatých závorek:

['textový', 'řetězec']

Na jednu záludnost však narazit můžeme a to tehdy pokud do řetězce potřebujeme vložit apostrof. V českém textu se apostrof vyskytuje velmi zřídka, nicméně v anglickém textu je tomu naopak viz: “I’m …”. Pokud tedy potřebujete vložit apostrof do řetězce musíte apostrof napsat dvakrát za sebou:

'I''m'
ans =
I'm

Druhým typickým místem, kde se setkáte s potřebou uvádět apostrof do řetězce je příprava kódu pro funkci eval. Například pokud chceme transponovat matici, jejíž jméno je uloženo v proměnné jmenoMatice, bude volání funkce eval vypadat následovně:

A = [1 2;3 4]
jmenoMatice = 'A';
eval([jmenoMatice ''''])
A =
1 2
3 4

ans =
1 3
2 4

Uvedení čtyř apostrofů je zde zcela v pořádku a ve finále opravdu vygeneruje apostrof jeden. První apostrof uvozuje začátek řetězce, následně jsou uvedeny dva apostrofy jenž se sloučí v apostrof jeden a poslední ukončuje řetězec. Funkce eval tedy zpracovává řetězec “A'”.

K sepsání tohoto příspěvku mě inspirovala diskuze GUI : evalin with a condition na comp.soft-sys.matlab diskuzní skupině.

Žádné komentáře:

Okomentovat