Aplicatie care contine toate codurile siruta si sirsup in autolisp

Creat de diagodose2009, Aug 01, 2012, 01:06 AM

« precedentul - următorul »

diagodose2009

Aplicatie GenerareCP v2.0  contine in modul baza-de-date toate codurile siruta si sirsup pentru comunele,satele,orasele, tarile

pp_topo_anexa1.zip - 305.8 Kb

Incarcarea acestei bazei de date fsi folosirea lor in programele dvs din autolisp, visua basic..
este aproape  imposibila.. Daca dvs vrei sa faceti un program VisualBasic car sa returneze
numele comunei/satului atunci acest program VB va avea dimensiunea de 9MB-12MB..si deci imposibil ca un program autoLISP sa poata folosi/scana toata aceasta baza de date..

Q: Unde sunt folosite codurile siruta/sirsup ?
A: In cadastru de programul GenerareCXML..

Q: Practic,ce face programul pp_cosiruta.exe?
A: Programu pp_cosiruta.exe returneaza numele satului / numele comunei din codurile
sirsup si siruta iar acest program "pp_cosurita.exe" este serverul-local  al bazei de date, in interiorul acest fisier "pp_cosiruta.exe" sunt stocate toate codurile siruta+sirsup..

Q: Care persoane pot utiliza aplicatia "pp_cosiruta.exe"?
A: Programatorii autolisp, C#, VLISP, VB.C++ARX, Java,

<?xml version="1.0" standalone="yes"?>
<CPXML>
 <Address>
   <ADDRESSID>1</ADDRESSID>
   <SIRSUP>101902</SIRSUP>
   <SIRUTA>101911</SIRUTA>
   <INTRAVILAN>true</INTRAVILAN>

Q: Cum sunt stocate codurile siruta si sirsup?
A: Programul pp_cosiruta.vlx nu contine aceste coduri, dar el ruleaza in mod server  
aplicatia "pp_cosiruta.exe" ij mod automatic si comunica  cu "pp_cosiruta.exe" prin intermediul
registrilor..


(setq con_satsiruta 101911)
(setq con_uatsirup 101902)

(setq con_winregcpxml
       "HKEY_CURRENT_USER\\Software\\Autodesk\\AutoCAD\\pp_cosiruta"
)


(setq AcRx::kNullMsg 0
      AcRx::kInitAppMsg 1
      AcRx::kUnloadAppMsg 2
      AcRx::kLoadDwgMsg 3
      AcRx::kUnloadDwgMsg 4
      AcRx::kInvkSubrMsg 5
      AcRx::kCfgMsg 6
      AcRx::kEndMsg 7
      AcRx::kQuitMsg 8
      AcRx::kSaveMsg 9
      AcRx::kDependencyMsg 10
      AcRx::kNoDependencyMsg 11
      AcRx::kOleUnloadAppMsg 12
      AcRx::kPreQuitMsg 13
      AcRx::kInitDialogMsg 14
      AcRx::kEndDialogMsg 15
      AcRx::kSuspendMsg 16
)


(Defun str_princ2 (a101 / a g)
  (if (dfn_var_isstr a101)
    (princ a101)
    (progn (if (= (car a101) nil)
     (setq g (textscr)
   a101 (cdr a101)
     )
   )
   (foreach a a101 (princ a))
    )
  )

  0
)


(Defun str_princ (a101 / rr) (str_princ2 a101))



(Defun dfn_var_isint0 (a115 defvalue / rr) ;_ASSERT_OK
  (setq rr (if (= (type a115) (quote SYM))
     (eval a115)
     a115
   )
 rr (if (/= (type rr) (quote INT))
     defvalue
     rr
   )
  )

  rr
)



(Defun dfn_var_isstr (a094 / rr) ;_ASSERT_OK
  (setq rr (if (= (type a094) (quote STR))
     a094
     nil
   )
  )

  rr
)


(Defun str_calloc (d170 f170 / rr c d)
  (if (= nil d170)
    (setq d170 f170)
  )
  (setq c (dfn_var_isstr d170))
  (if (= c nil)
    (alert "d170")
  )
  (if (= f170 0)
    (setq f170 nil)
  )
  (if c
    (setq rr d170)
    (setq rr (dfn_var_isstr f170))
  )

  rr
)

(vl-load-com)

