Piotr P.

Piotr P. Inżynier serwisu,
Hexagon Metrology
Sp. Z o.o.

Temat: Potrzebna Pomoc w projekcie c++

Witam w szkole na zaliczenie przedmiotu muszę napisać program "Terminarz",który będzie miał możliwość :

1.Dodawania i usuwania danych z pliku txt
np. Jan Kowalski
tele 548-845-845
mejl er@wp.pl
2.Oraz wyszukiwanie po imieniu lub nazwisku

Oczywiście w console application nie chodzi mi tu o to żeby ktoś mi to zrobił bo sam chce się tego nauczyć tylko mnie nakierował od czego zacząć albo dał jakiś przykład.
Jerzy M.

Jerzy M. C#/JavaScript
Developer

Temat: Potrzebna Pomoc w projekcie c++

Ja bym to jednak wciskał w XML, ale to ciut trudniejsze by było. W każdym razie, zapoznaj się z std::vector oraz obsługą plików. Dalej to nie jest takie trudne, wczytywanie z pliku do kontenera (std::vector) tam już masz funkcje wyszukujące jakby co. Dodanie/usunięcie i zapisanie do pliku.
Tomasz M.

Tomasz M. never go full
retard!

Temat: Potrzebna Pomoc w projekcie c++

do trzymania danych
ew. http://www.s11n.net/
lub
http://www.boost.org/doc/libs/1_42_0/libs/serializatio...

choć pewnie chodzi o uczelniany `helou world`

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Piotr Pietraszek:
Witam w szkole na zaliczenie przedmiotu muszę napisać program "Terminarz",który będzie miał możliwość :

1.Dodawania i usuwania danych z pliku txt
np. Jan Kowalski
tele 548-845-845
mejl er@wp.pl
2.Oraz wyszukiwanie po imieniu lub nazwisku

Oczywiście w console application nie chodzi mi tu o to żeby ktoś mi to zrobił bo sam chce się tego nauczyć tylko mnie nakierował od czego zacząć albo dał jakiś przykład.

Wszędzie te cholerne vektory lol co wy wszyscy czytacie jedną i tą samą książkę ;D (helion rządzi ;>)
Zapoznaj się z mapMarcin Er edytował(a) ten post dnia 02.09.10 o godzinie 14:55

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Jak ma wyszukiwać to pewnie, że lepiej <map> :D
Leszek Hanusiak

Leszek Hanusiak Software Developer

Temat: Potrzebna Pomoc w projekcie c++

Jeśli możesz używać std to:

1. Do odczytu/zapisu pliku - fstream (istream/ostream) i sstream(do zabawy z stingami:) )

2. STL -> zamiast vector`a do przechowywania danych proponuję deque, liste.
Zanim zastosujesz mapę poczytaj. Wyszukujesz po nazwisku lub imieniu!!
(gdybyś wyszukiwał tylko po jednym z nich...).

algorytmy dla (deque, vector)
find_if - wyszukiwania liniowe.
(do napisania dwa obiekty funkcyjne jeden do wyszukiwania po
nazwisku drugi po imieniu)
sort - sortowanie kontenerów(deque, vector, itd)
STL ma masę stuff`u typu replace, copy itd, działających na stumieniach.

3. Poczytaj o tokenizerach.

Jeśli, potrzebujesz czegoś bardziej wyrafinowanego, możesz do biblioteki standardowej zaprzęgnąć boost`a.

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Leszek Hanusiak:
Jeśli możesz używać std to:

1. Do odczytu/zapisu pliku - fstream (istream/ostream) i sstream(do zabawy z stingami:) )

2. STL -> zamiast vector`a do przechowywania danych proponuję deque, liste.
Zanim zastosujesz mapę poczytaj. Wyszukujesz po nazwisku lub imieniu!!
(gdybyś wyszukiwał tylko po jednym z nich...).

A kto ci broni zrobić dwie mapy? W tym przypadku to będą multimapy.
Jakub L.

Jakub L. Programista

Temat: Potrzebna Pomoc w projekcie c++

Lista ssie tak samo jak deque, vector i wszystkie kontenery liniowe, a może nawet bardziej, bo na wektorze to można zastosować wyszukiwanie logarytmiczne, a lista jest do bólu sekwencyjna.

