Strona 1 z 1

Odczytywanie kolejki

: 27 wrz 2007 19:52
autor: CHRISTOPCHER
Witam

Chcę odczytać dane ze zwalnianej kolejki i zapisać w pliku tekstowym ( wszystkie w jednym wierszu ) jednak jak na razie moje są bezowocne, dlatego zwracam się z prośbą o zaproponowanie rozwiązania pozwalającego mi odczytać format danych zaprezentowanych na poniższym rysunku( chce odczytać tablice 2D), lub o wszelkie wskazówki które pozwolą mi rozwiązać ten problem. Zdaje sobie sprawę że dla części użytkowników rozwiązanie jest banalne jednak nie dla mnie.

Pozdrawiam

CHRISTOPCHER

Re: Odczytywanie kolejki

: 27 wrz 2007 20:20
autor: Mikrobi
Czy zauważyłeś, że jeśli wartość Numeric bedzie w okolicach 2 to wrzucasz kolejkę do kosza, czyli tracisz dane...
:?:

Może prościej będzie zamieścić kod...?

Re: Odczytywanie kolejki

: 27 wrz 2007 20:27
autor: CHRISTOPCHER
Udało mi się odczytać dane a przynajmniej cześć która jest zwalniana z kolejki, rozwiązanie jednak jak mi sie wydaje jest wysoce niepoprawne. Co do tracenia danych to trudno mi się z tym zgodzić, ponieważ gdy numeric przyjmuje wartość 2, kolejka rzeczywiście jest zwalniana, jednak na waveform chart otrzymuje cześć wykresu, więc zastanawiam się czy kontrolka nie zwraca jednak wartości które usuwa z kolejki.

Co do kodu wydaje mi sie że nie jest on tu najważniejszy, zwłaszcza że są to tylko probne programy, a próbuje zrobić program który generuje tablice danych 2D w głównej pętli, dane te umieszczane są w kolejce gdy kontrolka numeric przyjmie wartość 1, natomiast gdy kontrolka przyjmie wartość 2, żadne nowe dane nie są już umieszczane, a cala kolejka jest zapisywana w jednej linii w pliku tekstowym. Obecnie zastanawiam sie czy jest możliwość pobrania całej kolejki i zapisania w jednej linii w jednej iteracji pętli consumer. Ze względu na przejrzystość diagramu nie dodałem kontrolek odpowiedzialnych za archiwizacje.

( Dziękuje za zainteresowanie tematem )

Re: Odczytywanie kolejki

: 28 wrz 2007 12:23
autor: Mikrobi
0. Nadal nie odpowiedziałeś na postawione przeze mnie pytanie. Proszę o odpowiedź.
1. Będę tendencyjny: uporządkuj diagram
2. Ładujesz do kolejki tablicę 2D DBL o nazwie waveform a czytasz co...?
Dla mnie wygląda to tak:

jeśli wartość Numeric3 = 2 to oprózniasz całą kolejkę.
Przeczytaj co robi ta funkcja (Flush Queue), albo lepiej zacytuję:
Removes all elements from a queue and returns the elements as an array.
czyli wyrzucasz wszystko z kolejki, nie sprawdzając ile w niej jest elementów. Funkcja zwraca całą usuwaną zawartość jako tablicę. Tą tablicę zamieniasz (nie wiem po co) na klaster z tego klastra bierzesz tylko jeden element.
Zatem: ty sam wyrzucasz wszystkie dane z kolejki biorąc tylko jedną. Nie następuje żadna utrata danych - to konsekwentna realizacja twojego kodu.
A teraz pytanie:
3. Jaki algorytm oczekujesz, że będzie realizować dolna pętla?

Re: Odczytywanie kolejki

: 29 wrz 2007 03:52
autor: CHRISTOPCHER
Zauważyłem że jesli wartość numeric bedzie w okolicach dwa to oprozniam kolejke.

Co do algorytmu jaki chce zeby realizowala dolna petla:

Gdy numeric przyjmie wartość w okolicach dwoch oczekuje ze cala kolejka danych bedzie podczas jednej iteracji dolnej petli zapisywana w jednej linii pliku tekstowego. Na razie z czym mam problem to fakt ze nie potrafie odczytac calej kolejki, bez znajomosci ilosci danych znajdujacych sie w niej.

Uprzedzajac pytanie dlaczego zapisuje do pliku tekstowego, chodzi o to ze ze poszczegolne linie danych beda mialy rozna wielkosc( długość ) a gdybym zapisywal to za pomoca kontrolki Write To Spreadsheet File, a pozniej chcial to odczytac Read From Spreadsheet File , to bym musial pobrac cala tablice lub jej czesc, co by skutkowalo ze krotrze wiersze byly by uzupelnione zerami. Natomiast w pliku tekstowym jest możliwość wybieranai okreslonego rzedu "tekstu " ktory chce odczytac - czyli nie ma znaczenia ze sa one roznej długości.

Re: Odczytywanie kolejki

: 29 wrz 2007 10:56
autor: Mikrobi
Przyglądałem się temu co zrobiłeś. W zasadzie dla rozładowania kolejki widzę dwie alternatywy: - twoją z małą poprawką:
Obrazek
- z pętlą while , kontrolą rozmiaru kolejki i rozładowaniem po jednym elemencie:
Obrazek
Pierwsza metoda wygląda na skuteczniejszą i pozbawioną zasadzki jaka jest w drugiej metodzie: Jeśli producent wprowadza cały czas dane, metoda druga może nie zakończyć pracy, metoda pierwsza jednorazowo oprózni kolejkę. Pierwsza uwaga: Numeric powinien być typu I32 lub podobny - integer. Nie rozumiem dlaczego nie pobierasz zmiennej lokalnej z Numeric2 a przepisujesz do Numeric3. Może jest szersze uzasadnienie gdzies w algorytmie - tutaj wygląda to na dublowanie danych.
Druga uwaga: nie ma powodu, aby w każdej iteracji konsumenta wywoływać zapis do pliku. Warto by to przemyśleć.

Re: Odczytywanie kolejki

: 29 wrz 2007 14:56
autor: CHRISTOPCHER
Dziękuje za poświęcony czas. Słowa uznania za przedstawione rozwiązania.
Nie rozumiem jednej uwagi
Numeric powinien być typu I32 lub podobny - integer
Jedyne pytanie jakie mi się nasuwa to dlaczego ?
Pozdrawiam
CHRISTOPCHER

Re: Odczytywanie kolejki

: 29 wrz 2007 15:59
autor: Mikrobi
CASE nie obsluguje typów DBL i SGL. Zwróć uwagę na kropkę przy selektorze CASE - środowisko rzutuje typ na liczbę całkowitą. Nie ma jednoznaczności w kodzie. Może zamiast tego wykorzystać In Range and Coerce ?