4-7. Manipuler les données avec MUSTIG

4-7-1. Importer des données

Lire des données formatées

Lire des fichiers binaires

L'acquisition de donnée

4-7-3. Exporter des données.

Exporter des données formatées en utilisant le presse-papiers

Ecrire des fichiers de données

4-7-4. Les types de données

Les types flottants : R4, R8

Les types complexes : C8, C16

Les types entiers : I1, I2, I4

Définir le type produit par un module d'entrée scalaire

Quelle est la précision des calculs ?

Convertir les types de données

Décaler les bits pour limiter la précision

4-7-5. Les chaînes de caractère

Entrer une chaîne

Regarder une chaîne

Ajouter un changement de ligne à une chaîne

Concaténer deux chaînes en une seule

Extraire une sous chaîne

Convertir une chaîne en un nombre

Convertir un nombre en une chaîne

Convertir un nombre entier en une chaîne de chiffres binaires

Extraire un nom variable dans une chaîne

Calculer la longueur d'une chaîne

Vérifier si deux chaînes sont égales

Obtenir le code ASCII d'un caractère

Transformer une chaîne formatée en un vecteur de chaînes

Exemple: Lire un fichier de données formaté ou chaîne

 

Les données sur lesquelles on travaille peuvent être produites à l'intérieur de MUSTIG, soit en utilisant un module Valeur scalaire ou vectoriel, soit en utilisant des macros de Bibliothèque (Dirac, Sinus, Bruit,...) cela peut être combiné pour créer le signal désiré. Elles peuvent aussi être importées de l'extérieur en lisant des fichiers de données avec MUSTIG. Les modules qui opèrent sur les fichiers sont dans la boîte Fichier de la Bibliothèque.

4-7-1. Importer des données

Des données externes peuvent bien sûr être importées et peuvent être traitées par MUSTIG. Les fichiers de données binaires 1d ou 2D standards peuvent être lus en utilisant les macros proposées dans les bibliothèques. Les modules élémentaires sont disponibles pour créer des macros personnalisées s'adaptant aux formats de fichiers de données plus spécifiques.

Lire des données formatées

Un des moyens les plus simples est utiliser le " Copier Coller " entre applications pour les données formatées : par exemple, vous copiez les données d'une feuille de calcul, et vous les collez à l'intérieur d'un module Valeur en mode d'édition (voir Editer un texte). Cependant, seulement de petites quantités de données peuvent être importées de cette manière.

