Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 5. 1. 2024 13:08:53

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 699

Načítání údajů z ARES-VYŘEŠENO

Ahoj, netahali jste někdo údaje ze starého ARESU do LibreOffice? Jak jste se vypořádali se změnou na nový systém rejstříku? Přestali vracet XML a vrací asi jen JSON. Nějaké zkušenosti s touto problematikou? (Bohužel JSON je pro mne španělská vesnice)

Editoval ludviktrnka (8. 1. 2024 09:43:16)


LibreOffice 5.4.

Offline

#2 5. 1. 2024 16:27:04

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,462

Re: Načítání údajů z ARES-VYŘEŠENO

JSON je jednoduchý. Řádek sestává z hesla výrazu (což je název relace) a za dvojtečkou je obsah. Json typicky obsahuje i nevyžádané údaje. Takže musíte identifikovat ta hesla, která jste požadoval. Není to kódovaný text, jen prostý text jako výpis z relační databáze. Právě proto nemohou filtrovat požadavek podle Vašeho požadavku. Prostě vypíšou všechny jednotlivé relace pod sebe podle unikátního klíče, ten však součástí výpisu nebývá. Ta hesla jsou vlastně názvy jednotlivých databází v relaci.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#3 5. 1. 2024 21:38:48

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 699

Re: Načítání údajů z ARES-VYŘEŠENO

Já ten JSON jakoby načtu a vidím ho, ale načítám to opravdu jako čistý text a nevím jak se dostat k tomu konkrétnímu údaji. Neexistuje v BASICu nějaká struktura, která by takový to soubor dokázala rozklíčovat? V tom textu vidim třeba ,"dic":"01234567", (i s těmi čárkami okolo). Asi bych si s tím nakonec nějak poradil prostě hledání hesla ,"dic": a pak nějaký rozklíčování délky textu mezi dvojtečkou a čárkou a vytažení toho čísla, ale je to takové fušérké, se mi zdá. Jestli není nějaké již systémovější řešení. Nedalo by se to třeba převést na normálně řádkované CSV? Jo zapomněl jsem podotknout že je to celé v jednom řádku.(Já to totiž stále načítám přes ty původní XML nástroje ...)


LibreOffice 5.4.

Offline

#4 6. 1. 2024 05:53:55

neutr
Člen
Registrace: 8. 3. 2007
Příspěvků: 3,462

Re: Načítání údajů z ARES-VYŘEŠENO

O žádném udělátku nevím, ale jsou dvě cesty jak to rozebrat.


1. Cesta makrem, kdy obyčejné čárky vyměníme za Chr(10) a tím se výstup odřádkuje. Na každém řádku zůstanou jen heslo : obsah. Když budete znát hesla ke svým požadavkům, tak stačí "parsovat" řádek, tedy spustit hledání hesla až do nejbližší čárky.


2. Cesta načtením textu a vložení do Calcu jako neformátovaný text. Mezi separátory uvedete čárku, pokud tam náhodou není. Jiný separátor nepotřebujete (mimo volby text v uvozovkách). Do Calku to vstoupí jako řádek s "x" slopupci. Potom bude asi lepší řádek transponovat na sloupec.
     Také je na zvážení, zda použít textové vyhledávání hesel, která znáte. S tím si poradíte snadno. Například =IF(LEFT(Buňka;3) = "dic";Text z buňky zůstává;"").


     Samozřejmě i v Calcu by šlo použít makro na jedno kliknutí zabudované do šablony pokud operace potřebujete často.


Moje e-mailová adresa
Pokud je Váš problém vyřešen, označte prosím svůj příspěvek za "VYŘEŠENÝ"
Zlepšíte orientaci při vyhledávání řešení JAK OZNAČIT TÉMA ZA VYŘEŠENÉ

Offline

#5 6. 1. 2024 17:21:07

ludviktrnka
Člen
Registrace: 9. 7. 2009
Příspěvků: 699

Re: Načítání údajů z ARES-VYŘEŠENO

Díky - neutr - nějak jsem to zbastlil. Trochu je tam problém s tím že čárky mohou být i v argumentech, ale dalo se to překonat. Zároveň je riziko že hledané heslo bud součástí i jiných hesel (např. "dic"). Nakonec mám ale pocit že to rozdělování na řádky ani není nutné. Jaké to má výhody? Existuje i jakási novější funkce v novějším LO: =PARSEJSON(JSON,Pattern). Bohužel musím mít z různých důvodů starší office. Tož můj makro bastl:

dIco = list.getCellByPosition(sloupec, radek).value
		
	xmlHtp = CreateObject("MSXML2.XMLHTTP")
	oleService = createUnoService("com.sun.star.bridge.OleObjectFactory") 
	XMLDOC = oleService.createInstance("Msxml.DOMDocument")

	if dIco <> 0 Then
	
		ico = Format(dIco,"00000000")

		sURL = "[url]https://ares.gov.cz/ekonomicke-subjekty-v-be/rest/ekonomicke-subjekty/[/url]" & ico
		'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico= ' STARÉ XML

		xmlHtp.Open "GET", sURL, False  
		xmlHtp.Send
		XMLDOC.loadXML xmlHtp.responseText
		strResponse = xmlHtp.responseText
		
		strResponse = Replace(strResponse, CHR(34), "") 'Odstranit veškeré uvozovky
		
		Dim Pattern(6) as string
		Pattern = Array("obchodniJmeno","nazevUlice","cisloDomovni","cisloOrientacni","psc","nazevObce","dic") 'hledaná hesla
				
		strResponse = Replace(strResponse, ", ", "+ZZZ+") 'nahradím čárku s mezerou nějakým jedinečným znakem
		
		For i = 0 to 6
				
			izacatek = InStr(1, strResponse, Pattern(i)) + LEN(Pattern(i)) + 1
			ikonec =  InStr(izacatek, strResponse,",")
			Hodnota(i) = MID(strResponse, izacatek, ikonec - izacatek)
			Hodnota(i) = Replace(Hodnota(i), "+ZZZ+", ", ")  'nahradím jedinečný znak za čárku s mezerou
		
			print Hodnota(i)
		
		Next i
		
	else
		msgbox ("Je zapotřebí nechat kurzor na ič",0,"Repete")

	end if

Editoval ludviktrnka (6. 1. 2024 17:37:41)


LibreOffice 5.4.

Offline

Zápatí