2017-07-20 5 views
-5

Je veux analyser un fichier odx-f en utilisant C++. Mais je ne peux pas trouver un seul exemple de la façon de l'analyser. Je suis nouveau sur ce site, pouvez-vous s'il vous plaît m'aider à résoudre ce problème avec un exemple de code? Merci d'avance.Comment analyser le fichier odx-f dans cpp

+3

Lire/en apprendre davantage sur la spécification du format de fichier et analyser en conséquence. Tous les fichiers sont un tableau d'octets. La spécification de format explique ce que ces octets signifient. Ou utilisez des bibliothèques tierces qui font le travail pour vous. – Ron

+0

est-ce que n'importe quel analyseur de fichiers odx disponible dans cpp? – Rajeev

+0

pouvez-vous s'il vous plaît suggérer une troisième partie lib pour moi de le faire – Rajeev

Répondre

0

Fichiers odx-f contenant les données du conteneur flash. Pour analyser un fichier .odx-f en C++, vous pouvez utiliser n'importe quel analyseur XML (c'est-à-dire rapidxml, xerces, LibXML2 avec C++ Wrapper, ...). L'exemple suivant utilisera rapidxml pour imprimer le SHORT-NAME de tous les ECU-MEMS et ECU-MEM-CONNECTORS. Pour accéder à tous les autres éléments sous ECU-MEM, le même mécanisme peut être adapté (cela dépend des données que votre application requiert du fichier .odx-f).

#include <iostream> 

#include "rapidxml/rapidxml.hpp" 
#include "rapidxml/rapidxml_utils.hpp" 

int main(int argc, char *argv[]){ 
    rapidxml::xml_document<> doc; 
    rapidxml::file<> xmlFile("myFile.odx-f"); 
    doc.parse<0>(xmlFile.data()); 
    rapidxml::xml_node<>* flashContainer = doc.first_node("ODX")->first_node("FLASH"); 
    if(flashContainer){ 
    std::cout << flashContainer->first_node("SHORT-NAME")->value() << std::endl; /* prints the shortname of the flash container */ 
    for (rapidxml::xml_node<>* ecuMem = flashContainer->first_node("ECU-MEMS")->first_node("ECU-MEM"); ecuMem; ecuMem = ecuMem->next_sibling("ECU-MEM")) { 
     /* iterates over all ecu memory descriptors */ 
     std::cout << ecuMem->first_node("SHORT-NAME")->value() << std::endl; /* prints the shortname of the ecu memory descriptor */ 
    } 
    for (rapidxml::xml_node<>* ecuMemCon = flashContainer->first_node("ECU-MEM-CONNECTORS")->first_node("ECU-MEM-CONNECTOR"); ecuMemCon; ecuMemCon = ecuMemCon->next_sibling("ECU-MEM-CONNECTOR")) { 
     /* iterates over all ecu memory connectors */ 
     std::cout << ecuMemCon->first_node("SHORT-NAME")->value() << std::endl; /* prints the shortname of the ecu memory connector */ 
    } 
    } 
    return 0; 
} 

Il existe également quelques bibliothèques disponibles pour analyser odx; Habituellement, ils seront coûteux car ils ciblent l'utilisation commerciale, mais il existe une bibliothèque sous licence LGPLv2 appelée ODX-Lib. Cependant il n'est pas mis à jour depuis 2014 et en Java (JNI requis pour accéder à partir de C++).