Parsování souboru s podobným obsahem jako JSON – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Parsování souboru s podobným obsahem jako JSON – C / C++ – Fórum – Programujte.comParsování souboru s podobným obsahem jako JSON – C / C++ – Fórum – Programujte.com

 

Spuštěný nový filmový web Filmožrouti.cz — vše o Avengers, Pacific Rim, Thor, Star Wars…
richard.zavodny0
Návštěvník
9. 6. 2018   #1
-
0
-

Ahoj, potřebuju naparsovat soubor s podobným obsahem jako JSON a přistupovat k němu určitým způsobem.

Příklad souboru:
 

zavod = {
    misto = "Opava",
    datum = "19.10.2017",
    skoly = {
        {
            nazev = "ZŠ Englišova",
            body = "0",
            soutezici = {
                {
                    jmeno = "Petr Novák",
                    pohlavi = "m",
                    rocnik = "2005",
                    vysledky = {
                        beh60 = "8.5",
                        beh1500 = "05:43,2",
                        dalka = "421",
                        micek = "42.23",
                        splh = "5.6"
                    }
                }
            }
        }
    }
}

Chtěl bych k němu přistupovat následujícím způsobem.
 

NĚJAKÝ TYP bla = parseFile(std::string filePath);

bla.zavod.misto;
bla.zavod.datum;
bla.zavod.skoly[0].nazev;
bla.zavod.skoly[0].body;
bla.zavod.skoly[0].soutezici[0].jmeno;
bla.zavod.skoly[0].soutezici[0].pohlavi;
bla.zavod.skoly[0].soutezici[0].rocnik;
bla.zavod.skoly[0].soutezici[0].vysledky.beh60;
bla.zavod.skoly[0].soutezici[0].vysledky.beh1500;
bla.zavod.skoly[0].soutezici[0].vysledky.dalka;
bla.zavod.skoly[0].soutezici[0].vysledky.micek;
bla.zavod.skoly[0].soutezici[0].vysledky.splh;

První problém je samotné parsování, tady nevím, za který konec to vzít. Rozkouskovat to podle nějakého znaku (",", "}") nejde, protože mi vznikne mnoho nesmyslných částí.

Další problém je přístup k již naparsovaným hodnotám. Nejsem si úplně jistý, zda-li je to výše uvedeným způsobem možné.

Děkuji moc. :)

Nahlásit jako SPAM
IP: 89.24.189.–
Programátor, Kóder, Grafický designér, Kritik, zastánce Open-Source a Linuxu.
KIIV
~ Moderátor
+43
God of flame
9. 6. 2018   #2
-
0
-

Rozparsovat to pujde, pristup by ale byl spise neco jako  bla["zavod"]["skoly"][0]["soutezici"]...

To co bys chtel, to by muselo byt proste zkompilovane podle datoveho schematu a i parsovani by bylo pomerne striktni.

Parsovani se dela pomoci "tokenizace", jako ze to rozdelis na jednotlive tokeny typu  "{" "}" "," klic, hodnota  a tak

Nahlásit jako SPAM
IP: 178.41.247.–
Program vždy dělá to co naprogramujete, ne to co chcete...
richard.zavodny0
Návštěvník
9. 6. 2018   #3
-
0
-

#2 KIIV
Jo, tak tady ten přístup k těm datům mi nevadí. :) Stále je to dostatečně přehledné. Nějaký pseudokód pro tu tokenizaci by nebyl? A bla bude asi vektor ne?

Nahlásit jako SPAM
IP: 89.24.189.–
Programátor, Kóder, Grafický designér, Kritik, zastánce Open-Source a Linuxu.
KIIV
~ Moderátor
+43
God of flame
9. 6. 2018   #4
-
0
-

Bla bude spis mapa. Vektor bude ten seznam skol a studentu.

Na parsovani bude potreba nejaky stavovy automat. Neco jako jestli cekas uz na zacatku { nebo znaky (alias klic). Muzes se inspirovat Jsoncpp libkou. Tam se ale vzdy zacina objektem - { }  pak seznamy jsou v [ ... ] a tak dale.

Nahlásit jako SPAM
IP: 178.41.247.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+14
Guru
9. 6. 2018   #5
-
0
-

#4 KIIV
Zkus si konvertovat do JSONu třeba číslo 42. Dostaneš dvoubajtový string "42".

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d46a:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
KIIV
~ Moderátor
+43
God of flame
9. 6. 2018   #6
-
0
-

#5 Kit
zrovna v jsoncpp se cislo 42 zapise jako cislo. Kdyz mi nekdo poslal "42", tak uz na to ani nefungovala metoda asInt(), protoze je to prece retezec :)

Nahlásit jako SPAM
IP: 178.41.247.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+14
Guru
9. 6. 2018   #7
-
0
-

#6 KIIV
Chtěl jsem tím sdělit, že JSON nemusí začínat znakem "{" nebo "[". Když kóduješ string "42", tak je výstup čtyřbajtový - včetně uvozovek.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d46a:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
MilanL+1
Věrný člen
11. 6. 2018   #8
-
0
-

nebylo by lepší zkusit si vytvořit "uzlování" - Node Tree a naparsovat do toho?

Myslím, že by se tam pak dali případně ošetřit i konverze typů podle nějaké šablony.

Nahlásit jako SPAM
IP: 91.139.9.–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 243 hostů

Podobná vlákna

Parsování souboru — založil oxidián

Parsování souboru — založil cniry

Datum jako název souboru — založil Karel

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032018 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý