11. Řetězce, práce se soubory

Řetězce

Mathematica se hodí nejen k matematickým výpočtům, ale i ke zpracování dat, např. textů. Může se jednat např. o šifrování, statistické zpracování textů, apod.

Text je v Mathematice reprezentován jako řetězec - posloupnost znaků ohraničená uvozovkami.

a="the cat"

Uvozovky se nezobrazují na výstupu, zůstávají však součástí vnitřní reprezentace:

FullForm[a]

b="in the hat"

Pokud mají být uvozovky součástí řetězce, je třeba to vyznačit zpětným lomítkem. Pomocí něj se zapisují i další speciální znaky (\t je tabulátor, \n je konec řádku, \\ je zpětné lomítko).

"Leonardo da Vinci said: \"Learning never exhausts the mind.\""

Funkce pro práci s řetězci

Délka řetězce:

StringLength[a]

Spojení řetězců:

c=StringJoin[a," ",b]

Ekvivalentní zápis:

a<>" "<>b

Vložení řetězce na zadanou pozici:

StringInsert[c,"yellow ",16]

Proměnná zůstává nezměněna (podobně jako u operací se seznamy):

c

Výběr části řetězce:

StringTake[c,{5,7}]

Odstranění části řetězce:

StringDrop[c,{1,4}]

Hledání v řetězci:

StringPosition[c,"the"]

Počet výskytů:

StringCount[c,"the"]

Hledání a nahrazení:

StringReplace[c,"the"->"a"]

IgnoreCase->True vypíná rozlišování malých a velkých písmen:

StringReplace[c,"CAT"->"DOG",IgnoreCase->True]

Převod na velká/malá písmena:

ToUpperCase[c]

ToLowerCase[%]

Obrácení řetězce:

StringReverse["dog"]

Příklad: Nalezení všech palindromů (slov, která se zleva doprava píší stejně jako zprava doleva) v databázi anglických slov.

dictionary=DictionaryLookup[](* seznam všech anglických slov v databázi Mathematiky *)

Length[dictionary]

Cases[dictionary,x_/;StringReverse[x]==x]

Převod řetězce na seznam znaků (může být užitečné pro nestandardní operace s řetězci - pro práci se seznamy má Mathematica více funkcí):

e=Characters["pasta"]

FullForm[%]

RotateRight[%,2]

Spojení znaků zpět do jednoho řetězce:

StringJoin[%]

Převod řetězce na výraz a vyhodnocení:

ToExpression["2+2"]

Převod výrazu na řetězec:

ToString[4]

FullForm[%]

Abecedy v různých jazycích:

Alphabet[](* anglická abeceda *)

Alphabet["Greek"]

Alphabet["Czech"]

Příklad: Četnosti písmen v textovém souboru

text=Import["ExampleData/USConstitution.txt"];(* text americké ústavy, ukázkový soubor je součástí instalace Mathematiky, pomocí Import je načten jako řetězec *)

abeceda=Alphabet[]

cetnosti=Map[StringCount[text,#,IgnoreCase->True]&,abeceda](* pro každé písmeno anglické abecedy najdeme počet výskytů *)

relativni=N[cetnosti/Total[cetnosti]](* relativní četnosti *)

BarChart[relativni,ChartLabels->abeceda](* sloupcový diagram *)

Práce se soubory

Export

Mathematica umí exportovat soubory v následujících formátech:

$ExportFormats

Příkaz Export[“název souboru”,exportovaný objekt] vybírá formát podle přípony souboru.

Příklad: Export obrázku

spirala=ParametricPlot[{t Cos[t],t Sin[t]},{t,0,8Pi},Axes->False,Frame->True]

Přepnutí do adresáře, kde je uložen tento notebook:

SetDirectory[NotebookDirectory[]]

Export["spirala.png",spirala](* bitmapový obrázek ve formátu PNG *)

Příklad: Export animace

Chceme-li exportovat animaci, musíme ji přichystat ve formě seznamu jednotlivých snímků.

Následující funkce vrací zadaný počet snímků ukazujících postupné vykreslování Archimédovy spirály.

animace[n_]:=Table[ParametricPlot[{t Cos[t],t Sin[t]},{t,0,tmax},Axes->False,Frame->True,PlotRange->{{-4Pi,4Pi},{-4Pi,4Pi}},Epilog->{PointSize[Large],Point[{tmax Cos[tmax],tmax Sin[tmax]}]}],{tmax,4Pi/n,4Pi,4Pi/n}]

animace[8]

l=animace[80];

Animaci si ještě před uložením můžeme prohlédnout pomocí ListAnimate:

ListAnimate[l]

Export["animace.gif",l,"DisplayDurations"->1/15](* animovaný GIF, rychlost 15 snímků za sekundu *)

Příklad: Export tabulky

nasobeni=Table[i*j,{i,1,10},{j,1,10}]

%//TableForm

Export["nasobeni.xls",nasobeni](* tabulka v Excelu *)

Pro jednotlivé výstupní formáty mohou být k dispozici různé volby (viz např. výše zmíněnou “DisplayDurations” pro animace), jejichž seznam lze najít v dokumentaci k příslušnému formátu.

Import

Mathematica umí importovat soubory v následujících formátech:

$ImportFormats

Import[“název souboru nebo URL”] načte soubor z disku nebo z internetu a vrátí jeho obsah ve vhodné podobě.

Import["nasobeni.xls"](* načtení dříve uložené tabulky *)

Import["http://www.mff.cuni.cz/fakulta/symboly/logo300.gif"]