libxml2 parser DOM dla C++ czwartek, 8 grudnia 11

Wielkość: px
Rozpocząć pokaz od strony:

Download "libxml2 parser DOM dla C++ czwartek, 8 grudnia 11"

Transkrypt

1 libxml2 parser DOM dla C++ 1

2 SAX vs. DOM Dwa podstawowe typy API do przetwarzania dokumentów XML: Oparte na drzewach (ang. Tree-based API) - mapują strukturę dokumentu do drzewa i pozwalają użytkownikowi nawigować po tym drzewie. Oparte na zdarzeniach (ang. Event based API) - zgłaszają zdarzenia występujące podczas parsowania (np. początek/ koniec elementu). Zdarzenia są zgłaszane do aplikacji za pomocą callback'u. Aplikacja implementuje metody (handlery) przechwytujace te zdarzenia w sposób podobny do obsługi zdarzeń generowanych przez GUI. 2

3 SAX vs. DOM DOM - czesto użyteczne, ale wykorzystują dużo zasobów, szczególnie w przypadku dużych dokumentów. Jesli aplikacje wykorzystują swoje własne struktury danych niekorzystne jest budowanie drzewa tylko po to, żeby na jego podstawie zbudować obiekty wewnętrznych struktur danych. SAX pozwala na parsowanie dokumentów dużo większych niż dostępne zasoby pamięciowe. Własne struktury danych mogą być tworzone za pomocą metod wykorzystywanych do obsługi zdarzeń. 3

4 Kiedy używać SAX - przykład ZADANIE: W dokumencie XML wielkosci 20MB znaleźć element zawierający słowo "Częstochowa" Wykorzystanie DOM - tworzenie drzewa dla tak dużego dokumentu tylko po to, żeby znaleźć jeden element w zbiorze danych byłoby bardzo nie korzystne. Wykorzystanie SAX - możliwe znalezienie elementu (w metodach obsługi zdarzeń) wykorzystując minimalną ilość pamięci. 4

5 SAX - jak to działa. <?xml version="1.0"?> <doc> <para>hello, world!</para> </doc> Podczas przetwarzania dokumentu zgłoszone zostaną zdarzenia: 1. start document 2. start element: doc 3. start element: para 4. characters: Hello, world! 5. end element: para 6. end element: doc 7. end document 5

6 SAX SAX nie wymaga cache'owania całego dokumentu, umożliwia przechwytywanie zdarzeń parsowania tak jakby były to zdarzenia interesu użytkownika. Za pomocą API bazujacego na zdarzeniach możliwe jest utworzenie struktury drzewa i zmapowanie dokumentu XML do tej struktury. 6

7 LibXML2 typy danych xmlchar - znak kodowany w UTF-8. Jeśli dane są kodowane w innym standardzie muszą zostać przekształcone do UTF-8. xmldoc - struktura zawierająca drzewo utworzone przez parser. xmldocptr - wskaźnik na strukturę xmldoc. xmlnode - struktura zawierająca pojedynczy węzeł. xmlnodeptr - wskaźnik na strukturę xmlnode wykorzystywany do przechodzenia po drzewie. 7

8 xmlnode Najwazniejsze pola składowe struktury _xmlnode xmlelementtype type - typ węzła const xmlchar * name - nazwa węzła _xmlnode * children - wskaźnik na pierwsze dziecko _xmlnode * last - wskaźnik na ostatnie dziecko _xmlnode * parent - wskaźnik na rodzica _xmlnode * next - wskaźnik na następne rodzeństwo _xmlnode * prev - wskaźnik na poprzednie rodzeństwo _xmldoc * doc - wskaźnik na węzeł dokumentu xmlchar * content zawartość węzła (value) _xmlattr * properties - wskaźnik na pierwszy atrybut 8

9 Typ węzła - enum xmlelementtype XML_ELEMENT_NODE = 1 XML_ATTRIBUTE_NODE = 2 XML_TEXT_NODE = 3 XML_CDATA_SECTION_NODE = 4 XML_ENTITY_REF_NODE = 5 XML_ENTITY_NODE = 6 XML_PI_NODE = 7 XML_COMMENT_NODE = 8 XML_DOCUMENT_NODE = 9 XML_DOCUMENT_TYPE_NODE = 10 XML_DOCUMENT_FRAG_NODE = 11 XML_NOTATION_NODE = 12 XML_HTML_DOCUMENT_NODE = 13 XML_DTD_NODE = 14 XML_ELEMENT_DECL = 15 XML_ATTRIBUTE_DECL = 16 XML_ENTITY_DECL = 17 XML_NAMESPACE_DECL = 18 XML_XINCLUDE_START = 19 XML_XINCLUDE_END = 20 XML_DOCB_DOCUMENT_NODE = 21 9

10 Węzeł dokumentu - xmldoc Najważniejsze pola składowe struktury _xmldoc xmlelementtype type - XML_DOCUMENT_NODE char * name - nazwa pliku/adres URI dokumentu _xmlnode * children - wskaźnik na pierwsze dziecko _xmldoc * doc - autoreferencja, wskaźnik na samego siebie const xmlchar * version - wersja dokumentu XML const xmlchar * encoding - kodowane dokumentu int properties - zestaw właściwości xmldocproperties 10

11 Właściwości dokumentu XML xmldocproperties XML_DOC_WELLFORMED = 1 - poprawna składnia XML (well formed) XML_DOC_NSVALID = 2 - poprawna przestrzeń nazw XML_DOC_OLD10 = 4 - dokument parsowany z wykorzystaniem starszej wersji parsera 1.0 XML_DOC_DTDVALID = 8 - poprawna walidacja DTD XML_DOC_XINCLUDE = 16 - wykonane podstawienie XInclude XML_DOC_USERBUILT = 32 - dokument utworzony za pomocą API (nie przez parsowanie XMLa) XML_DOC_INTERNAL = 64 - zbudowany dla wewnętrznego przetwarzania XML_DOC_HTML = dokument HTML 11

12 Węzeł atrybutu Najważniejsze pola składowe struktury _xmlattribute xmlelementtype type - XML_ATTRIBUTE_DECL const xmlchar * name - nazwa atrybutu _xmldoc * doc - wskaźnik na węzeł dokumentu _xmlattribute * nexth - wskaźnik na następny atrybut xmlattributetype atype - typ wartości atrybutu xmlattributedefault def - rodzaj wartości domyślniej const xmlchar * defaultvalue - wartość domyślna atrybutu const xmlchar * elem - wartość atrybutu 12

