Rekomendowane odpowiedzi

Opublikowano

Dzień dobry.

Chciałbym wykorzystać exif'y z jpg'ów, a dokładnie współrzędne zrobienia zdjęcia.
Przy pomocy programu BR's EXIFextracter tworzę plik csv z takimi danymi:
ścieżka ; GPS x; GPS y; kąt
Tworzę blok i wstawiam go we współrzędnych z GPS'a wraz z określonym kątem obrotu. 
Do ostatniego utworzonego elementu dodaję hiperłącze o określonej ścieżce.

Mój tok myślenia idzie w tym kierunku:
1) z pliku csv tworzę listy: lst_path,   lst_x,   lst_y,    lst_angle
2) z każdej listy biorę pierwszy element i wykorzystuję go do stworzenia bloku i przypisania do niego hiperłącza
3) usuwam pierwszy element z każdej listy
4) powtarzam krok 2 i 3 aż listy będą puste

Ból sprawia mi już pierwszy krok. Niby znalazłem coś takiego:
http://www.lee-mac.com/readcsv.html
ale jak zrobić z tego poszczególne listy.

PS w załączeniu przykładowy CSV

GPS.csv

Opublikowano

...może na przykładzie:
Plik csv wygląda tak:
aa;ab;ac;ad
ba;bb;bc;bd
ca;cb;cc;cd
.....
a potrzebuje zrobić z niego listy:
Lista_1 (aa ba ca ....)
Lista_2 (ab bb cb ....)
Lista_3 (ac bc cc ...)
Lista_4 (ad bd bc ...)
W exelu to się nazywa transpozycja (nie wiem czy to pomoże)

Opublikowano

Skorzystaj z gotowych narzędzi lispowych zwanych CADPL-Pack.
Poczytaj tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ o nim, co to jest i jak używać.
Potem jest już z górki:
1) Odczytanie pliku csv: 

(setq a (cd:SYS_ReadFile nil (findfile "GPS.csv")))


zwraca listę:

("D:\\Smietnik\\IMG_20180218_133113.jpg;51.269562;22.542074;22" 
"D:\\Smietnik\\IMG_20180218_133117.jpg;51.269562;22.542074;90" 
"D:\\Smietnik\\IMG_20180218_133144.jpg;51.269562;22.542074;180" 
"D:\\Smietnik\\IMG_20180221_190038.jpg;51.269558;22.542191;130")


2) Podział łańcuchów (elementów listy) na osobne listy:

(setq b (mapcar '(lambda (%)(cd:STR_Parse % ";" T)) a))


zwraca:

(("D:\\Smietnik\\IMG_20180218_133113.jpg" "51.269562" "22.542074" "22")
("D:\\Smietnik\\IMG_20180218_133117.jpg" "51.269562" "22.542074" "90")
("D:\\Smietnik\\IMG_20180218_133144.jpg" "51.269562" "22.542074" "180")
("D:\\Smietnik\\IMG_20180221_190038.jpg" "51.269558" "22.542191" "130"))


3) Utworzenie osobnych list na podstawie indeksu. Na poczatek krótka definicja funkcji do tego celu:

(defun jk:LST_nth (Lst Idx)
  (mapcar '(lambda (%)(nth Idx %)) Lst)
)


Teraz wywołania:

(setq p (jk:LST_nth b 0))


zwraca ścieżki:

("D:\\Smietnik\\IMG_20180218_133113.jpg" 
"D:\\Smietnik\\IMG_20180218_133117.jpg" 
"D:\\Smietnik\\IMG_20180218_133144.jpg" 
"D:\\Smietnik\\IMG_20180221_190038.jpg")


potem iksy:

(setq x (jk:LST_nth b 1))


następnie igreki:

(setq y (jk:LST_nth b 2))


na koniec kąty:

(setq g (jk:LST_nth b 3))


oczywiście jeśli potrzeba zmień STR-ingi listy na liczby, tu dla igreków który wygląda tak:

("22.542074" "22.542074" "22.542074" "22.542191")


wywołujesz:

(mapcar 'read y)


zwraca:

(22.5421 22.5421 22.5421 22.5422)

Powinno działać - w razie problemów daj znać.
 

Opublikowano

Dziękuję za tą podpowiedź kojacek. Analizując lisp Lee-Mac'a doszedłem do wniosku, że nie muszę tworzyć list.
W każdym razie  zrobiłem takiego lispa jak załączony. Pozostał mi jeden problem z dodaniem do ostatniego utworzonego bloku hiperłącza.
Tak wygląda fragment mojego kodu:
 

(setq last_ent (entlast))
	(command "_-hyperlink" _i _o last_ent "" path "" "" "" )

..można powiedzieć., że mam problem ze skryptem ;)

Exif - v7.lsp

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie