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
Répondre
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++).
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
est-ce que n'importe quel analyseur de fichiers odx disponible dans cpp? – Rajeev
pouvez-vous s'il vous plaît suggérer une troisième partie lib pour moi de le faire – Rajeev