(Defun  test ( / drvc maxs reck dave numesata )
  (vl-registry-write con_winregcpxml "call" AcRx::kInitAppMsg)  ;;; initiliaziare server-local
  (vl-registry-write con_winregcpxml "rr" "initialize")
  (setq pfn "PP_COSIRUTA.EXE")                                           ;;; run    aplicatie server-local
  (command "SHELL" (strcat (getenv "COMSPEC") " /C " pfn))  
  (setq numesata "")                                                    
  (setq dave (vl-registry-read con_winregcpxml "call"))
  (setq drvc (getenv "SystemDrive"))
  (setq maxs 1)
  (str_princ (list "\nWait replay......"))
  (while (and (< maxs 200) (/= dave AcRx::kEndMsg))        
;;  asteapta raspunsul de server-local pp_cosirtua.exe
    (setq reck (sleepex 50 nil)                                            ;;; delay 50 ms
  dave (vl-registry-read con_winregcpxml "call")         ;;;
  maxs (+ maxs 1)
    )
  )
;;; daca raspunsul de la server dupa 999 incercari a esuat atunci eroare
;;;  conexiunea cu serverul a esuat..
  (if (> maxs 999)
    (progn (setq msga
  (strcat
    "Rularea aplicatiei 'pp_cosiruta.exe' esuat\343\n //Fix: Te rog copiaz\343 fisierul 'pp_cosiruta.exe' in \n\t"
    drvc
    "\Windows\\system32"
  )
   )
   (alert msga)
   exit
    )
  )

  (if (> con_satsiruta 10)
    (progn
      (vl-registry-write con_winregcpxml  "con_satsiruta"   con_satsiruta))
      (vl-registry-write con_winregcpxml   "call" AcRx::kInvkSubrMsg)
      (while
 (/= AcRx::kEndMsg
    (dfn_var_isint0 (vl-registry-read con_winregcpxml "call") 0)
 )
 (princ "*")
      )
      (setq numesata (str_calloc
       (vl-registry-read con_winregcpxml "rr")
       "EroareSAT"
     )
      )
      (setq msga (strcat "Numesatului=" numesata "\n"))
    )
    (setq msga "Teren Extravilan\n")
  )
  (vl-registry-write con_winregcpxml "rr" "ping uat")
  (vl-registry-write  con_winregcpxml  "con_uatsirsup"  con_uatsirsup )
  (vl-registry-write  con_winregcpxml  "call"   AcRx::kInvkSubrMsg )

  (while
    (/= AcRx::kEndMsg
 (dfn_var_isint0 (vl-registry-read con_winregcpxml "call") 0)
    )
     (princ "*")
  )
  (setq numeuata (str_calloc
   (vl-registry-read con_winregcpxml "rr")
   "EroareUAT"
 )
  )
  (setq msga (strcat msga "NumeComunei=" numeuata "\n"))
  (vl-registry-write con_winregcpxml "call" AcRx::kQuitMsg)
  (alert msga)
  (vl-registry-write con_winregcpxml "call" AcRx::kQuitMsg)


Subtitlu: Program  VLISP  cu baza-de-date care contine toate codurile
      sirsup si siruta pentru programele dvs in autolisp

Q:Ce contine aceste doua programe?
A:Aceste toate codurile sirsup si siruta din GenerareCPXML

Q:Cum rulati acest program?
A:Faceti pas3) de mai jos, incarcati programul VLISP denumit "pp_topo_anexa1.vlx"
si tastati comanda Q2[enter], dvs  selectati un fisier cpxml


Cerinte:
0) AutoCAd2002-autocad2011
1) conexiune web activa si online
2) programul pp_topo_anexa1.vlx ruleaza in mod server programul
executabil pp_cosiruta.exe prin registri windows
3) Dvs copiati programul pp_cosiruta.exe in folderul
  C:\windows\system32\
sau daca aveti pe drive D: instalat windowsOS atunci
  D:\windows\system32\
4)




>>>> PENTRU DETALII SAU SURSE COMPLETE VA ROG DATI MESAJ PRIVATE MIEE...
la adresa
http://lisp2arx.3xforum.ro/misc.php?private=25


JohnDoe:  
" si nu e deloc de megabiti; la mine tot modulul care face asta (adica baza de date+aplicatia LISP) are cam 400KB. Probabil depinde de metoda si limbajul folosit."
  Eu o sa testez sa verific,adica o extrag doar numele tuturor satelor si sa vad ce dimensiunie
are..La mine modul baza de date are 330ko (aproximativ)
Q: Care este  avantajul stocarii bazei-de-date in program executabil ca server aaplicatiei autolisp?
A: Avantajul este viteza mare de scanare si extragere a datelor...

Modificat de diagodose2009 (01-08-2012 04:14:44)

John Doe

Codurile folosite de "GenerareCP" (programul de la OCPI) sunt stocate in fisierul ...\GenerareCP\Data\Locality.xml". E cam mare, are cam 3.5 MB dar in caz de urgenta se poate citi si cu un editor de texte.

N-as crede ca functioneaza pentru mai multe tari... dar in fine, nu e deloc imposibil si nu e deloc de megabiti; la mine tot modulul care face asta (adica baza de date+aplicatia LISP) are cam 400KB. Probabil depinde de metoda si limbajul folosit.
Oricum, felicitari, ai realizat ceva. Sper sa fie si util.