Les fichiers de données ASCII formatés, quelle que soit leur complexité, peut être lu en utilisant des modules qui opèrent sur les chaînes de caractères (voir Lecture d'une chaîne de caractères). Ces modules sont dans la boîte Caract de la Bibliothèque.

La macro ASCII Read/li/co de la section Fichiers de la Bibliothèque permet de lire la plupart des fichiers ASCII 1D ou 2D directement.

Lire des fichiers binaires.

Les opérateurs pour lire des fichiers binaire couvrent tous les types de fichiers habituels (IEEE Format). Vous pouvez commencer à lire à l'intérieur du fichier n'importe où, choisir le type des données à lire (voir des Types de données) et le nombre d'échantillons à lire. Ces macros sont dans la boîte Fichier dans la Bibliothèque : regardez leur aide en ligne (Alt+H) pour connaître leurs caractéristiques.

Si vous devez lire des fichiers plus particuliers (avec des en-tête de texte par exemple), vous pouvez modifier les macros proposées ou même en créer de nouvelles en utilisant les modules élémentaires trouvés dans le chapître Fichier / Les modules de base de la Bibliothèque.

Notez qui si vous aviez utilisé une routine C ou Fortran pour lire les données d'un format très particulier avant d'acheter MUSTIG, ce peut être plus commode de connecter votre routine avec MUSTIG en utilisant les possibilités d'interfaçage externe (voir Interfacer une routine externe).

L'acquisition de données

Les systèmes d'acquisition de donnéesétant très spécifiques, il n'y a aucun opérateur dédié pour acquisition de données dans la version standard de la bibliothèque.

Les cartes SoundBlasterTM

La version PC standard de MUSTIG contient des macros spécifiques pour piloter les cartes SoundBlasterTM. Cela permet de développer de vraies applications de traitement de données en temps réel à bas-prix.

Les cartes ComputerBoardsTM

Une interface optionnelle a été développée pour créer une acquisition de données et des systèmes detraitement avec des cartes ComputerBoardsTM. Cette interface permet de construire rapidement des applications temps réel opérationnelles et conviviales : acquisition de données, contrôle en ligne, traitement de données.

Cartes DSP

Une carte DSP temps réel (OROS-AU32) a aussi été connectée avec MUSTIG, permettant de créer des systèmes de traitement en temps réel très fiables. Une deuxième carte DSP est actuellement adaptée pour MUSTIG.

Les autres cartes

Si vous voulez utiliser MUSTIG pour acquérir les données à partir d'autres cartes, vous pouvez créer une interface à partir des bibliothèques de programmes C spécifiques fournies par la plupart des développeurs de cartes : écrivez vos routines personnalisées et connectez-les avec MUSTIG (voir Interfacer une routine externe).

4-7-3. Exporter des données.

Les données produites par MUSTIG peuvent bien sûr être exportées vers des fichiers de données ou d'autres applications.

Exporter des données formatées en utilisant le presse-papiers

Le " copier / coller " (Ctrl+C / Ctrl+V)permet d'exporter directement des petites quantités de données texte dans un traitement de texte, logiciel de dessin ou de feuille de calcul .

Ecrire des fichiers de données

Vous pouvez directement écrire des fichiers binaires 1D ou 2D dans le format standard IEEE. Si vous voulez écrire vos données dans un format personnalisé, par exemple adapté à un autre logiciel, utilisez les modules de base fournis. Tous ces éléments sont dans la section Fichier de la Bibliothèque.

Les données ASCII peuvent être formatées en utilisant les modules de traitement des chaînes ds caractère disponible dans la section Caract de la Bibliothèque.

4-7-4. Les types de données.

Les types flottant : R4, R8,

Le type de données le plus fréquent dans MUSTIG est le nombre réel sur 32 bits (= 4 octets) (ou " R4 "). C'est le type par défaut de données produit par le module Valeur et par les macros qui construisent des signaux dans la section Entrées de la bibliothèque standard.

Un autre type de donnée flottant est le réel flottant double précision sur 64 bits (ou " R8 ").

Les types complexe : C8, C16,

Le type " complexe 64 bits " (ou " C8 ") est le type complexe par défaut. La version étendue est le type complexe double précision sur 128 bits (ou " C16 ").

Les types entier: I1, I2, I4,

Le type " entier 32 bits " (ou " I4 ") est le type du nombre entier par défaut. Il est utilisé pour exécuter des opérations logiques ou arithmétiques. Ce type, aussi bien que le type " complexe entier 64 bits " (ou " CI8 ") est utilisé pour l'adressage absolu des pixels dans les fenêtres de tracé.

Les autres types sont disponibles, mais principalement pour s'interfacer avec les fichiers de données ou les routines externes : entier 8 bits (ou " I1 "), entier 16 bits (ou " I2 ").

L'option Arithmétique Finie permet de spécifier la dimension des données bit à bit (de 1 à 64 bits) à tout point du graphe. Cela fait de MUSTIG un instrument puissant pour la compilation de silicium.

Fixer le type produit par un module d'entrée scalaire

Le module Valeur d'entrée scalaire dans Entrées de la Bibliothèque produit un nombre réel de 4 octets par défaut. Ces données réelles peuvent alors être converties en un nombre entier ou un réel double précision, ou tout autre type exigé par votre application.

Vous pouvez cependant produire un nombre entier de 4 octets (I4) ou un réel double précision (R8) directement à partir du module d'entrée scalaire en utilisant chacune des lettres suivantes avant la valeur :

d

Le nombre réel de précision double

i

Le nombre entier sur 4 octets

Des exemples sont montrés ci-dessous:

Quelle est la précision des calculs ?

Le type des données sur la sortie d'un module dépend des types des données à entrée. Par exemple, l'addition d'un réal et un complexe donne un complexe.

Il peut dépendre aussi des caractéristiques du la variable support à l'entrée : par exemple, la transformée de Fourier inverse donne un réel ou un complexe d'après la symétrie (attribut " demi " ) de l'entrée ou non.

Au contraire, ce type, qui est le même pour tous les points d'un signal, ne dépend pas des valeurs de l'entrée. Par exemple, on ne peut pas envisager que la racine carrée d'un nombre soit de type réel ou complexe d'après le signe du nombre réel à l'entrée.

Convertir les types de données

Vous pouvez vouloir convertir les données d'un type dans un autre, ou limiter la précision ou se conformer au type de données requis par une macro. Des modules sont disponible dans la section Opérations Élémentaire de la Bibliothèque pour convertir les données quand c'est nécessaire :

Fix1

Convertit un nombre réel en un nombre entier 1 octet (I1)

Fix2

Convertit un nombre réel en un nombre entier 2 octets (I2)

Fix

Convertit un nombre réel en un nombre entier 4 octets (I4)

Float

Convertis un nombre entier ou un réel double précision (R8) en un réel 4 octets (R4), convertit un complexe double précision (C16) en un complexe simple précision (C8)

Float8

Convertis l'entrée en un réel double précision (R8), convertit un complexe en un complexe double précision (C16)

nsFloat

Même que Float pour les données d'entrée non signées.

Vous pouvez aussi construire des nombres complexes à partir des parties réelle et imaginaire, ou au contraire extraire les parties réelle et imaginaire d'un nombre complexe. Les modules dédiés sont dans la section Complexes de la Bibliothèque :

Extrait la partie réelle de l'entrée nombre complexe

Extrait la partie imaginaire de l'entrée nombre complexe

Constructions un complexe à partir de sa partie réelle (entrée du haut) et sa partie imaginaire (entrée de gauche)

Étend un nombre réel en un complexe avec partie imaginaire nulle

Déplacer les bits pour limiter la précision

Bien que les opérations d'arithmétique entière soient exécutées sur des nombres entiers 32 bits, il est possible de faire des simulations en toute précision en ajoutant des macros de limitation faites d'opérateurs logiques. Par exemple, vous pouvez limiter la précision n'importe où à l'intérieur du graphe en laissant tomber un nombre donné de bits de poids faible en faisant un Shift vers la droite suivi par un Shift vers la gauche du même montant. Le module Shift est dans Opérations Élémentaires / Opérations Logiques de la Bibliothèque.

Cependant, si vos applications ont besoin d'exécuter souvent de telles opérations, nous recommandons fortement que vous utilisiez l'option Arithmétique Finie. Cette option puissante permet de fixer la précision des données à tout point du graphe, entre 1 et 64 bits. Cette dimension peut être spécifiée aussi pour les nombres en flottant comme (par exemple flottant 13 bits dont 7 après le point) . L'option Arithmétique Finie est très facile à utiliser et permet de développer rapidement et d'optimiser des appareils électroniques.

4-7-5. Les chaînes de caractères

Les modules spécifiques dans Caract de la Bibliothèque permettent d'entrer, de lire, de traiter et écrire des chaînes.

Entrer une chaîne

Le module vide avec une frontière spécifique premet d'entrer une chaîne. Faites glissez le module dans votre programme et tapez Majuscule+Ctrl+Clic pour entrer la chaîne. Vous pouvez changer la police de caractères, la taille et le style de la chaîne en utilisant les commandes du menu Polices de caractères sur la barre du haut.

Cependant vous ne pouvez pas mélanger plusieurs types ou tailles ou polices de caractères à l'intérieur d'un module d'entrée de chaîne.

Vous pouvez en utiliser un ou plusieurs des caractères spéciaux suivants pour formater explicitement la chaîne d'entrée :

\t

Tabulation

\n

Nouvelle ligne

Les caractères Tabulation et Nouvelle ligne peuvent être aussi entrés en utilisant directement la touche dédiée sur le clavier. Deux exemples de chaîne d'entrée formatée sont montrés ci-dessous:

Vous pouvez produire le caractère ASCII associé avec un nombre entier donné en utilisant le module Char :

 

Regarder une chaîne

Les chaînes sont vues en utilisant le module de sortie scalaire (Module ??????? dans la section Sorties de la Bibliothèque). Redimentionnez le module pour voir convenablement la chaîne entière.

Les caractéristiques du texte d'entrée ne sont pas prises en considération, seulement le contenu de la chaîne l'est. Vous pouvez changer la taille, police de caractères et style du texte affichés en utilisant des ordres du menu Polices de caractères sur la barre du haut.

Dans l'exemple ci dessous, la chaîne d'entrée en Courrier gras est vue en lettres Helvetica italiques :

Ajouter un saut de ligne à une chaîne

Le module Fin de ligne dans la section Caract de la Bibliothèque ajoute le ' Retour chariot' à une chaîne, comme montré dans l'exemple ci-dessous:

Concaténation de deux chaînes en une seule

Les chaînes peuvent être concaténées en utiliser le module de l'addition standard dans la face avant de la Bibliothèque :

Encore une fois, seulement le contenu de la chaîne est copié, les polices de caractères, styles et taille de caractères des chaînes ne sont pas pris en considération. Notez qu'aucun espace n'est inséré entre les deux sous chaînes : elles sont enchaînés strictement. Vous pouvez terminer bien sûr la chaîne passée à la borne gauche de l'additionneur par un caractère espace pour en insérer un entre les deux chaînes.

Extraire une sous chaîne

Vous pouvez extraire une sous chaîne incluse dans une plus grande chaîne en utilisant le module Lect_champ dans la section Caract de la Bibliothèque. Le même module est utilisé pour extraire une chaîne d'un fichier. Vérifiez l'aide en ligne du module pour savoir la fonction exacte de chaque borne.

Le module lit une sous chaîne définie par un format éditable, fait du nombre maximal de caractères à lire, suivi par un séparateur. Les séparateurs sont :

\t

Tabulation

\r

Return

\n

Le changement de ligne (Retour chariot)

Le module lit la sous chaîne à partir de la position du début sur la borne gauche et rend la chaîne extraite et la position du caractère qui suit la chaîne. Cette derniere peut être utilisée à son tour pour lire le prochain champ formaté. Si la chaîne extraite est un nombre, vous devez la convertir avant de l'utiliser comme un nombre (voir Convertir une chaîne en un nombre).

Un exemple d'utilisation est montré ci-dessous:

Convertir une chaîne en un nombre

Les chaînes faites de nombres peuvent être converties en valeurs numériques en utilisant le module Convert dans la section Caract de la Bibliothèque. Le type de données sur la borne de sortie est défini par le format éditable qui suit la syntaxe du langage C :

%f

Produit un nombre réel

%lf

Produit un nombre réel de précision double

%d

Produit un nombre entier

Des exemples sont montrés ci-dessous:

Convertir un nombre en une chaîne

Les valeurs numériques peuvent être converties en chaînes en utilisant le module Format dans la section Caract de la Bibliothèque. La chaîne sur la borne de sortie est définie par le format éditable qui suit la syntaxe du langage C : les lettres clés indiquent le type des données de l'entrée et un champ numérique facultatif met le nombre de caractères de la chaîne de sortie.

%f

Lit la valeur comme un nombre réel

%lf

Lit comme un nombre réel de précision double

%i

Lit comme un nombre entier

%li

Lit comme un nombre entier long

Des espaces sont produits si le nombre indiqué de caractères est plus grand que la longueur de la valeur d'entrée. Des exemples sont montrés ci-dessous:

Convertir un nombre entier en une chaîne de chiffres binaires

Vous pouvez aussi convertir un nombre entier en une chaîne faite de ses bits consécutifs en utilisant le module bits dans la section Caract de la Bibliothèque :

Extraire un nom de variable dans une chaîne

Vous pouvez extraire le nom d'une variable à tout point du graphe, dans ordre par exemple de l'inclure dans les textes du commentaire ou les courbes. Si le nom de la variable change dans le graphe, il changera aussi en conséquence :

Calculer la longueur d'une chaîne

La longueur d'une chaîne (en nombre de caractères) peut être calculée en utilisant le module Nbytes? dans la section Caract de la Bibliothèque :

Le même module est utilisé pour obtenir la longueur totale (en octets) d'un fichier ouvert précédemment .

Vérifier si deux chaînes sont égales

Le module standard qui vérifie l'égalité proposé dans les Opérations Élémentaires / Opérations Logiques de la Bibliothèque peut être utilisé pour vérifier si deux chaînes sont strictement égales. Soyez conscient que la comparaison est sensible à la casse :

Obtenir le code ASCII d'un caractère

Le module Fix dans la section Caract de la Bibliothèque rend le code ASCII du premier caractère dans la chaîne à l'entrée :

Transformer une chaîne formatée en un vecteur de chaînes

Le macro Chaines/nc dans Caract de la Bibliothèque permet d'éclater une chaîne d'entrée unique, faite de plusieurs lignes séparées par un changement de ligne, en un vecteur de chaînes. Chaque élément du vecteur de la sortie contient une ligne de la chaîne de l'entrée. Le nom de la variable créée (/nc par défaut) peut bien sûr être édité et peut être changé (voir Editer un module).

Le nombre maximal d'éléments dans le vecteur de la sortie est fixé en cliquant deux fois sur la macro.

L'exemple ci dessous débute avec une chaîne qui contient quatre lignes séparées par un retour chariot. La macro Chaînes produit un vecteur dépendant de la variable /nc et contenant quatre éléments égals aux quatre lignes.

Exemple: Lire un fichier de données formaté ou une chaîne formatée

Le module de traitement des chaînes ds caractères peut être combiné pour lire des fichiers de données ASCII formatés, quelle que soit leur complexité. Supposons que vous voulez lire le fichier de données suivant nommé DataFile.txt :

First Experience

Number of samples : 3

10.4

6.023e2

-503e-2

End

Vous pouvez construire un programme MUSTIG pour lire l'en-tête, lire le nombre d'échantillons, créer un vecteur de la longueur appropriée, et lire les valeurs. Un exemple d'un tel programme est montré ci-dessous. En plus de lire les données simplement, il extrait aussi une partie de l'en-tête et la reformate en une chaîne qui peut alors être affichée dans les fenêtres Image par exemple (voir les fenêtres Image).

Vous pouvez utiliser aussi la macro toute prête ASCIIRead/li/co dans Fichiers de la Bibliothèque. Le tableau de bord intermédiaire de cette macro permet de choisir le nombre de lignes à sauter au commencement du fichier de données (en-tête), et le nombre maximal de lignes et colonnes. Le nombre de lignes et colonnes est calculé automatiquement :

L'en-tête et les données sont passées à l'environnement MUSTIG directement, comme montré dans le programme ci-dessous :