Bonjour,
Matlab R2019B
tous les workpackages (si besoin)
voici le contexte :
Nous faisons de l'analyse de scans dans un labo de métrologie. On compare des capteurs entre eux. Pour cela nous devons manipuler des milliers de données et nous avons des scripts complexes qui se chargent d'analyser et de tracer les courbes.
Pour répondre à une problématique de traçabilité interne et de gestion aisées des variables (qui changent à chaque scan) nous avons un fichiers excel qui reprends ces variables et nos commentaires. (fichier en pièce jointe)
voici la problématique:
il se glisse parfois des erreurs dans ce fichier excel, une lettre à la place d'un chiffre, une mauvaise syntaxe etc.
Nous souhaitons donc analyser en amont du script ce fichier.
Problème: lors de l'import du fichier excel toutes les cellules sont sous forme de texte. Si je veux vérifier qu'une ligne comprend des chiffres, je dois les transformer en préalable (avec string2num par exemple) Or si j'utilise ce type de fonction et qu'il y a une erreur, le script s’arrête ( logique) en signalant une erreur. Retrouver exactement d'où provient l'erreur peut être très long. nous souhaiterions avoir un système qui nous indique exactement où est l'erreur.
exemple colonne A, ligne 3
"ns 51:53"
"ns" est le numéro du scan
"51:53" indique que le fichier compile les scan 51 52 et 53.
une erreur typique pourrait être
"ns 5i:53" une lettre a été tapée par erreur par l'opérateur.
On utilise les fonctions strtok et strtrim pour séparer les éléments et ensuite analyser les éléments séparément. Lorsque Matlab convertit le fichier excel, on se retrouve avec des cellules contenant uniquement des string. si je veux pouvoir vérifier que j'ai bien deux chiffres (51 et 53) je dois... convertir la cellule (string2num) et donc ça arrête le script.
Piste suivie:
utiliser les caractère Ascii.
je pense qu'il y a une meilleure façon de procéder mais je ne vois pas laquelle pour le moment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 mystring='51:53' L=length(mystring) parity = mod(L,2) separ = (L+parity)/2 Ascii = double(mystring) Ascii(separ)=48 % the ':' is converted into any numerical ascii character ifand(Ascii<58,Ascii>47) % test all ascii values. If its numerical , its comprised between 48 and. "Ok!" else "Erreur!"
les fonction assert et isa sont intréssante, boite de dialogue etc.. mais encore une fois on doit d'abord convertir la cellule et ça coupe le script en cas d'erreur :/
Merci à vous.
Cordialement,
Cédric
Partager