13 Wartości domyślne i typy atrybutów xmlattributedefault XML_ATTRIBUTE_NONE = 1 - brak wartości domyślniej XML_ATTRIBUTE_REQUIRED = 2 - atrybut wymagany XML_ATTRIBUTE_IMPLIED = 3 - wartość domyślna (używana jeśli brak atrybutu) XML_ATTRIBUTE_FIXED = 4 - wartość ustalona xmlattributetype XML_ATTRIBUTE_CDATA = 1 XML_ATTRIBUTE_ID = 2 XML_ATTRIBUTE_IDREF = 3 XML_ATTRIBUTE_IDREFS = 4 XML_ATTRIBUTE_ENTITY = 5 XML_ATTRIBUTE_ENTITIES = 6 XML_ATTRIBUTE_NMTOKEN = 7 XML_ATTRIBUTE_NMTOKENS = 8 XML_ATTRIBUTE_ENUMERATION = 9 XML_ATTRIBUTE_NOTATION = 10 13

14 libxml2 Aby rozpoczac przetwarzanie dokumentu XML nalezy: Utworzyć wskaźnik wskazujący na parsowany dokument (węzeł dokumentu). Sprawdzić poprawność parsowania dokumentu. Jednym z częstych błędów jest próba przetworzenia dokumentu wykorzystujacego inne kodowane niż UTF-8, który nie ma jawnie zadeklarowanego kodowania. Jeśli dokument wykorzystuje inne kodowane i posiada poprawna deklaracje dokumentu xml zawierającą kodowane, libxml automatycznie przekształci dokument do UTF-8 i poprawnie wykona parsowanie. Pobrać korzeń dokumentu i sprawdzić czy cokolwiek zawiera (czy dokument nie jest pusty). Rozpocząć przetwarzanie drzewa, np. od sprawdzenia nazwy węzła będącego korzeniem drzewa. 14

15 libxml2 xmldocptr doc = xmlreadfile(docname); if (doc == NULL ) { std::cerr << "błąd parsowania" << std::endl; return; } xmlnodeptr cur = xmldocgetrootelement(doc); if (cur == NULL) { std::cerr << "dokument pusty" << std::endl; xmlfreedoc(doc); return; } if (xmlstrcmp(cur->name, (const xmlchar *) "story")) { std::cerr << "korzeń dokumentu!= story" << std::endl; xmlfreedoc(doc); return; } 15

16 libxml2 xmldocptr xmlreaddoc (const xmlchar * cur, const char * URL, const char * encoding, int options) tworzy drzewo na podstawie dokumentu XML przekazanego jako ciąg znaków cur doc = xmlreaddoc(bad_cast "<a></a>", NULL, NULL, 0); xmldocptr xmlreadfile (const char * filename, const char * encoding, int options) tworzy drzewo na podstawie dokumentu XML, którego nazwa lub adres URL jest przekazany jako filename doc = xmlreadfile(" NULL, 0); xmlnodeptr xmldocgetrootelement (xmldocptr doc) pobiera korzeń dokumentu doc->children może zwrócić węzeł będący komentarzem, xmldocgetrootelement pomija komentarze 16

17 Enum xmlparseroption XML_PARSE_RECOVER = 1 : recover on errors XML_PARSE_NOENT = 2 : substitute entities XML_PARSE_DTDLOAD = 4 : load the external subset XML_PARSE_DTDATTR = 8 : default DTD attributes XML_PARSE_DTDVALID = 16 : validate with the DTD XML_PARSE_NOERROR = 32 : suppress error reports XML_PARSE_NOWARNING = 64 : suppress warning reports XML_PARSE_PEDANTIC = 128 : pedantic error reporting XML_PARSE_NOBLANKS = 256 : remove blank nodes XML_PARSE_SAX1 = 512 : use the SAX1 interface internally XML_PARSE_XINCLUDE = 1024 : Implement XInclude substitition XML_PARSE_NONET = 2048 : Forbid network access XML_PARSE_NODICT = 4096 : Do not reuse the context dictionnary XML_PARSE_NSCLEAN = 8192 : remove redundant namespaces declarations XML_PARSE_NOCDATA = : merge CDATA as text nodes XML_PARSE_NOXINCNODE = : do not generate XINCLUDE START/END nodes XML_PARSE_COMPACT = : compact small text nodes; no modification of the tree allowed afterwards (will possibly crash if you try to modify the tree) XML_PARSE_OLD10 = : parse using XML-1.0 before update 5 XML_PARSE_NOBASEFIX = : do not fixup XINCLUDE xml:base uris XML_PARSE_HUGE = : relax any hardcoded limit from the parser XML_PARSE_OLDSAX = : parse using SAX2 interface from before

18 libxml2 xmlchar * xmlstrdup (const xmlchar * cur) tworzy kopię łańcucha znakowego i zwraca wskaźnik do niego int xmlstrlen (const xmlchar * str) zwraca długość łańcucha znakowego int xmlstrcmp (const xmlchar * str1, const xmlchar * str2) porównuje dwa łańcuchy znakowe (const xmlchar*), zwraca 0 jeśli ciągi znakowe są takie same int xmlstrcasecmp (const xmlchar * str1, const xmlchar * str2) porównuje dwa łańcuchy znakowe (const xmlchar*) nie biorąc pod uwagę wielkości znaków xmlchar * xmlstrsub (const xmlchar * str, int start, int len) tworzy nowy łańcuch znaków na podstawie str, rozpoczynając od znaku start o długości len 18

19 Zwalnianie zasobów void xmlfreedoc (xmldocptr cur) zwolnienie pamięci wykorzystywanej przez struktury tworzące dokument void xmlcleanupparser (void) zwolnienie pamięci wykorzystywanej przez bibliotekę. void xmlfreenode (xmlnodeptr cur) zwolnienie pamięci przydzielonej dla węzła, rekurencyjnie usuwa też wszystkie dzieci węzła. void xmlfreeprop (xmlattrptr cur), void xmlfreeproplist (xmlattrptr cur) zwalnia atrybut (listę atrybutów) oraz pamięć wykorzystywaną przez wartość atrybutu. 19

20 Dostęp do węzła Dostęp do węzła uzyskiwany jest poprzez przejście przez węzły dokumentu dopóki nie znajdziemy węzła, którego szukamy. cur = cur->xmlchildrennode; while (cur!= NULL) { if (!xmlstrcmp(cur->name, (const xmlchar *)"storyinfo")){ // przetwarzaj węzeł "storyinfo" } cur = cur->next; } 20

21 Tworzenie dokumentu xmldocptr xmlnewdoc (const xmlchar * version) tworzy nowy dokument version - wersja XMLa 1.0 doc = xmlnewdoc(bad_cast "1.0"); BAD_CAST - makro rzutujące stringa do xmlchar*. Powinno być używane tylko wtedy, kiedy jesteśmy pewni, że jest bezpieczne. xmlnodeptr xmlnewnode (xmlnsptr ns, const xmlchar * name) tworzy nowy element o podanej nazwie, ns jest opcjonalne (NULL) zwraca wskaźnik na utworzony węzeł nazwa nowego węzła jest tworzona za pomocą funkcji xmlstrdup() xmlnodeptr xmldocsetrootelement (xmldocptr doc, xmlnodeptr root) ustawia korzeń dokumentu zwraca stary korzeń jeśli istniał, jeśli nie NULL 21

22 Tworzenie węzłów xmlnodeptr xmlnewchild (xmlnodeptr parent, xmlnsptr ns, const xmlchar * name, const xmlchar * content) Tworzy nowy element i dodaje go na końcu listy dzieci elementu parent. ns i content to parametry opcjonalne. Jeśli content nie jest pusty tworzony jest węzeł tekstowy dodany jako dziecko nowego węzła. Wartość parametru content jest traktowana jako XML CDATA, co pozwala na wykorzystanie referencji do encji. zwracaany jest wskaźnik na nowo utworzony węzeł xmlnewchild(root_node, NULL, BAD_CAST "node1", BAD_CAST "content of node 1"); 22

23 Tworzenie atrybutów i węzłów tekstowych xmlattrptr xmlnewprop (xmlnodeptr node, const xmlchar * name, const xmlchar * value) tworzy i zwraca nowy węzeł atrybutu node - węzeł do którego dodawany jest atrybut xmlnodeptr xmlnewtextchild (xmlnodeptr parent, xmlnsptr ns, const xmlchar * name, const xmlchar * content) tworzy nowy węzeł tekstowy i dodaje go na końcu listy dzieci węzła parent. content i ns są opcjonalne content - wartość węzła tekstowego. Znaki specjalne XMLa (&, < itp.) są automatycznie przekształcane do sekwencji unikowych. void xmlnodeaddcontent (xmlnodeptr cur, const xmlchar * content) dodaje tekst (content) do obecnej wartości węzła tekstowego content - dane RAW (możliwe wystąpienie &,< itp) void xmlnodesetcontent (xmlnodeptr cur, const xmlchar * content) ustawia tekst (content) jako wartości węzła tekstowego - content XML CDATA content - dane XML CDATA 23

24 Dodawanie dzieci xmlnodeptr xmladdchild (xmlnodeptr parent, xmlnodeptr cur) Dodaje nowe dziecko do węzła parent na końcu listy dzieci (jako ostatnie dziecko). Jeśli dodawany węzeł jest atrybutem jest dołączany na końcu listy atrybutów. Jeśli atrybut o takiej nazwie istnieje jest on najpierw usuwany. Jeśli dodawanym węzłem jest węzeł tekstowy jego zawartość jest łączona z już istniejącą w tym miejscu treścią. Węzeł cur jest zwalniany. xmlnodeptr xmladdchildlist (xmlnodeptr parent, xmlnodeptr cur) Dodaje listę węzłów na końcu listy dzieci rodzica łącząc przyległe węzły tekstowe (węzeł cur może być zwolniony jeśli jest węzłem tekstowym) 24

25 Dodawanie rodzeństwa xmlnodeptr xmladdnextsibling (xmlnodeptr cur, xmlnodeptr elem) Dodaje nowy węzeł (elem) jako następne rodzeństwo (next sibling) węzła cur. xmlnodeptr xmladdprevsibling (xmlnodeptr cur, xmlnodeptr elem) Dodaje nowy węzeł jako poprzednie rodzeństwo Podczas dodawania rodzeństwa obowiązują następujące zasady: Jeśli węzeł istniał wcześniej w dokumencie jest najpierw odłączany od dokumentu (unlink). Jeśli węzeł elem jest typu tekstowego może zostać połączony z innym węzłem i w rezultacie zwolniony. Jeśli węzeł elem jest atrybutem jest dodawany do do listy atrybutów. Jeśli atrybut o podanej nazwie istnieje jest on najpierw niszczony. 25

26 libxml2 - przydatne funkcje unsigned long xmlchildelementcount (xmlnodeptr parent) zwraca liczbę dzieci węzła, które są węzłami elementu. xmlnodeptr xmlfirstelementchild (xmlnodeptr parent) zwraca pierwsze dziecko będące typu element xmlnodeptr xmlgetlastchild (xmlnodeptr parent) zwraca ostatnie dziecko węzła parent xmldocptr xmlcopydoc (xmldocptr doc, int recursive) tworzy kopię informacji o drzewie. Jeśli recursive jest różne od zera kopia wykonywana jest rekursywnie. xmlnodeptr xmlcopynode (const xmlnodeptr node, int extended) tworzy kopię węzła, extended == 1 - kopia rekursywna obejmująca atrybuty, przestrzenie nazw i dzieci extended == 2 - kopia węzła razem z atrybutami i przestrzenie nazw xmlattrptr xmlcopyprop (xmlnodeptr target, xmlattrptr cur) tworzy kopię atrybutu cur target - element, do którego atrybut jest dodawany 26

27 libxml2 - przydatne funkcje unsigned long xmlchildelementcount (xmlnodeptr parent) zwraca liczbę dzieci węzła, które są węzłami elementu. xmlnodeptr xmlfirstelementchild (xmlnodeptr parent) zwraca pierwsze dziecko będące typu element xmlnodeptr xmlgetlastchild (xmlnodeptr parent) zwraca ostatnie dziecko węzła parent xmldocptr xmlcopydoc (xmldocptr doc, int recursive) tworzy kopię informacji o drzewie. Jeśli recursive jest różne od zera kopia wykonywana jest rekursywnie. xmlnodeptr xmlcopynode (const xmlnodeptr node, int extended) tworzy kopię węzła, extended == 1 - kopia rekursywna obejmująca atrybuty, przestrzenie nazw i dzieci extended == 2 - kopia węzła razem z atrybutami i przestrzenie nazw xmlattrptr xmlcopyprop (xmlnodeptr target, xmlattrptr cur) tworzy kopię atrybutu cur target - element, do którego atrybut jest dodawany 27

28 Zapis drzewa int xmldocformatdump (FILE * f, xmldocptr cur, int format) zrzuca dokument do pliku (lub na standardowe wyjście) format == 1 - dodawane są znaki formatujące (koniec linii, spacje itp) zapis na standardowe wyjście: xmldocformatdump(stdout, doc, 1); zapis do pliku: FILE *fd = fopen ("doc.xml", "wt"); xmldocformatdump(fd, doc, 1); 28

29 libxml2 i XPath 29

30 libxml2 i xpath LibXML2 pozwala na wykorzystanie wyrażeń XPath do uzyskiwania dostępu do węzłów. XPath pozwala wybrać z dokumentu XML zbiór węzłów, które spełniają określone kryteria. Aby używać XPath należy utworzyć kontekst xmlxpathcontext i przekazać wyrażenie XPath oraz kontekst do funkcji xmlxpathevalexpression. Funkcja xmlxpathevalexpression zwraca wskaźnik na xmlxpathobject (xmlxpathobjectptr), który zawiera zbiór węzłów spełniających kryteria wyrażenia XPath. Aby używać XPath należy dołączyć pliki nagłówkowe <libxml/xpath.h> oraz <libxml/xpathinternals.h> 30

31 libxml2 i XPath xmldocptr doc = xmlreadfile(" NULL, 0); // utworzenie kontekstu xmlxpathcontextptr context = xmlxpathnewcontext(doc); // pobranie węzłów zspełniających kryteria XPath xmlxpathobjectptr result = xmlxpathevalexpression(xpath, context); // jeśli zbiór elementów jest pusty zwalniamy pamięć if (xmlxpathnodesetisempty(result->nodesetval)){ } xmlxpathfreeobject(result); printf("no result\n"); Po zakończeniu przetwarzania dokumentu XML należy zwolnić kontekst za pomocą funkcji xmlxpathfreecontext(context) 31

32 Struktura xmlxpathobject Wskaźnik na xmlxpathobject zwrócony przez funkcję xmlxpathevalexpression zawiera zbiór węzłów i informacje potrzebne do przejścia po tych węzłach. Najważniejsze pola składowe struktury xmlxpathobject: xmlxpathobjecttype type - typ obiektu xmlnodesetptr nodesetval - wskaźnik na zbiór węzłów Po zakończeniu przetwarzania instancja struktury xmlxpathobject powinna zostać usunięta za pomocą funkcji xmlxpathfreeobject. 32

33 Typ obiektów xmlxpathobject Typ obiektu xmlxpath - typ wyliczeniowy xmlxpathobjecttype XPATH_UNDEFINED = 0 XPATH_NODESET = 1 XPATH_BOOLEAN = 2 XPATH_NUMBER = 3 XPATH_STRING = 4 XPATH_POINT = 5 XPATH_RANGE = 6 XPATH_LOCATIONSET = 7 XPATH_USERS = 8 XPATH_XSLT_TREE = 9 33

34 Zestaw węzłów xmlnodeset Obiekt xmlxpathobject zawiera wskaźnik na zestaw węzłów xmlnodeset (xmlnodesetptr). Są to węzły, które spełniają kryterium XPath. Pola składowe struktury xmlnodeset: int nodenr - liczba węzłów w zbiorze int nodemax - wielkość zaalokowanej pamięci xmlnodeptr * nodetab - tablica węzłów - nieuporządkowana (wskaźnik na pierwszy element tablicy) 34

35 Zestaw węzłów xmlnodeset if (xpathobj->nodesetval == NULL) { printf("coś poszło nie tak... :( "); return 0; } for (int i=0; i < xpathobj->nodesetval->nodenr; i++) { xmlnodeptr child = xpathobj->nodesetval->nodetab[i]->xmlchildrennode; const xmlchar * str = xmlnodelistgetstring(doc, child, 1); printf("str: %s\n", str); xmlfree((void*)str); } 35

36 xmlnodelistgetstring xmlchar * xmlnodelistgetstring (xmldocptr doc, xmlnodeptr list, int inline) Tworzy ciąg znakowy równy tekstowi zawartemu we wszystkich węzłach należących do listy węzłów. doc - węzeł dokumentu list - lista węzłów inline - czy zastępować encje Wartość zwracana przez funkcję to wskaźnik na kopię ciągu znakowego - wskaźnik ten musi zostać zwolniony za pomocą funkcji xmlfree(). Funkcja wywołana dla pola składowego xmlchildrennode węzła a dla dokumentu <a> x <b/> y <c/> z </a> zwróci wartość xyz. 36

37 Wywołanie zwrotne - callback 37

38 Wywołanie zwrotne - callback Technika programowania (wzorzec programowania) będąca odwrotnością wywołania funkcji. Zasada działania: Referencja do funkcji A jest przekazywana do funkcji B, najczęściej wywoływanej na osobnym wątku. Wątek główny nadal kontynuuje swoją pracę, w czasie gdy funkcja B działa niezależnie od niego. Gdy funkcja B zakończy swoje działanie, wywołuje funkcję A zwracając rezultat swojego działania. 38

39 Wywołanie zwrotne 39

40 Wywołanie zwrotne w językach obiektowych W językach obiektowych do funkcji przekazywany jest wskaźnik na obiekt, a czasami również nazwa metody, która ma być wywołana na rzecz tego obiektu jako wywołanie zwrotne. Przed wywołaniem funkcji powinno się sprawdzić czy obiekt, na rzecz którego wywoływana jest metoda nadal istnieje i czy udostępnia odpowiednią metodę! Interfejsy - mechanizm gwarantujący, że przekazany obiekt udostępnia wymaganą metodę. 40

41 Wywołanie zwrotne w językach obiektowych Klasa A: void fun(){ B b; b.dosomething(this, didfinishdoing ); Klasa B: } /* kontynuuj wykonywanie innych operacji */... /**************************************************************/ void didfinishdoing(resulttype result) { } /* wynik działania funkcji dosomething to result - możemy go np. zapisać do bazy lub pokazać użytkownikowi */ callback void dosomething(object obj, string method){ } // wykonaj czasochłonną operację resulttype res =... /* wykonaj wywołanie zwrotne i przekaż do metody method wynik znajdujący się w zmiennej res */ obj. callmethod[method](res); 41

42 SAX w libxml2 42

43 SAX - jak to działa. <?xml version="1.0"?> <doc> <para>hello, world!</para> </doc> Podczas przetwarzania dokumentu zgłoszone zostaną zdarzenia: 1. start document 2. start element: doc 3. start element: para 4. characters: Hello, world! 5. end element: para 6. end element: doc 7. end document 43

44 Rozpoczęcie parsowania dokumentu int xmlsaxuserparsefile(xmlsaxhandlerptr sax, void * user_data, const char * filename); int xmlsaxuserparsememory(xmlsaxhandlerptr sax, void * user_data, char * buffer, int size); sax - SAX handler, instancja struktury przechowująca wskaźniki na funkcje user_data - dane użytkownika przekazywane do funkcji podczas wywołań zwrotnych (callback) filename - nazwa pliku buffer - dokument XML size - długość dokumentu XML (w bajtach) Funkcje zwracają 0 jeśli operacja się powiedzie, w przeciwnym razie kod błędu. 44

45 Dane użytkownika user_data - dane użytkownika przekazywane do funkcji podczas wywołań zwrotnych (callback) Wskaźnik na obiekt (strukturę), w którym przechowywany jest stan parsera oraz dane odczytane z dokumentu XML. Wskaźnik ten jest przekazywany za każdym razem kiedy parser wywołuje funkcję za pomocą wywołania zwrotnego, dzięki czemu możemy zapisać dane związane z napotkanym zdarzeniem oraz aktualną pozycję w dokumencie XML (wewnątrz jakiego znacznika jesteśmy). 45

46 xmlsaxhandler Struktura xmlsaxhandler zawiera wskaźniki na metody, które będą wykonane w momencie wystąpienia zdarzenia - napotkania odpowiedniego elementu w dokumencie XML. Jeśli zdarzenia mają nie być obsługiwane wskaźnikom na funkcje można przypisać wartość NULL. 46

47 xmlsaxhandler - funkcje internalsubsetsaxfunc internalsubset; isstandalonesaxfunc isstandalone; hasinternalsubsetsaxfunc hasinternalsubset; hasexternalsubsetsaxfunc hasexternalsubset; resolveentitysaxfunc resolveentity; getentitysaxfunc getentity; entitydeclsaxfunc entitydecl; notationdeclsaxfunc notationdecl; attributedeclsaxfunc attributedecl; elementdeclsaxfunc elementdecl; unparsedentitydeclsaxfunc unparsedentitydecl; setdocumentlocatorsaxfunc setdocumentlocator; startdocumentsaxfunc startdocument; enddocumentsaxfunc enddocument; startelementsaxfunc startelement; endelementsaxfunc endelement; referencesaxfunc reference; characterssaxfunc characters; ignorablewhitespacesaxfunc ignorablewhitespace; processinginstructionsaxfunc processinginstruction; commentsaxfunc comment; warningsaxfunc warning; errorsaxfunc error; fatalerrorsaxfunc fatalerror; 47

48 Funkcje inicjujące i finalizujące startdocumentsaxfunc void startdocumentsaxfunc (void * ctx) ctx - kontekst parsera enddocumentsaxfunc void enddocumentsaxfunc (void * ctx) ctx - kontekst parsera Funkcje te są najczęściej wykorzystywane do zainicjowania struktur, w których będą przechowywane dane oraz zwolnienia zasobów. 48

49 Funkcje przetwarzające dane startelementsaxfunc void startelementsaxfunc (void * ctx, const xmlchar * name, const xmlchar ** atts) ctx - kontekst parsera ch - nazwa znacznika atts - tablica par nazwa/wartość zakończona wartością NULL endelementsaxfunc void endelementsaxfunc (void * ctx, const xmlchar * name) ctx - kontekst parsera ch - nazwa znacznika characterssaxfunc void characterssaxfunc (void * ctx, const xmlchar * ch, int len) ctx - kontekst parsera ch - string xmlchar len - liczba znaków 49

50 Odczyt nazw elementów XML class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { } ((std::vector<const xmlchar *> *)ctx)->push_back(name); }; int main (int argc, const char * argv[]) { } xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; std::vector<const xmlchar *> * v = new std::vector<const xmlchar *>(0); xmlsaxuserparsefile(&handler, v, " for (int i =0; i<v->size(); ++i) std::cout<< (*v)[i] << std::endl; delete v; return 0; 50

51 Odczyt wartości elementów tekstowych class Fun { public: static void charactersf (void * ctx, const xmlchar * ch, int len) { ((std::vector<std::string> *)ctx)->push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]) { xmlsaxhandler handler = {0}; handler.characters = Fun::charactersF; std::vector<std::string> * v = new std::vector<std::string>(0); xmlsaxuserparsefile(&handler, v, " for (int i =0; i<v->size(); ++i) std::cout<< (*v)[i] << std::endl; return 0; } 51

52 Odczyt wartości elementów tekstowych class B{ public: bool insideimie; std::vector<std::string> v; B() { v = std::vector<std::string>(0); } }; class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=true; } static void endf (void * ctx, const xmlchar * name) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=false; } static void charactersf (void * ctx, const xmlchar * ch, int len) { if (((B*)ctx)->insideImie) ((B*)ctx)->v.push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]){ xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; handler.endelement = Fun::endF; handler.characters = Fun::charactersF; B * b = new B(); xmlsaxuserparsefile(&handler, b, " for(int i =0; i<b->v.size(); ++i) std::cout<< b->v[i] << std::endl; delete b; return 0; } 52

53 Odczyt wartości elementów tekstowych class B{ public: bool insideimie; std::vector<std::string> v; B() { v = std::vector<std::string>(0); } }; class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=true; } static void endf (void * ctx, const xmlchar * name) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=false; } static void charactersf (void * ctx, const xmlchar * ch, int len) { if (((B*)ctx)->insideImie) ((B*)ctx)->v.push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]){ xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; handler.endelement = Fun::endF; handler.characters = Fun::charactersF; B * b = new B(); xmlsaxuserparsefile(&handler, b, " for(int i =0; i<b->v.size(); ++i) std::cout<< b->v[i] << std::endl; delete b; return 0; } 53

54 Odczyt wartości elementów tekstowych class B{ public: bool insideimie; std::vector<std::string> v; B() { v = std::vector<std::string>(0); } }; class Fun{ public: static void startf (void * ctx, const xmlchar * name, const xmlchar ** atts) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=true; } static void endf (void * ctx, const xmlchar * name) { if (xmlstrcmp(name, BAD_CAST"imie") == 0) ((B*)ctx)->insideImie=false; } static void charactersf (void * ctx, const xmlchar * ch, int len) { if (((B*)ctx)->insideImie) ((B*)ctx)->v.push_back(std::string((char*)ch, len)); } }; int main (int argc, const char * argv[]){ xmlsaxhandler handler = {0}; handler.startelement = Fun::startF; handler.endelement = Fun::endF; handler.characters = Fun::charactersF; B * b = new B(); xmlsaxuserparsefile(&handler, b, " for(int i =0; i<b->v.size(); ++i) std::cout<< b->v[i] << std::endl; delete b; return 0; } 54

55 libxml2 Podstawowe API - bazujące na drzewie DOM - wynik parsowania w całości ładowany do pamięci; proste w użyciu, ale nie pozwala na przetwarzanie bardzo dużych dokumentów. API sterowane zdarzeniami - skomplikowane w użyciu, nie jest w pełni formalnie zdefiniowane dla języka C, nie pozwala na walidację dokumentu XML XmlTextReader - łatwy i wydajny! 55

56 XmlTextReader XmlTextReader API zapewnia znacznie prostszy model programowania. XmlTextReader zachowuje się jak kursor, który przesuwa się do przodu po strumieniu dokumentu zatrzymując się na każdym węźle, który napotka. Użytkownik kontroluje przebieg procesu parsowania i wywołuje funkcję xmltextreaderread() w celu przetworzenia kolejnego węzła w kolejności w jakiej występują w dokumencie. 56

57 Przejście przez drzewo dokumentu XmlTextReader API pozwala na przejście przez drzewo tylko do przodu. Przetwarzanie XMLa odbywa się w następujących krokach: przygotowanie kontekstu czytnika (kursora) działającego na określonym wejściu, iteracyjne (w pętli) przejście po wszystkich węzłach w dokumencie i odczytanie ich za pomocą funkcji xmltextreaderread(), zwolnienie kontekstu. 57

58 Przetwarzanie drzewa XmlTextReader #include <libxml/xmlreader.h> void processnode(xmltextreaderptr reader) { /*... */ } int streamfile(char *filename) { xmltextreaderptr reader = xmlnewtextreaderfilename(filename); } if (reader!= NULL) { int ret = xmltextreaderread(reader); while (ret == 1) { processnode(reader); ret = xmltextreaderread(reader); } xmlfreetextreader(reader); if (ret!= 0) printf("%s : failed to parse\n", filename); } else printf("unable to open %s\n", filename); 58

59 Tworzenie kontekstu i zwalnianie pamięci xmltextreaderptr xmlnewtextreaderfilename (const char * URI) utworzenie kontekstu dla dokumentu XML przekazanego jako adres URI xmltextreaderptr xmlreaderfordoc (const xmlchar * cur, const char * URL, const char * encoding, int options) utworzenie kontekstu dla dokumentu XML przekazanego ciąg znaków xmltextreaderptr xmlnewtextreader (xmlparserinputbufferptr input, const char * URI) utworzenie kontekstu dla dokumentu XML przekazanego jako bufor wejściowy void xmlfreetextreader (xmltextreaderptr reader) zwolnienie pamięci wykorzystywanej przez kontekst parsera 59

60 Dostęp do węzła i odczyt jego wartości int xmltextreaderread (xmltextreaderptr reader) Przesuwa pozycję kursora do następnego węzła w strumieniu. Wartość zwracana: 1 - poprawny odczyt 0 - nie ma więcej węzłów -1 - wystąpienie błędu xmlchar * xmltextreaderreadstring (xmltextreaderptr reader) odczyt wartości tekstowej danego węzła 60

61 Dostęp do informacji dotyczących bieżącego węzła Dostęp do właściwości węzła możliwy jest za pomocą funkcji przyjmujących wskaźnik na xmltextreaderptr. Jeśli typem zwracanym przez funkcję jest ciąg znaków xmlchar *, pamięć musi zostać zwolniona za pomocą xmlfree(). xmlchar * name = xmltextreadername(reader); 61

62 Typ węzła int xmltextreadernodetype (xmltextreaderptr reader) 1 - początek elementu (znacznik otwierający), 15 - koniec elementy (znacznik zamykający), 2 - atrybut, 3 - węzeł tekstowy, 4 - sekcja CData, 5 - referencja do encji, 6 - deklaracja encji, 7 - instrukcja przetwarzania, 8 - komentarz, 9 - węzeł dokumentu, 10 - węzeł typu dokumentu DTD. 62

63 Nazwa węzła xmlchar * xmltextreadername (xmltextreaderptr reader) const xmlchar * xmltextreaderconstname (xmltextreaderptr reader) kwalifikowana nazwa węzła xmlchar * xmltextreaderlocalname (xmltextreaderptr reader) const xmlchar * xmltextreaderconstlocalname (xmltextreaderptr reader) lokalna nazwa węzła Różnica pomiędzy funkcjami Const i nie Const??? 63

64 Nazwa węzła xmlchar * xmltextreadername (xmltextreaderptr reader) const xmlchar * xmltextreaderconstname (xmltextreaderptr reader) kwalifikowana nazwa węzła xmlchar * xmltextreaderlocalname (xmltextreaderptr reader) const xmlchar * xmltextreaderconstlocalname (xmltextreaderptr reader) lokalna nazwa węzła W przypadku funkcji Const pamięć jest zwalniana przez parser, w przeciwnym przypadku musi zostać zwolniona przez użytkownika. 64

65 Odczyt informacji o węźle int xmltextreaderhasattributes (xmltextreaderptr reader) sprawdzenie czy węzeł ma atrybuty int xmltextreaderhasvalue (xmltextreaderptr reader) sprawdzenie czy węzeł ma wartość int xmltextreaderisemptyelement (xmltextreaderptr reader) sprawdzenie czy węzeł jest węzłem pustym Wartość zwracana: 1 - TAK 0 - NIE -1 - błąd 65

66 Odczyt wartości węzła xmlchar * xmltextreadervalue (xmltextreaderptr reader) const xmlchar * xmltextreaderconstvalue (xmltextreaderptr reader) zwraca wartość węzła jako ciąg znaków będący kopią lub jako stały ciąg znaków. 66

67 Odczyt atrybutów int xmltextreaderattributecount (xmltextreaderptr reader) zwraca liczbę atrybutów xmlchar * xmltextreadergetattribute (xmltextreaderptr reader, const xmlchar * name) zwraca wartość atrybutu o podanej nazwie xmlchar * xmltextreadergetattributeno (xmltextreaderptr reader, int no) zwraca wartość atrybutu numer no 67

68 Odczyt atrybutów int xmltextreadermovetofirstattribute (xmltextreaderptr reader) przejście do pierwszego atrybutu int xmltextreadermovetonextattribute (xmltextreaderptr reader) przejście do następnego atrybutu int xmltextreadermovetoattribute (xmltextreaderptr reader, const xmlchar * name) przejście do atrybutu o nazwie name int xmltextreadermovetoattributeno (xmltextreaderptr reader, int no) przejście do atrybutu o numerze no int xmltextreadermovetoelement (xmltextreaderptr reader) przesuniecie kursora do węzła elementu Zwracana wartość: 1 - OK, 0 - jeśli nie znaleziono węzła, -1 - w przypadku błędu. 68

69 xmltextreader + DOM xmlnodeptr xmltextreaderexpand (xmltextreaderptr reader) Odczytuje bieżący węzeł i całe poddrzewo tego węzła. Zwraca wskaźnik na xmlnode lub NULL jeśli wystąpił błąd Drzewo jest dostępne do następnego wywołanie xmltextreaderread() 69

70 Funkcje zwracające obiekty const cout << xmltextreadername(reader) << endl; 70

71 Funkcje zwracające obiekty const cout << xmltextreadername(reader) << endl; Wyciek pamięci! 71

72 Funkcje zwracające obiekty const xmlchar * name = xmltextreadername(reader); cout << name << endl; xmlfree(name); lub: cout<<xmltextreaderconstname(reader)<<endl; 72

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Wykorzystywanie parsera DOM w programach Java i PL/SQL Wykorzystywanie parsera DOM w programach Java i PL/SQL Maciej Zakrzewicz mzakrz@cs.put.poznan.pl http://www.cs.put.poznan.pl/~mzakrz/ Parser DOM Aplikacja DOM API Parser DOM Dokument XML Drzewo DOM Parser

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML

Perl a XML. Narzędzia informatyczne w językoznawstwie. Generowanie danych XML - Przykład. Generowanie danych XML. Perl - Przetwarzanie XML Perl a XML Narzędzia informatyczne w językoznawstwie Perl - Przetwarzanie XML Marcin Junczys-Dowmunt junczys@amu.edu.pl Zakład Logiki Stosowanej http://www.logic.amu.edu.pl 31 modułów w CPAN zawiera w

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p. Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni Wykład 6 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Wskaźnik do pliku Dostęp do pliku: zapis, odczyt,

Bardziej szczegółowo

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak: Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji

Bardziej szczegółowo

Podstawy programowania skrót z wykładów:

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać

Bardziej szczegółowo

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja

Bardziej szczegółowo

Wskaźniki. Informatyka

Wskaźniki. Informatyka Materiały Wskaźniki Informatyka Wskaźnik z punktu widzenia programisty jest grupą komórek pamięci (rozmiar wskaźnika zależy od architektury procesora, najczęściej są to dwa lub cztery bajty ), które mogą

Bardziej szczegółowo

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p. Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()

Bardziej szczegółowo

Struktury. Przykład W8_1

Struktury. Przykład W8_1 Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla

Bardziej szczegółowo

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki W językach niskopoziomowych błędy zgłaszane były przez zwracanie odpowiedniego statusu (liczby) W C main() zwraca int żeby można było określić

Bardziej szczegółowo

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018 Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy

Bardziej szczegółowo

DYNAMICZNE PRZYDZIELANIE PAMIECI

DYNAMICZNE PRZYDZIELANIE PAMIECI DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

XML i nowoczesne technologie zarządzania treścią 2007/08

XML i nowoczesne technologie zarządzania treścią 2007/08 Zadanie 3 Poprawkowe XML i nowoczesne technologie zarządzania treścią 2007/08 Wprowadzenie Należy napisać program w Javie, który czytając w trybie SAX plik z listą operacji, wykonuje zadane operacje na

Bardziej szczegółowo

akademia androida Składowanie danych część VI

akademia androida Składowanie danych część VI akademia androida Składowanie danych część VI agenda 1. SharedPreferences. 2. Pamięć wewnętrzna i karta SD. 3. Pliki w katalogach /res/raw i /res/xml. 4. Baza danych SQLite. 5. Zadanie. 1. SharedPreferences.

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij.

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Języki programowania obiektowego Nieobiektowe elementy języka C++

Języki programowania obiektowego Nieobiektowe elementy języka C++ Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków

Bardziej szczegółowo

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec PROE wykład 2 operacje na wskaźnikach dr inż. Jacek Naruniec Zmienne automatyczne i dynamiczne Zmienne automatyczne: dotyczą kontekstu, po jego opuszczeniu są usuwane, łatwiejsze w zarządzaniu od zmiennych

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

INFORMATYKA Studia Niestacjonarne Elektrotechnika

INFORMATYKA Studia Niestacjonarne Elektrotechnika INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl

Bardziej szczegółowo

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Podstawy programowania Wykład: 9 Łańcuchy znaków 1 dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD Tablica znaków w językach C i C++ (oraz pochodnych) łańcuch znaków przechowywany jest jako

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17 Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 6 1 SPECYFIKATOR static Specyfikator static: Specyfikator ten powoduje, że zmienna lokalna definiowana w obrębie danej funkcji nie jest niszczona

Bardziej szczegółowo

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula Programowanie i struktury danych Wykład 4 Dr Piotr ybula Typ wska ź nikowy int* pointer; //wskaźnik do zmiennych typu int pozwala na dostęp do dowolnego miejsca pamięci (zmienne

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi

Bardziej szczegółowo

29. Poprawność składniowa i strukturalna dokumentu XML

29. Poprawność składniowa i strukturalna dokumentu XML 29. i strukturalna dokumentu XML 13 października 2015 1 2 Poprawny składniowo dokument XML powinien być tworzony zgodnie z poniżej przedstawionymi zasadami. Deklaracja XML Powinien zawierać deklarację

Bardziej szczegółowo

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane Extensible Markup Language (XML) Wrocław, 15.03.2019 - Java - technologie zaawansowane Wprowadzenie XML jest językiem znaczników (ang. markup language) używanym do definiowania zbioru zasad rozmieszczenia

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegółowo

Część 4 życie programu

Część 4 życie programu 1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część

Bardziej szczegółowo

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Biblioteka standardowa - operacje wejścia/wyjścia

Biblioteka standardowa - operacje wejścia/wyjścia Biblioteka standardowa - operacje wejścia/wyjścia Przemysław Gawroński D-10, p. 234 Wykład 6 15 stycznia 2019 (Wykład 6) Biblioteka standardowa - operacje wejścia/wyjścia 15 stycznia 2019 1 / 14 Outline

Bardziej szczegółowo

Programowanie w językach

Programowanie w językach Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

1 Atrybuty i metody klasowe

1 Atrybuty i metody klasowe 1 Atrybuty i metody klasowe Składowe klasowe (statyczne) Każdy obiekt klasy posiada własny zestaw atrybutów. Metody używają atrybutów odpowiedniego obiektu. Czasem potrzeba atrybutów wspólnych dla wszystkich

Bardziej szczegółowo

Operacje wejścia/wyjścia (odsłona druga) - pliki

Operacje wejścia/wyjścia (odsłona druga) - pliki Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model

SAX i DOM wykorzystanie XML-a we własnych aplikacjach. Simple API for XML Parsing Document Object Model SAX i DOM wykorzystanie XML-a we własnych aplikacjach Simple API for XML Parsing Document Object Model 1 SAX - wstęp Definicja: standardowy interfejs do parsowania plików XML oparty na modelu zdarzeniowym

Bardziej szczegółowo

Zmienne, stałe i operatory

Zmienne, stałe i operatory Zmienne, stałe i operatory Przemysław Gawroński D-10, p. 234 Wykład 2 4 marca 2019 (Wykład 2) Zmienne, stałe i operatory 4 marca 2019 1 / 21 Outline 1 Zmienne 2 Stałe 3 Operatory (Wykład 2) Zmienne, stałe

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1

WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1 WYKŁAD 3 XML DOM XML DOCUMENT OBJECT MODEL CZĘŚĆ 1 XML DOM (ang. XML Document Object Model Obiektowy Model Dokumentu XML) Inaczej drzewo DOM to hierarchiczny, obiektowy model dokumentu XML. DOM to platforma

Bardziej szczegółowo

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński Języki programowania Część druga Przetwarzanie tablic znaków Autorzy Tomasz Xięski Roman Simiński Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim

Bardziej szczegółowo

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia. Wejście i wyjście. Typy, operatory, wyrażenia Zmienna: [] [ '[' ']' ] ['=' ]; Zmienna to fragment pamięci o określonym

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 12

Programowanie obiektowe w C++ Wykład 12 Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

Listy powiązane zorientowane obiektowo

Listy powiązane zorientowane obiektowo Listy powiązane zorientowane obiektowo Aby zilustrować potęgę polimorfizmu, przeanalizujmy zorientowaną obiektowo listę powiązaną. Jak zapewne wiesz, lista powiązana jest strukturą danych, zaprojektowaną

Bardziej szczegółowo

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21

Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Podstawy programowania

Podstawy programowania Podstawy programowania Część siódma Przetwarzanie tablic znaków Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót treści wykładu,

Bardziej szczegółowo

Tablice, funkcje - wprowadzenie

Tablice, funkcje - wprowadzenie Tablice, funkcje - wprowadzenie Przemysław Gawroński D-10, p. 234 Wykład 5 25 marca 2019 (Wykład 5) Tablice, funkcje - wprowadzenie 25 marca 2019 1 / 12 Outline 1 Tablice jednowymiarowe 2 Funkcje (Wykład

Bardziej szczegółowo

Smarty PHP. Leksykon kieszonkowy

Smarty PHP. Leksykon kieszonkowy IDZ DO PRZYK ADOWY ROZDZIA SPIS TREœCI KATALOG KSI EK KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG Smarty PHP. Leksykon kieszonkowy Autor: Daniel Bargie³ ISBN: 83-246-0676-9 Format: B6, stron: 112 TWÓJ KOSZYK

Bardziej szczegółowo

XML w.net. Dominik Baś nr alb. 160345. Wrocław, 29 maja 2007

XML w.net. Dominik Baś nr alb. 160345. Wrocław, 29 maja 2007 XML w.net Dominik Baś nr alb. 160345 Wrocław, 29 maja 2007 Przetwarzanie dokumentów XML API: SAX Simple Api for XML - przetwarzanie strumieniowe DOM - Document Object Model - odwzorowanie dokumentu XML

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska Bogdan Kreczmer bogdan.kreczmer@pwr.edu.pl Katedra Cybernetyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu dotyczącego programowania

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

Programowanie w Ruby

Programowanie w Ruby Programowanie w Ruby Wykład 3 Marcin Młotkowski 22 października 2018 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie w Ruby 70 / 432 Z poprzedniego wykładu String to ciąg bajtów zwykle reprezentujących

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

Bardziej szczegółowo

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h] 1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 28 1. Tablice w C# Indeksowane od zera

Bardziej szczegółowo

Obsługa wyjątków. Język C++ WW12

Obsługa wyjątków. Język C++ WW12 Obsługa wyjątków Pozwala zarządzać błędami wykonania w uporządkowany sposób. Umożliwia automatyczne wywołanie części kodu, funkcji, metod klas, który trzeba wykonać przy powstaniu błędów. try //blok try

Bardziej szczegółowo

Wykład 3 Składnia języka C# (cz. 2)

Wykład 3 Składnia języka C# (cz. 2) Wizualne systemy programowania Wykład 3 Składnia języka C# (cz. 2) 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Wizualne systemy programowania Metody 2 Metody W C# nie jest

Bardziej szczegółowo

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4 Wykład 4 p. 1/1 Oprogramowanie i wykorzystanie stacji roboczych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Obsługa sieci Wykład

Bardziej szczegółowo

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

// Liczy srednie w wierszach i kolumnach tablicy dwuwymiarowej // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib. Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy

Bardziej szczegółowo

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory

Dzisiejszy wykład. Klasa string. wersja prosta wersja ze zliczaniem odwołań. Wyjątki Specyfikator volatile Semafory Dzisiejszy wykład Klasa string wersja prosta wersja ze zliczaniem odwołań Wyjątki Specyfikator volatile Semafory 1 Klasa string Przetwarzanie tekstów jest powszechną dziedziną zastosowań komputerów W języku

Bardziej szczegółowo

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 5 Katarzyna Grzelak 26 marca 2018 9 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40 Pojęcia z poprzedniego wykładu Podział programu na funkcje podział na niezależne

Bardziej szczegółowo

Funkcje zawarte w bibliotece < io.h >

Funkcje zawarte w bibliotece < io.h > PLIKOWE OPERACJE WEJŚCIA - WYJŚCIA Język C/C++ nie ma wbudowanych żadnych instrukcji umożliwiających wykonywanie operacji wejścia-wyjścia! Służą do tego funkcje biblioteczne. Funkcje zawarte w bibliotece

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 1

Programowanie obiektowe w C++ Wykład 1 Programowanie obiektowe w C++ Wykład 1 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) POwCPP 1 / 24 Literatura Prata Stephen, Szkoła programowania. Język C++. Wydawnictwo Helion,

Bardziej szczegółowo

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 21 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24 Programowanie w C++ Wykład 11 Katarzyna Grzelak 21 maja 2018 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 24 Strumienie Strumień bajtów płynacy od źródła do ujścia: 1 standardowe strumienie wejściowe

Bardziej szczegółowo

XML extensible Markup Language. Paweł Chodkiewicz

XML extensible Markup Language. Paweł Chodkiewicz XML extensible Markup Language Paweł Chodkiewicz XML - extensible Markup Language Uniwersalny język znaczników przeznaczony do reprezentowania różnych danych w strukturalizowany sposób. Historia GML Projekt

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Rodzina protokołów TCP/IP. Aplikacja: ipconfig. Rodzina protokołów TCP/IP. Aplikacja: ipconfig. dr Zbigniew Lipiński Instytut Matematyki i Informatyki ul. Oleska 48 50-204 Opole zlipinski@math.uni.opole.pl Specyfikacja struktury FIXED_INFO Nazwa struktury:

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML Wyrażenia regularne c:\> dir *.exe $ rm *.tmp Wyrażenia regularne 'alamakota' '(hop!)*' { '',

Bardziej szczegółowo

Techniki Programowania wskaźniki 2

Techniki Programowania wskaźniki 2 Techniki Programowania wskaźniki 2 Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Jeżeli wskaźnik pokazuje na element

Bardziej szczegółowo