« Découvrir Scilab/Gestion des fichiers » : différence entre les versions
Contenu supprimé Contenu ajouté
→Découper une ligne en colonnes : export vers Programmation#Analyse et construction de chaînes de caractères |
, dans [] car la virgule n'est pas systématique ; remise de id=... ; mise en cohérence |
||
Ligne 51 :
Il est possible d'appliquer un format aux données dans un format proche du Fortran.
<span id = "read1">''Syntaxe :''</span>
<source lang="scilab" id = "write2">
write (fichier, a
[x]=read (fichier ,m ,n
</source>
Ligne 68 :
=== Exemples ===
<source lang="scilab">
x=linspace(0, 2*%pi, 100)';
y=sin(x);
Ligne 76 :
Cet exemple écrit la table de la fonction sinus dans le fichier <code>sinus.txt</code>, chaque ligne représente un point.
<source lang="text">
sinus.txt:
0.000 0.000
Ligne 88 :
Si le format est omis, Scilab décide d'un format approprié.
La commande :
<source lang="scilab">
write('sinus.txt', [x y]);
</source>
écrira le fichier suivant :
<source lang="text">
sinus.txt:
0.0000000000000000 0.0000000000000000
Ligne 105 :
Inversement le fichier <code>temperature.txt</code> contient l'heure, la temperature et l'humidité relevé.
<source lang="text">
temperature.txt:
18 -1 86
Ligne 112 :
</source>
Sa lecture se fera par la commande <code>read()</code> :
<source lang="scilab">
a=read ("temperature.txt", -1, 3);
</source>
Ligne 121 :
La matrice <code>a</code> de type flottant contient :
<source lang="text">
a =
Ligne 140 :
== Sauvegarde de variables en binaire ==
Il est possible d'exporter le résultat d'un calcul dans un fichier, ce qui permet de le réutiliser pour une autre fois. Ceci se fait avec la commande <code
<source lang="scilab">
save (fichier, a, b, c, ...)
</source>
Cela enregistre les variables <code>a</code>, <code>b</code>, <code>c</code>, ..., dans le fichier de nom <code>fichier</code>.
Si aucune variable n'est spécifiée, toutes les variables de l'environnement de travail sont enregistrées.
Ce résultat peut ensuite être réimporté avec la commande <code
<source lang="scilab">
load (fichier, a, b, c, ...)
</source>
Cela lit les variables <code>a</code>, <code>b</code>, <code>c</code>, …, présentes dans le fichier de nom <code>fichier</code>. Il s'agit du nom des variables tel qu'il a été spécifié lors de la commande <code>save</code>. De même que précédemment, si aucun variable n'est spécifiée, toutes les variables présentes dans le fichier sont chargées.
Le fichier produit est un fichier binaire. Chaque variable est représentée par :
* le nom de la variable, sur 24 octets :
** chaque caractère correspond à un code : 10 à 35 pour les minuscules de « a » à « z », -35 à -10 pour les capitales de « Z » à « A » ; taper <code
** le nom se termine par le code 40 ;
* un code représentant le type de la variable : de 1 pour une matrice de réels en virgule flottante, 2 pour un polynôme, 10 pour un chaîne de caractères… taper <code
* puis suit la description de la variable, notamment le nombre d'éléments pour les matrices, chaînes… cette description dépend du type de la variable ;
* enfin vient la valeur de la variable.
L'instruction <code
== Enregistrer un graphique ==
Scilab permet de sauvegarder des graphiques sous plusieurs formats. Il faut au préalable donner un numéro à la fenêtre graphique, en indiquant <code
La syntaxe générale des fonctions d'export est la suivante :
<source lang="scilab">
xs2format (id, fichier)
</source>
où
* <code>id</code> :
* <code>fichier</code> :
Les fonctions sont :
* <code>xs2bmp</code> : format BMP (''bitmap'', Microsoft Windows);
Ligne 186 ⟶ 190 :
''Exemple :''
[[Image:exemple_scilab_sin_cos.gif|
<source lang="scilab">
f = gcf ();
x = linspace (0, 2*%pi, 200)';
Ligne 194 ⟶ 199 :
</source>
L'export de graphiques sous scilab semble se faire par copie d'écran, cela signifie qu'il peut y avoir des problèmes si lors de la commande <code>
== Sons ==
Lorsque la variable ''x'' est un vecteur, on peut le sauvegarder sous la forme d'un <font id="son2">son</font>, dans un fichier de type <
: ''s''(''t<sub>i</sub>'' ) = ''x''(''i'' )
avec
: ''t<sub>i</sub>'' = ''i''/ƒ
ƒ étant la fréquence d'échantillonnage. Par défaut, ƒ vaut {{unité|22050|hertz}} (une valeur de ''x'' correspond à 1/{{formatnum:22050}} seconde).
<source lang="scilab">▼
</source>
▲La création du fichier se fait avec la fonction <code><font id="savewave1">savewave</font></code>
▲ savewave(<nowiki>'</nowiki>''nom_de_fichier''<nowiki>'</nowiki>, x)
▲'''il faut bien s'assurer qu'il s'agit d'une matrice colonne'''.
On peut aussi définir une autre fréquence d'échantillonnage entière :
<source lang="scilab">▼
playsnd(x)▼
<source lang="scilab">
x = loadwave('nom_de_fichier')
</source>
chaque ligne de la matrice correspondant alors à un canal. On peut ensuite jouer ce son dans Scilab avec l'instruction <code id="playsnd1">playsnd()</code>
<source lang="scilab">
</source>
''Voir aussi [[Découvrir Scilab Graphiques et sons#son1|Graphiques et sons]].''
Ligne 225 ⟶ 241 :
Différentes fonctions sont directement inspirées de la syntaxe du langage C.
* <source lang="scilab" id = "mopen1">
[fd, err] = mopen (fichier, mode)
</source> Ouverture du fichier de nom <code>fichier</code>. Le mode d'ouverture
* <source lang="scilab" id = "mfprintf1">mfprintf (fd, format [, x1 [, x2,
</source>
* <source lang="scilab" id="mfscanf1">
y(1,1:3) = mfscanf(fd, '%f %f %f\n')
</source> balaie ''(scan)'' le fichier numéro <code>fd</code> de manière séquentielle, et récupère les trois premières données et les met dans la première ligne d'une matrice de trois colonne appelée ''y'' ; <source lang="scilab">
y(2,1:3) = mfscanf(fd, '%f %f %f\n')
</source> continue l'opération de rapatriement et met les données dans la deuxième ligne de la matrice ;
* <source lang="scilab" id = "mclose1">
mclose (fd)
</source> Ferme le fichier d'identifiant <code>fd</code>
Ligne 246 ⟶ 262 :
La commande <code>fscanfMat</code> permet de lire directement une matrice dans un fichier texte (ASCII ou UTF-8). Dans sa syntaxe de base
<source lang="scilab">
M = fscanfMat('nomfichier');
</source>
la fonction crée une matrice de nombres M à partir du fichier texte <code>nomfichier</code>, en éliminant l'en-tête (les premières lignes qui contiennent des caractères non numériques). On peut lui demander de mettre le texte de l'en-tête dans une variable :
<source lang="scilab">
[M, entete] = fscanfMat('nomfichier');
</source>
Il est possible d'indiquer le format des données :
<source lang="scilab">
M = fscanfMat('nomfichier', 'format');
</source>
ou ''format'' est une chaîne de caractère qui peut être de la forme <code>%''type''</code>, par exemple :
* <code>%e</code> : réel en notation exponentielle ;
Ligne 272 ⟶ 294 :
La fonction <code>mgetl</code> lit une ou plusieurs lignes d'un fichier texte
▲<source lang=scilab>
<source lang="scilab">
txt = mgetl ('nomfichier', m)
txt = mgetl (fd, m)
</source>
Si le fichier a été ouvert (avec <code>mopen</code>, il dispose d'un descripteur <code>fd</code> qui permet d'y faire référence ; sinon, on peut utiliser le nom du fichier. Si ''m'' est omis ou vaut -1, la fonction lit toutes les lignes. Si ''m'' est un entier strictement positif, la fonction lit ''m'' lignes (accès séquentiel). La variable <code>txt</code> est une matrice colonne, chaque ligne correspondant à une ligne du fichier.
Ligne 283 ⟶ 307 :
Si l'on connaît les positions (index) des débuts de colonne, les nombres c1, c2, …, cn, on peut utiliser la commande <code>part()</code> pour extraire une colonne. Par exemple, pour extraite la colonne 5 :
<source lang="scilab">
p = part(txt, [c5, c6 - 1])
</source>
On peut également séparer les différentes colonnes pour les mettre dans un vecteur avec
<source lang="scilab">
cellules = strsplit(txt, [c1, c2, …, cn])
Ligne 292 ⟶ 319 :
Une ligne — une chaîne de caractères — contient souvent des délimiteurs. S'il s'agit d'une chaîne de caractères fixes, on peut utiliser la commande <code>tokens()</code> :
▲<source lang=scilab>
<source lang="scilab">
t = tokens('a = 5', '=')
</source>
crée la matrice <code>['a ' ; '=' ; ' 5']</code>.
Si les séparateurs sont variables, on a intérêt à faire appel aux expressions régulières (voir ''[[../Programmation#Expressions régulières|Programmation > Expressions régulières]]''). Par exemple, si les colonnes sont complétées par des caractères d'espacement (espaces, tabulations) en nombre indéterminé, on peut utiliser
<source lang="scilab">
cellules = strsplit(txt, '/\s+/)
</source>
Considérons par exemple le fichier <code>roisdefrance.txt</code>
Clovis Ier 466-511▼
<source lang="text">
Clodomir 495-524▼
Théodebert Ier 504-548 ▼
</source>
La séparation entre le nom du roi et la date est constituée de deux espaces ou plus. On veut créer une matrice dont la première colonne contient le nom du roi, la deuxième sa date de naissance et la troisième sa date de mort. On peut par exemple écrire
<source lang="scilab">
// lecture du fichier
|