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

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się