sekwencyjne wczytywanie wartości

Tematy związane z tworzeniem dużych aplikacji. Zaganiednia dotyczące architektury oraz zasad tworzenia optymalnych rozwiązań.
honda
Posty: 210
Rejestracja: 18 lis 2008 14:13
Wersja środowiska: LabVIEW 8.6
Kontakt:

sekwencyjne wczytywanie wartości

Post autor: honda »

Witam,

jak zrobić, żeby odczytywać wartości np. z pliku tekstowego sekwencyjnie, tzn linia po lini. Chciałbym aby można było odczytywać cały plik danych od pierszej lini do ostatniej i z powrotem.

pozdro
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: sekwencyjne wczytywanie wartości

Post autor: Grzesiek080 »

Hejka,

Zrób odczyt całego pliku za pomoca "Read from Text File". Nastepnie wprowadź odczytany "text" to do multi line index funkcji "Pick Line", gdzie za pomoca paraametru "Line Index" podajesz numer linii którą chcesz odczytać.


pozdrawiam
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

Re: sekwencyjne wczytywanie wartości

Post autor: Pitol »

Odczytanie całego pliku może stwarzać problemy, szczególnie jeśli plik jest bardzo duży.

Zdecydowanie prostsze rozwiązanie:
ReadLines.png
ReadLines.png (18.34 KiB) Przejrzano 12834 razy
Bloczek Read Text File ma ustawioną opcję Read Lines (prawym na bloczek).Trzeba jeszcze obsłużyć błąd w momencie gdy nie ma już linii (ostatnia iteracja pętli) ale z tym to sobie poradzisz ;)

Gdybyś chciał również czytać plik liniami od tyłu to stworzyłem jakiś czas temu funkcję, która się do tego nadaje:
https://decibel.ni.com/content/docs/DOC-18404
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
Grzesiek080
Posty: 82
Rejestracja: 26 maja 2009 07:18
Wersja środowiska: LabVIEW 2012
Lokalizacja: Sucha Beskidzka
Kontakt:

Re: sekwencyjne wczytywanie wartości

Post autor: Grzesiek080 »

Świetne rozwiązanie Pitol. Powiedz mi jeszcze jak to się dzieje, że przy każdym obrocie pętli jest wczytywana kolejna linia. Skąd ta funkcja wie gdzie wcześniej czytała?
Ja pominałem shift register i dalej to działa.....
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

sekwencyjne wczytywanie wartości

Post autor: Pitol »

Rejestr jest zbędny, tak mi się przypadkiem dodał.

Funkcja do odczytu (Read Text File) z pliku działa w taki sposób, że po każdym odczycie (linii, znaku) zmienia się pozycja, z której rozpocznie się następny odczyt. Zapamiętuje się to tak jakby w tej otwartej referencji do pliku.
Gdybyśmy po każdym odczycie zamykali referencję to każdy odczyt generowałby pierwszy wiersz.

Jest to przydatna cecha tej funkcji, jeśli się potrafi ją wykorzystać. Można oczywiście samemu ustawiać pozycję w pliku za pomocą odpowiednich bloczków (paleta File I/O -> Advanced). Ich użycie jest np. zaprezentowane na przykładzie czytania linii od końca pliku w moim poprzednim poście.
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
honda
Posty: 210
Rejestracja: 18 lis 2008 14:13
Wersja środowiska: LabVIEW 8.6
Kontakt:

Re: sekwencyjne wczytywanie wartości

Post autor: honda »

Witam,

faktycznie fajnie to działa, tylko ja bym potrzebował na wyjsciu DBLa ;). Da sie to przekonwertować ?


pozdro
Awatar użytkownika
Pitol
Moderator
Posty: 982
Rejestracja: 19 lip 2007 00:00
Wersja środowiska: LabVIEW 2019
Lokalizacja: Kraków

sekwencyjne wczytywanie wartości

Post autor: Pitol »

Paleta String -> Conversion (chyba) -> Fractional String to Number
ObrazekObrazekObrazek
Chcesz taki podpis? Zajrzyj tutaj
honda
Posty: 210
Rejestracja: 18 lis 2008 14:13
Wersja środowiska: LabVIEW 8.6
Kontakt:

Re: sekwencyjne wczytywanie wartości

Post autor: honda »

Czesc,

no tak, na to to wpadłem ;), tylko ze zamienia mi na DBLa pierwszą liczbę w wierszu a nie cały wiersz. Potrzebny mi cały wiersz bo to są dane które potem muszę wysłać w RSa.

pozdro
TMa
Posty: 203
Rejestracja: 07 sty 2010 12:56
Wersja środowiska: LabVIEW 2017

Re: sekwencyjne wczytywanie wartości

Post autor: TMa »

Jeżeli w każdym wierszu masz łańcuch znaków składający się z paru wartości liczbowych (numeric) oddzielonych konkretnym znakiem specjalnym (spacebar, tab) to polecam użycie Spreadsheet String To Array

PS. Proponuje error wrzucić w rejestr przesuwny. W tej chwili tracisz informacje o ew. "warningach". Poprzednie wartości są nadpisywane.
Załączniki
spreadsheet.png
spreadsheet.png (13.63 KiB) Przejrzano 12778 razy
ODPOWIEDZ