libxml2 parser DOM dla C++ czwartek, 8 grudnia 11
|
|
- Seweryn Stefański
- 8 lat temu
- Przeglądów:
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 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ółowoZasady 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ółowoZaawansowane 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ółowoPerl 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ółowoJę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ółowo1. 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ółowoJava. 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ółowoProgramowanie 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 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ółowoPodstawy 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ółowoWykł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ółowoProgramowanie 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ółowoWykł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ółowoTechniki 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ółowoWskaź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ółowoWstę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ółowoStruktury. 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ółowoDariusz 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ółowoInformatyka 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ółowoDYNAMICZNE 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ółowoKLASA 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ółowoXML 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ółowoakademia 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ółowoProjektowanie 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ółowoIMIĘ 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ółowoKurs 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ółowoStrona 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ółowoJę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ółowoPROE 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ółowoutworz 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ółowoINFORMATYKA 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 Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych
Bardziej szczegółowoSzablony 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ółowoMETODY 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ółowoPodstawy 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ółowoSkł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ółowoWskaź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ółowoJĘ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ółowoProgramowanie 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ółowoPodstawy 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ółowoKLASA 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ółowoProgramowanie 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ółowo29. 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ółowoExtensible 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ółowoJę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ółowoCzęść 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ółowoWskaź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ółowoTemat: 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ółowoProgramowanie 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ółowoW2 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ółowoBiblioteka 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ółowoProgramowanie 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ółowoWstę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ółowo1 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ółowoOperacje 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ółowoPodstawowe 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ółowoSAX 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ółowoZmienne, 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ółowoPliki. 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ółowoOpis: 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ółowoKurs 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ółowoProgramowanie 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ółowoWYKŁ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ółowoJę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ółowoUwagi 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ółowoJę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ółowoProgramowanie 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ółowoUML 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ółowoListy 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ółowoProgramowanie 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ółowoJę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ółowoPodstawy 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ółowoPodstawy 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ółowoTablice, 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ółowoSmarty 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ółowoXML 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ółowoProgramowanie 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ółowoWyją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ółowoZmienne 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ółowoWykł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ółowoI - 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoLaboratorium 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ółowoProgramowanie 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ółowoObsł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ółowoWykł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ółowoOprogramowanie 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.
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ółowoDzisiejszy 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ółowoProgramowanie 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ółowoFunkcje 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoXML 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ółowoProgramowanie 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ółowoRodzina 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ółowoKurs 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ółowoKurs 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ółowoTechniki 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