Salut à tous,
Je bosse actuellement sur un projet qui consiste à convertir des données issues d'un logiciel de télémétrie vers Excel, donc en CSV, et à appliquer des fonctions mathématiques internes au logiciel, à ces données. Concrètement, je possède un fichier au format du logiciel avec toutes les données (par exemple, régime moteur, vitesse etc.), à ce niveau là, pas de souci, j'arrive à les lire et à exporter les données brutes en CSV. Ce logiciel nous permet d'appliquer à ces différents canaux des fonctions mathématiques internes au logiciel (ça va des simples fonctions trigo à des filtres style Butterworth, la possibilité de dériver les canaux etc.), et ces expressions mathématiques, définies par l'utilisateur, sont consignées dans un fichier XML (on appelle ça des canaux math, tout simplement). Voici des exemples de canaux math (je précise que c'est du n'importe quoi, c'est juste un exemple pour que vous voyez à quoi ça ressemble):
Maintenant, ce que je souhaiterais faire, c'est, après avoir récupéré toutes ces fonctions du fichier XML (en désérialisant, pas de problème à ce niveau), évaluer toutes ces expressions pour avoir les valeurs finales et les écrire dans un fichier CSV (pour ce qui est des fonctions en elles-mêmes, pour certaines pas de souci puisqu'elles sont déjà présentes dans la bibliothèque Math, pour les autres j'ai réussi à trouver comment faire donc pour ça, ça devrait aller). Pour les canaux, comme je l'ai déjà dit, pas de souci, j'arrive à lire les données et les consigner dans des tableaux. Il me reste plus qu'à appliquer ces expressions à ces données... Et c'est évidemment là que je bloque. J'ai déjà quelques pistes, j'ai fait quelques recherches, je suis tombé notamment sur les arbres binaires, les parsers, etc. Mais j'ai quand même un peu de mal à mettre tout ça bien en place, notamment pour gérer les priorités, les parenthèses, les fonctions qui prennent des paramètres... Bref, je viens donc ici pour prendre conseil, si vous avez des idées à me suggérer pour partir sur de bonnes bases, pourquoi pas d'autres projets se rapprochant de celui-là... Je prends tout !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 pow('Vitesse', 2) / 'Rayon' abs('Rpm')/((sin('Rayon')+smooth('Rpm', 5))*cos('Brake'))
Merci d'avance !![]()
Partager