Odczytywanie kolejki
-
- Posty: 71
- Rejestracja: 05 mar 2007 00:00
Odczytywanie kolejki
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
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
Ostatnio zmieniony 27 wrz 2007 20:21 przez CHRISTOPCHER, łącznie zmieniany 1 raz.
Re: Odczytywanie kolejki
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...?
:?:
Może prościej będzie zamieścić kod...?
-
- Posty: 71
- Rejestracja: 05 mar 2007 00:00
Re: Odczytywanie kolejki
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 )
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
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?
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?
-
- Posty: 71
- Rejestracja: 05 mar 2007 00:00
Re: Odczytywanie kolejki
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.
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
Przyglądałem się temu co zrobiłeś. W zasadzie dla rozładowania kolejki widzę dwie alternatywy: - twoją z małą poprawką:

- z pętlą while , kontrolą rozmiaru kolejki i rozładowaniem po jednym elemencie:

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ć.

- z pętlą while , kontrolą rozmiaru kolejki i rozładowaniem po jednym elemencie:

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ć.
-
- Posty: 71
- Rejestracja: 05 mar 2007 00:00
Re: Odczytywanie kolejki
Dziękuje za poświęcony czas. Słowa uznania za przedstawione rozwiązania.
Nie rozumiem jednej uwagi
Pozdrawiam
CHRISTOPCHER
Nie rozumiem jednej uwagi
Jedyne pytanie jakie mi się nasuwa to dlaczego ?Numeric powinien być typu I32 lub podobny - integer
Pozdrawiam
CHRISTOPCHER
Re: Odczytywanie kolejki
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 ?