Wczytanie danych z pliku ( a właściwie konwersja na tablicę)

Jeśli masz coś do powiedzenia w sprawie LabVIEW napisz. Tutaj są tematy, których nie można uściślić do innych działów.
andrzejg76
Posty: 2
Rejestracja: 13 wrz 2004 00:00

Wczytanie danych z pliku ( a właściwie konwersja na tablicę)

Post autor: andrzejg76 »

Witam,
To mój pierwszy post na forum.
I zapewne dość trywialny dla większości, ale...
Problem 1:
Format pliku x1 y1 x2 y2 x3 y3.......itd y x,y float'y, delimiter TAB. Próbowałem różnych sposobów z exampli i innych, ale bez rezultatu. Otwieram plik, wczytuję kontrolnie do string idicator - wyswietla się, niestety nie bardzo udaje mi się przekonwertować go na tablice 2D: x1 y1 x2 y2 ... (cały czas na 0)
Problem 2: mam plik z danymi w formacie:
Nagłówek1 x1 y1 z1 x2 y2 z2 ... Nagłówek2 x y z ...
Nagłówek występuje zawsze w pierwszej linii a następnie w stałych odstępach co 4000 linii. Jak wczytać taki plik. Właściwie interesuje mnie składowa z wpisana do tablicy 2D z kolejnych nagłówków.
Podpowiedzcie coś....
Pozdrawiam
Ostatnio zmieniony 11 gru 2007 22:07 przez andrzejg76, łącznie zmieniany 4 razy.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: jogurt_owocowy »

Witaj na forum.

Jeśli chodzi o problem nr 1 to sprawa jest prosta (patrz załącznik), natomiast z drugim jest gorzej.
Jeśli masz wpływ na postać tego drugiego pliku to go zmień (pierwszy zresztą też mógłby być lepszy). Zamiast jednego pliku z kilkoma nagłówkami lepsze będzie po prostu kilka plików. Jeśli dostajesz ten plik "z góry" to niestety, ale będzie z tym trochę zabawy polegającej na żonglerce stringami i tablicami. Możesz zacząć od detekcji nagłówków np. w sposób pokazany w załączniku, a następnie korzystając z tej informacji odpowiednio wyłuskać potrzebne Ci wartości.
To, że nagłówek występuje co 4000 linii jest informacją średnio przydatną. Co prawda mając pewność, że liczby są zawsze zapisywane z tą samą precyzją, możesz obliczyć gdzie znajduje się odpowiadający nagłówkowi kawałek stringa z danymi, wyłuskać go "po omacku" i zamienić na tablicę, ale nie jest to rozwiązanie eleganckie.

Pozdrawiam :]
andrzejg76
Posty: 2
Rejestracja: 13 wrz 2004 00:00

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: andrzejg76 »

Wiem, że ten format plików nie jest zbyt poręczny w obróbce, ale na to nie mam wpływu.
Dzięki za podpowiedź (rozwiązanie).
Spróbuję to dopracować i zobaczymy...

A z innej beczki...
Gdzie dokładnie znajduje się spis dozwolonych (niedozwolonych) rozszerzeń plików załączanych na forum. Kierowało mnie do regulaminu, ale tam nie znalazłem :roll:
Pozdrawiam
Ostatnio zmieniony 12 gru 2007 09:33 przez andrzejg76, łącznie zmieniany 1 raz.
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: vugie »

Mam inną propozycję. Wykorzystuje to, że Scan From String zwraca błąd kiedy łańcuch wejściowy jest niepoprawny (czyli jest nagłówkiem)
Na Read Text File trzeba nacisnąć PKM i wybrać Read Lines.
Powstaje linijka zer na początku, ale z tym można sobie chyba poradzić...
(To oczywiście rozwiązanie problemu 2)
Ostatnio zmieniony 12 gru 2007 10:00 przez vugie, łącznie zmieniany 1 raz.
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: jogurt_owocowy »

Powstaje linijka zer na początku, ale z tym można sobie chyba poradzić...
Chyba nie łapię idei, w każdym razie już sam klocek Spreadsheet String to Array (albo Read From Spreadsheet File) działa w taki właśnie sposób, że zamienia nagłówki na linijki zer.
Ostatecznie chyba najszybciej byłoby to zrobić, tak, że najpierw jakoś namierzyć pozycje nagłówków, potem wyciąć z zawartości pliku cała partię danych i hurtem ją zamienić na tablicę za pomocą Spreadsheet String to Array.
Pozdrawiam ]
vugie
Posty: 383
Rejestracja: 17 lis 2006 00:00
Wersja środowiska: LabVIEW 2009
Lokalizacja: Warszawa

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: vugie »

Ale nie chodzi o to żeby tylko wycinać nagłówki, tylko żeby partia danych pomiędzy dwoma nagłówkami była oddzielnym wierszem tabeli.
W zasadzie to jeszcze prościej byłoby faktycznie wyciąć nagłówki wczytać z-ty do jednej tabeli, a potem Reshape Array
Awatar użytkownika
Mikrobi
Posty: 1210
Rejestracja: 08 paź 2003 00:00
Wersja środowiska: LabVIEW 2017

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: Mikrobi »

jogurt_owocowy pisze:
Ostatecznie chyba najszybciej byłoby to zrobić, tak, że najpierw jakoś namierzyć pozycje nagłówków, potem wyciąć z zawartości pliku cała partię danych i hurtem ją zamienić na tablicę za pomocą Spreadsheet String to Array.
Można i tak: wersja alternatywna dla jogurta aka Jogurt Alternatywny:
Obrazek
powinno zadziałać minimalnie lepiej niż pętla while ;)
pozdrawiam
Mikrobi

LabVIEW Champion, CLD, CPI
Awatar użytkownika
jogurt_owocowy
Posty: 1317
Rejestracja: 30 lis 2004 00:00
Wersja środowiska: LabVIEW 2015
Lokalizacja: Kraków

Re: Wczytanie danych z pliku ( a właściwie konwersja na ta

Post autor: jogurt_owocowy »

Chodzi mi o namierzenie nagłówkow po to, żeby wyjąć dane spomiędzy nich i hurtem zamienić na tablicę (, z której potem juz bez filozofii można wydobyć kolumnę zetów). Teraz pytanie jak to zrobić najszybciej nie polegając jednocześnie na informacji, że nagłówek jest co 4000 czy ileś tam linii.
powinno zadziałać minimalnie lepiej niż pętla while
W pętli ładniej widać co się dzieje ] Ale o to chodzi Jak to zrobić najszybciej?
Ostatnio zmieniony 12 gru 2007 10:46 przez jogurt_owocowy, łącznie zmieniany 1 raz.
ODPOWIEDZ