zamfy

Am si eu o aplicatie mai veche, asemanatoare, care returneaza codurile Sirsup si Siruta.
Mai intai, puneti acest fisier undeva in Support paths.
http://www.fileshare.ro/77090584406.4
Iar acesta este modulul LISP:
;;Versiunea 1.0
;;-prima versiune functionala a programului

(defun c:sir (/ string jud sirsup sirua)
;;fisierul csv trebuie sa fie intr-un folder aflat in Support Paths
(setq csv (findfile "Siruta.csv"))

(setq string (getstring T "\nScrie denumirea UAT-ului pentru aflare cod SIRSUP si SIRUTA: "))

(if (= string "Bucuresti")
(progn
(setq sirsup "179132")
(initget "1 2 3 4 5 6")
(setq opb (getkword "\nAlege sectorul: 1/2/3/4/5/6 "))
(if (= nil opb)
(setq opb "1")
)
(cond
((= "1" opb)
(setq sirua "179141")
)
((= "2" opb)
(setq sirua "179150")
)
((= "3" opb)
(setq sirua "179169")
)
((= "4" opb)
(setq sirua "179178")
)
((= "5" opb)
(setq sirua "179187")
)
((= "6" opb)
(setq sirua "179196")
)
(T nil)
)
(princ (strcat "\nCodul SIRUTA este: " sirua " "))
(princ (strcat "\nCodul SIRSUP este: " sirsup " "))
)
)
(if (/= string "Bucuresti")
(progn
(setq jud (getstring T "\nScrie judetul in care se afla UAT-ul: "))
(cond
((or (= jud "alba") (= jud "Alba") (= jud "ab"))
(setq jnr "1")
)
((or (= jud "arad") (= jud "Arad") (= jud "ar"))
(setq jnr "2")
)
((or (= jud "arges") (= jud "Arges") (= jud "ag"))
(setq jnr "3")
)
((or (= jud "bacau") (= jud "Bacau") (= jud "bc"))
(setq jnr "4")
)
((or (= jud "bihor") (= jud "Bihor") (= jud "bh"))
(setq jnr "5")
)
((or (= jud "bistrita-nasaud") (= jud "Bistrita-Nasaud") (= jud "bistrita nasaud") (= jud "Bistrita Nasaud") (= jud "bn"))
(setq jnr "6")
)
((or (= jud "botosani") (= jud "Botosani") (= jud "bt"))
(setq jnr "7")
)
((or (= jud "brasov") (= jud "Brasov") (= jud "bv"))
(setq jnr "8")
)
((or (= jud "braila") (= jud "Braila") (= jud "br"))
(setq jnr "9")
)
((or (= jud "buzau") (= jud "Buzau") (= jud "bz"))
(setq jnr "10")
)
((or (= jud "caras-severin") (= jud "Caras-Severin") (= jud "caras severin") (= jud "Caras Severin") (= jud "cs"))
(setq jnr "11")
)
((or (= jud "calarasi") (= jud "Calarasi") (= jud "cl"))
(setq jnr "51")
)
((or (= jud "cluj") (= jud "Cluj") (= jud "cj"))
(setq jnr "12")
)
((or (= jud "constanta") (= jud "Constanta") (= jud "ct"))
(setq jnr "13")
)
((or (= jud "covasna") (= jud "Covasna") (= jud "cv"))
(setq jnr "14")
)
((or (= jud "dambovita") (= jud "Dambovita") (= jud "db"))
(setq jnr "15")
)
((or (= jud "dolj") (= jud "Dolj") (= jud "dj"))
(setq jnr "16")
)
((or (= jud "galati") (= jud "Galati") (= jud "gl"))
(setq jnr "17")
)
((or (= jud "giurgiu") (= jud "Giurgiu") (= jud "gr"))
(setq jnr "52")
)
((or (= jud "gorj") (= jud "Gorj") (= jud "gj"))
(setq jnr "18")
)
((or (= jud "harghita") (= jud "Harghita") (= jud "hr"))
(setq jnr "19")
)
((or (= jud "hunedoara") (= jud "Hunedoara") (= jud "hd"))
(setq jnr "20")
)
((or (= jud "ialomita") (= jud "Ialomita") (= jud "il"))
(setq jnr "21")
)
((or (= jud "iasi") (= jud "Iasi") (= jud "is"))
(setq jnr "22")
)
((or (= jud "ilfov") (= jud "Ilfov") (= jud "if"))
(setq jnr "23")
)
((or (= jud "maramures") (= jud "Maramures") (= jud "mm"))
(setq jnr "24")
)
((or (= jud "mehedinti") (= jud "Mehedinti") (= jud "mh"))
(setq jnr "25")
)
((or (= jud "mures") (= jud "Mures") (= jud "ms"))
(setq jnr "26")
)
((or (= jud "neamt") (= jud "Neamt") (= jud "nt"))
(setq jnr "27")
)
((or (= jud "olt") (= jud "Olt") (= jud "ot"))
(setq jnr "28")
)
((or (= jud "prahova") (= jud "Prahova") (= jud "ph"))
(setq jnr "29")
)
((or (= jud "satu mare") (= jud "Satu Mare") (= jud "sm"))
(setq jnr "30")
)
((or (= jud "salaj") (= jud "Salaj") (= jud "sj"))
(setq jnr "31")
)
((or (= jud "sibiu") (= jud "Sibiu") (= jud "sb"))
(setq jnr "32")
)
((or (= jud "suceava") (= jud "Suceava") (= jud "sv"))
(setq jnr "33")
)
((or (= jud "teleorman") (= jud "Teleorman") (= jud "tr"))
(setq jnr "34")
)
((or (= jud "timis") (= jud "Timis") (= jud "tm"))
(setq jnr "35")
)
((or (= jud "tulcea") (= jud "Tulcea") (= jud "tl"))
(setq jnr "36")
)
((or (= jud "vaslui") (= jud "Vaslui") (= jud "vs"))
(setq jnr "37")
)
((or (= jud "valcea") (= jud "Valcea") (= jud "vl"))
(setq jnr "38")
)
((or (= jud "vrancea") (= jud "Vrancea") (= jud "vn"))
(setq jnr "39")
)
(T (princ "\nDenumirea judetului este scrisa doar cu majuscule, este gresita sau nu exista in fisier!"))
)


(ReadCSV csv)
)
)
(princ)
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;functie preluata dintr-un fisier lisp creat de Lee Mac;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun ReadCSV ( filename / _replacequotes _csv->lst file line lst )

;;elementele unei liste sunt afisate in linia de comanda intre ghilimele
;;aceasta functie sterge acele ghilimele

    (defun _replacequotes ( str / pos )

        (setq pos 0)

        (while (setq pos (vl-string-search  "\"\"" str pos))

            (setq str (vl-string-subst "\"" "\"\"" str pos)

                  pos (1+ pos)

            )

        )

        str

    )

 
;;aceasta functie creeaza o lista cu elementele unei linii din fisierul csv
    (defun _csv->lst ( str pos / s )

        (cond

            (   (null (setq pos (vl-string-position 44 str pos)))

                (if (wcmatch str "\"*\"")

                    (list (_replacequotes (substr str 2 (- (strlen str) 2))))

                    (list str)

                )

            )

            (   (wcmatch (setq s (substr str 1 pos)) "\"*\"")

                (cons

                    (_replacequotes (substr str 2 (- pos 2)))

                    (_csv->lst (substr str (+ pos 2)) 0)

                )

            )

            (   (wcmatch s "\"*[~\"]")

                (_csv->lst str (+ pos 2))

            )

            (   (cons s (_csv->lst (substr str (+ pos 2)) 0)))

        )

    )

 

    (if (setq file (open filename "r"))

        (progn

            (while (setq line (read-line file))

                (setq lst (cons (_csv->lst line 0) lst))

            )

            (close file)

        )

    )
;;cream lista cu toate listele liniilor
    (reverse lst)
;;cautam stringurile in fisier si daca le gasim le afisam in linia de comanda
(setq index 0)
(while (< index (length lst))
;;vedem numele uat-ului in fisier
(setq string1 (caddr (cdr (nth index lst))))
;;vedem numarul asociat judetului
(setq jn2 (caddr (cdr (cdr (nth index lst)))))
;;daca corespund atat numele uat-ului
(if (and (= string string1) (= jn2 jnr))
(progn
(setq sirua (car (nth index lst)))
(setq sirsup (cadr (nth index lst)))
(if (and (> (strlen sirua) 3) (> (strlen sirsup) 3))
(progn
(princ (strcat "\nCodul SIRUTA este: " sirua " "))
(princ (strcat "\nCodul SIRSUP este: " sirsup " "))
)
)
)
)
(setq index (1+ index))
)
)

(alert "\nApasati SIR pentru rularea comenzii!" )

John Doe

Da, merge dar se poate si mai simplu. de ce nu-ti faci o lista predefinita cu toate denumirile judetelor? si poti face din LISP alta cu denumirile UAT-urilor dupa ce s-a setat judetul. Si mai departe, cu numele localitatilor din fiecare UAT.
Merge frumos cu DCL:


450/580px 44.1KB

zamfy

Aplicatia de mai sus am integrat-o in propriul generator de fisiere cpxml, iar in momentul de fata isi preia automat date ca judet, uat si sat sau oras si are o viteza de lucru cam de 5 ori mai mare. Exemplul de mai sus este si pentru cei care ar dori sa isi creeze propriile aplicatii, folosindu-se de date ca Sirsup sau Siruta.

John Doe