Zrób sobie strukturę opisującą to co tam masz w tej bazie trzymać, jakąś metodę do serializacji i deserializacji, jak ci wygodnie i dwa sety wskaźników na te struktury z odpowiednimi komparatorami, jeden po nazwisku, imieniu i czymś jeszcze, chociażby adresie struktury, drugi po imieniu, nazwisku i tym samym czymś jeszcze.
Po stworzeniu rekordu wkładasz do obu, szukasz w tym, który pasuje, przy kasowaniu wywalasz także z obu.

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Leszek zwrócił uwagę na istotną rzecz: wyszukiwanie ma być albo po imieniu albo po nazwisku. W związku z tym jedna multimapa nie wystarczy.
Możliwości jest dużo: posortowane listy, wektory, nieposortowane listy, wektory + mapowanie imienia/nazwiska na indeks. Do koloru do wyboru. Można zaimplementować własną tablicę haszującą.
Jeszcze bardziej ambitne rozwiązanie uwzględni sytuację, że plik tekstowy nie mieści się w pamięci, wtedy można machnąć jakąś strukturę drzewiastą na dysku i po niej się poruszać.
Do koloru do wyboru :) Pole do popisu jest :)

A co do parsowania pliku tekstowego to ja staram się używać jakiegoś parsera typu Boost::Spirit lub czegoś szybszego typu Flex/Yacc. Nigdy nie lubiłem rzeźbić parsera ręcznie bo zawsze pozostał "jeszcze jeden nie obsłużony błąd" a tak mamy szybkie, odporne na błędy składniowe parsowanie.
I co ważne wiemy co się dzieje jak spojrzymy w parser za rok :P ;)
Leszek Hanusiak

Leszek Hanusiak Software Developer

Temat: Potrzebna Pomoc w projekcie c++

Zgadzam się z Michałem.
Adam -> oczywiście ze może. A jak będzie miał szukać jeszcze po telefonie, adresie email to też mu doradzisz dodać jeszcze dwie mapy ? w sumie 4 ?
Gość chce się czegoś nauczyć, prawdopodobnie jest początkujący, po naszym poradach to mu się odniechce programowania.... Proponuje żeby się określił co może użyć czego nie, jaka jest jego wiedza w temacie STL + BOOST. Może nie może żadnych "gotowców" użyć ? Może musi skorzystać z printf` , sprintf`a, a kontener do przechowywania/sortowania/wyszukiwania ma napisać od zera.

Należy dodać że biblioteka boost nie jest w standardzie. Więc należy ja ściągnąć rozpakować i dołączyć do projektu(nie wiem czy możesz tak).
Podobny problem jest z parserami typu lex, yacc, bison.
Moim zdaniem: Jak chcesz się czegoś nauczyć i nie znasz STL to odpuść sobie na początek boost`a. Naucz się wpierw std + STL.

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Leszek Hanusiak:
Podobny problem jest z parserami typu lex, yacc, bison.

Przy okazji można się nauczyć, że wrzucenie do źródeł wygenerowanego parsera przez (f)lexa, yacca, bisona może pogorszyć czytelność kodu :D
Leszek Hanusiak

Leszek Hanusiak Software Developer

Temat: Potrzebna Pomoc w projekcie c++

Jakub L.:
Lista ssie tak samo jak deque, vector i wszystkie kontenery liniowe, a może nawet bardziej, bo na wektorze to można zastosować wyszukiwanie logarytmiczne, a lista jest do bólu sekwencyjna.

Zrób sobie strukturę opisującą to co tam masz w tej bazie trzymać, jakąś metodę do serializacji i deserializacji, jak ci wygodnie i dwa sety wskaźników na te struktury z odpowiednimi komparatorami, jeden po nazwisku, imieniu i czymś jeszcze, chociażby adresie struktury, drugi po imieniu, nazwisku i tym samym czymś jeszcze.
Po stworzeniu rekordu wkładasz do obu, szukasz w tym, który pasuje, przy kasowaniu wywalasz także z obu.

Zarówno po vector, deque i liscie można stosować wyszukiwanie logarytmiczne po wcześniejszym posortowaniu ich(zresztą obrzyga assertem jak się tego nie zrobi, lista ma własnego sorta i finda). Do innych można upper_bound, lower_bound, ale nie globalnego finda(jest liniowy).

Wektor -> Jak nie znamy rozmiaru, realokacja jest tu często wołana.

Ale może się mylę :)

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Michał Rotkiewicz:
Można zaimplementować własną tablicę haszującą.

Po co wynajdować koło? :)
Jakub L.

Jakub L. Programista

Temat: Potrzebna Pomoc w projekcie c++

Leszek Hanusiak:
Jakub L.:
Lista ssie tak samo jak deque, vector i wszystkie kontenery liniowe, a może nawet bardziej, bo na wektorze to można zastosować wyszukiwanie logarytmiczne, a lista jest do bólu sekwencyjna.

Zarówno po vector, deque i liscie można stosować wyszukiwanie logarytmiczne po wcześniejszym posortowaniu ich(zresztą obrzyga assertem jak się tego nie zrobi, lista ma własnego sorta i finda). Do innych można upper_bound, lower_bound, ale nie globalnego finda(jest liniowy).

Wektor -> Jak nie znamy rozmiaru, realokacja jest tu często wołana.

Ale może się mylę :)

Zależy pewnie od implementacji, jak powiększa się rozmiar 2x to nie tak często.

Jak wyszukasz logarytmicznie po strukturze, w której nie możesz dostać się do żądanego elementu inaczej niż przechodząc wszystkie leżące od któregoś końca danej struktury? Tak jest w liście w implementacji dla g++ 4.4.

W przypadku wszystkich forsowanych liniowych struktur programista musi i tak je posortować żeby móc efektywnie wyszukiwać podczas gdy w secie (i mapie) elementy posortowane są zaraz po włożeniu i wyszukiwanie jest logarytmiczne z definicji, bo to drzewa, cała sztuka to napisać komparator tak aby spełniał warunki specyfikacji STLa.

Pewnie że jak trzeba coś władować do kontenera, to wektor zadziała, ale tyle kontenerów w STLu jest nie bez przyczyny - wektor nie zawsze jest najlepszy.

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Rozwiązanie z dwiema multimapami jest dużo sensowniejsze niż użycie struktury liniowej (vector, list, deque).

A najlepiej to sobie bazkę postaw na mysqlu i użyj zwykłego SELECTa z LIKE'iem. ;)

Ach jak ja uwielbiam zadania niedopasowane do technologii, na zasadzie sztuki dla sztuki (vide zaliczenie uczelniane itp.) ;P

Implementowanie własnej bazy danych w C++ jest moim zdaniem zadaniem o wątpliwym walorze dydaktycznym.Adam Michalski edytował(a) ten post dnia 02.09.10 o godzinie 23:58

Temat: Potrzebna Pomoc w projekcie c++

To może niech od razu napisze jakiegoś NoSQL'a? :P

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Adam Michalski:
Michał Rotkiewicz:
Można zaimplementować własną tablicę haszującą.

Po co wynajdować koło? :)

Bo standardowo tego koła nie ma ?

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Adam Michalski:
Rozwiązanie z dwiema multimapami jest dużo sensowniejsze niż użycie struktury liniowej (vector, list, deque).

A najlepiej to sobie bazkę postaw na mysqlu i użyj zwykłego SELECTa z LIKE'iem. ;)

Ach jak ja uwielbiam zadania niedopasowane do technologii, na zasadzie sztuki dla sztuki (vide zaliczenie uczelniane itp.) ;P

Implementowanie własnej bazy danych w C++ jest moim zdaniem zadaniem o wątpliwym walorze dydaktycznym.

Jeśli już miałby wykorzystywać jakiegoś SQL-a to chyba w tym wypadku SQLite...

Ale z reguły "na zaliczenie" wymaga się programów typu "zrób to sam" -
czyli STL to szczyt. LIKE można zasymulować przy pomocy Regular Expressions:
a) TR1 - http://bit.ly/cr4HRl
b) Boost.Xpressive - http://bit.ly/d4hwPe
c) inne przyklady: http://bit.ly/bi9O5lPiotr Likus edytował(a) ten post dnia 03.09.10 o godzinie 09:26
Jakub L.

Jakub L. Programista

Temat: Potrzebna Pomoc w projekcie c++

No akurat ja miałem coś w tym stylu na produkcji - mapy obiektów których dane ładowało się z plików, operowało na nich i zapominało bo program działał może do godziny.

konto usunięte

Temat: Potrzebna Pomoc w projekcie c++

Piotr Likus:
LIKE można zasymulować przy pomocy Regular Expressions:
a) TR1 - http://bit.ly/cr4HRl
b) Boost.Xpressive - http://bit.ly/d4hwPe
c) inne przyklady: http://bit.ly/bi9O5l

Słusznie. Dopiszę jeszcze tylko, że PCRE (http://www.daemon.de/PCRE) wcale nie jest złym wyborem. Zwłaszcza, że to ujednolicona składania z wieloma innymi narzędziami jest niekwestionowaną zaletą.

Następna dyskusja:

potrzebna pomoc dla student...




Wyślij zaproszenie do