|
|
Strona 1 z 1
|
[ Posty: 12 ] |
|
Sortowanie w strukturze record
Autor |
Wiadomość |
wojtek
Rejestracja: 2010-02-10, 21:24 Posty: 260 Pomógł: 4
|
Sortowanie w strukturze record
Witam,
Czy można w jakis sposób posortować dane w strukturze record?
Chodzi mi o to, że chciałbym z pojedynczych dokumentów (np WZ) wystawić zbiorcze dokumenty WZ na kontrahenta. Informacje o dokumentach i pozycjach zbieram w strukturze record, ale ostatecznie chciałbym je posortować po kodzie kontrahenta, tak by za pomocą Bioreca wystawić w ostatnim etapie dokumenty WZ skumulowane na kontrahenta. Dokumenty WZ "źródłowe" muszą być posortowane na liście po numerze bo działa również funkcja kasująca która musi dokumenty kasować od ostatniego w serii.
|
2013-10-11, 11:51 |
|
|
Autor |
Wiadomość |
Mix-soft.pl
|
|
|
bongos
Rejestracja: 2013-09-05, 11:53 Posty: 126 Pomógł: 8
|
Re: Sortowanie w strukturze record
jeżeli masz 'tablicę elementów typu record' to najprościej będzie użyć bąbelkowego sortowania chyba, że musisz mieć mega-wydajność i masz dużą ilość danych to pokombinuj trudniejsze algorytmy
|
2013-10-11, 12:11 |
|
|
wojtek
Rejestracja: 2010-02-10, 21:24 Posty: 260 Pomógł: 4
|
Re: Sortowanie w strukturze record
A co to jest bąbelkowe sortowanie? Masz jakiś przykład?
|
2013-10-11, 12:47 |
|
|
rafal
Ekspert
Rejestracja: 2007-11-16, 15:08 Posty: 4000 Pomógł: 448
|
Re: Sortowanie w strukturze record
(1)
Kod: record rWZ string kod [40] long id endrec
rWz wz(3) int i
wz(1).kod = "WZ/003/2013" wz(1).id = 65545
wz(2).kod = "WZ/001/2013" wz(2).id = 65546
wz(3).kod = "WZ/002/2013" wz(3).id = 65547
// wypełnienie mapy sortującej (indeksu)
mapValue mvSort mvSort.Type( long )
for i = 1 to i > Size( wz ) mvSort.Set( wz(i).kod, i ) // sortowanie po kod // mvSort.Set( (using "%l",wz(i).id), i ) // sortowanie po id next i
mvSort.Sort()
// Tablica rekordów pozostaje nie posortowana // Pobieramy z niej rekordy wg posortowanego indeksu
print "Tablica wz"+lf
for i = 1 to i > Size( wz ) print using "%s %l" + lf, wz( i ).kod, wz( i ).id next i
print "Tablica wz wg. posortowanej mapy"+lf
for i = 1 to i > Size( wz ) print using "%s %l" + lf, wz( mvSort.Get( i ) ).kod, wz( mvSort.Get( i ) ).id next i
|
2013-10-11, 13:48 |
|
|
wojtek
Rejestracja: 2010-02-10, 21:24 Posty: 260 Pomógł: 4
|
Re: Sortowanie w strukturze record
OOO, Dzieki :)
|
2013-10-11, 14:45 |
|
|
bongos
Rejestracja: 2013-09-05, 11:53 Posty: 126 Pomógł: 8
|
Re: Sortowanie w strukturze record
wojtek pisze: A co to jest bąbelkowe sortowanie? Masz jakiś przykład? to takie bardzo proste sortowanie polega na tym, że tablicę N-elem sprawdzasz od 1 do N-1 (pętlą;-)) i sprawdzasz który element (wybrane pole) jest 'cięższy' - ten niżej czy ten wyżej jak trzeba to zamieniasz je miejscami (całe rekordy) i kontynuujesz przebieg potem powtarzasz przebieg, do momentu aż nie trzeba będzie nic 'przestawiać' w ten sposób 'lżejsze' elementy w każdym przebiegu będą 'szły do góry' coś jak bąbelki w szklance z zimnym piwem o który teraz sobie pewnie każdy pomyśli aż wszystkie bąbelki wypłyną albo zabraknie piwa
|
2013-10-11, 16:55 |
|
|
cedaar
Rejestracja: 2013-10-11, 19:10 Posty: 4
|
Re: Sortowanie w strukturze record
|
2013-10-11, 19:15 |
|
|
wrob
Ekspert
Rejestracja: 2008-04-18, 18:52 Posty: 5169 Pomógł: 59
|
Re: Sortowanie w strukturze record
ale czemu babelki - lepiej uzyc quick sort - tak samo prosty algorytm a sporo szybszy...... tu opis - http://toyoteczka.mainrc.com/pliki/asd/quicksort.pdfPS. widzę ze kolega wojtek na zajęcia algorytmy i struktury danych to chyba nie uczęszczał ;)
|
2013-10-14, 00:43 |
|
|
zz
Rejestracja: 2008-03-10, 14:01 Posty: 593
|
Re: Sortowanie w strukturze record
nie działa mi sortowanie po PocId kawałek kodu: Kod: record rFZ string PocId [25] string Quantity [25] string Amount [25] EndRec
mapValue mvSort mvSort.type(int) ... if ... ... //pocz.sortowania po PocId for i=1 to i>=iItemsCount xmlPocId=xmlPocIdList.item(i) xmlQuantity=xmlQuantityList.item(i) xmlAmount=xmlAmountList.item(i) tblItems(i).Quantity=xmlQuantity.text tblItems(i).Amount=xmlAmount.text tblItems(i).PocId=xmlPocId.text grow tblItems,1 next i
for i=1 to i>=size(tblItems) mvSort.Set(tblItems(i).PocId,i) next i //koniec sort. po POCid ... for j=1 to j>=size(tblItems) print tblItems(mvSort.Get(j)).PocId next j ... endif
Proszę o pomoc ;)
_________________ zz
|
2018-07-13, 00:17 |
|
|
szepczący
Rejestracja: 2016-05-17, 20:41 Posty: 392 Pomógł: 75
|
Re: Sortowanie w strukturze record
(1)
Po tej pętli: Kod: for i=1 to i>=size(tblItems) mvSort.Set(tblItems(i).PocId,i) next i brakuje Ci sortowania mapy: Nota bene to wcale nie jest sortowanie bąbelkowe, tylko standardowe sortowanie na niższym poziomie niż ambasic (c#? c++?). Znaczy prawdopodobnie chyba quicksort. Sortowanie bąbelkowe zwykle wygląda mniej więcej tak jak niżej (nie wiem czy to działa, pisałem z pamięci ale koncepcja zwykle tak mniej więcej wygląda), i faktycznie jest bez porównania wolniejsze, szczególnie jeśli robisz to na bardzo dużej tablicy rekordów: Kod: for i=1 to i>n-1 for j=i+1 to j>n if a(i)>a(j) then b = a(i) a(i) = a(j) a(j) = b endif next j next i
|
2018-07-13, 23:08 |
|
|
zz
Rejestracja: 2008-03-10, 14:01 Posty: 593
|
Re: Sortowanie w strukturze record
Okazało się że mogą być dwa wpisy o identycznym PocId, po którym sortuję (dwie dostawy na niepełne ilości, jedna faktura) i wtedy mam w zbiorze źródłowym np. 16 pozycji a po posortowaniu 15. Czy mozna zrobić mvSort po dwóch polach? np. PocId+Quantity
_________________ zz
|
2018-09-03, 12:09 |
|
|
zz
Rejestracja: 2008-03-10, 14:01 Posty: 593
|
Re: Sortowanie w strukturze record
wystarczyło zwykłe Kod: mvSort.Set((tblItems(i).PocId+tblItems(i).Quantity),i)
i chyba jest OK
_________________ zz
|
2018-09-03, 14:03 |
|
|
|
Strona 1 z 1
|
[ Posty: 12 ] |
|
Kto jest online |
Użytkownicy przeglądający to forum: Nie ma żadnego zarejestrowanego użytkownika i 23 gości |
|
Nie możesz tworzyć nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz dodawać załączników
|
|
|
|