Parsowanie według określonego schematu.

0

Cześć.

Mam następujący problem:
Chciałbym umieścić poniższe wartości wycięte z kodu w tabeli.

Językiem programowania, który mnie interesuje jest C++ (projekt w Qt), ewentualnie jakiś język skryptowy, np. Python.
Dopuszczam używanie bibliotek i myślałem tutaj np. o bibliotece Boost, jednak nie potrafię jej użyć w moim przypadku.

Przykładowy kod:

<plik>
<t typ="modul" WARTOSC="7" DRUGA_WARTOSC="657" COS_INNEGO="121" JESZCZE_COS_INNEGO="9" />
<t typ="ultra" WARTOSC="5" DRUGA_WARTOSC="1" COS_INNEGO="4" JESZCZE_COS_INNEGO="5" />
<t typ="quad" WARTOSC="9" DRUGA_WARTOSC="23" COS_INNEGO="546" JESZCZE_COS_INNEGO="6" />
</plik>

Proszę o pomocne podpowiedzi.
Z góry dziękuję.

dodanie znacznika <code class="xml"> - furious programming

0

No w pythonie to będzie jedna linijka kodu, ale napisz dokładnie CO chcesz z tego wyciągnąć i w jakiej postaci chcesz to mieć. Bo

Chciałbym umieścić poniższe wartości wycięte z kodu w tabeli.

niewiele mi mówi... W tabeli? W tablicy? Jednowymiarowej? Wielowymiarowej? W mapie? Z kluczami? Same wartości? Same liczby z tego kodu?

0

W tabeli, będzie do tego interfejs graficzny.
Mniej więcej tak:

             WARTOSC      DRUGA_WARTOSC      COS_INNEGO        JESZCZE_COS_INNEGO
modul           7 ...
ultra
quad

Wartości te będą w przyszłości porównywane i zmieniane.

0

No możesz się tu bawić w parsowanie xmla, ale jeśli ten plik wejściowy wygląda dokładnie tak jak pokazałeś to wystarczy ci prosty regexp.

import re


def main():
    source="""
    <plik>
<t typ="modul" WARTOSC="7" DRUGA_WARTOSC="657" COS_INNEGO="121" JESZCZE_COS_INNEGO="9" />
<t typ="ultra" WARTOSC="5" DRUGA_WARTOSC="1" COS_INNEGO="4" JESZCZE_COS_INNEGO="5" />
<t typ="quad" WARTOSC="9" DRUGA_WARTOSC="23" COS_INNEGO="546" JESZCZE_COS_INNEGO="6" />
</plik>
    """
    pattern = re.compile("\s*(\w*?)=\"(.*?)\"\s*")
    table = {}
    for line in source.split("\n"):
        values = {key: value for key, value in pattern.findall(line)}
        if values:
            table[values["typ"]] = values
    print(table)

main()
0

Dziękuję, spróbuję jednak to zrobić w C++. Poczytam trochę i w razie problemów się odezwę.

1 użytkowników online, w tym zalogowanych: 0, gości: 1