Guide de programmation de StarOffice 8 pour BASIC
只搜尋這本書
以 PDF 格式下載這本書 (1328 KB)

Chapitre 3 Bibliothèque d'exécution de StarOffice Basic

Les sections suivantes présentent les fonctions centrales de la bibliothèque d'exécution.

Fonctions de conversion

Il arrive souvent qu'une variable d'un certain type doive être convertie dans un autre type.

Conversions de type implicites et explicites

Le moyen le plus simple de convertir le type d'une variable est d'utiliser une assignation :

Dim A As String
Dim B As Integer

B = 101 A = B

Dans cet exemple, la variable A est une chaîne, tandis que la variable B un nombre entier. StarOffice Basic s'assure que la variable B est convertie en chaîne pendant l'assignation à la variable A. Cette conversion est bien plus complexe qu'il n'y paraît : l'entier B est stocké en mémoire de travail sous la forme d'un nombre sur deux octets. A, en revanche, est une chaîne de caractères, et l'ordinateur enregistre chaque caractère (chaque chiffre) dans une valeur sur un ou deux octets. Pour cela, avant de copier le contenu de B dans A, B doit être converti au format interne de A.

Contrairement à la plupart des autres langages de programmation, Basic effectue ce type de conversion de manière automatique. Cependant, ceci peut avoir des conséquences désastreuses. En y regardant de près, le code suivant

Dim A As String
Dim B As Integer
Dim C As Integer

B = 1
C = 1
A = B + C

qui, à première vue, semble évident, se révèle en fait assez trompeur. L'interpréteur Basic commence par calculer le résultat de l'addition, puis convertit celui-ci en chaîne, ce qui donne la chaîne 2.

Si, en revanche, l'interpréteur Basic commence par convertir les valeurs de départ B et C en chaînes, puis applique l'opérateur plus au résultat, cela produit la chaîne 11.

Le même principe s'applique lorsque vous utilisez des variables de type Variant :

Dim A
Dim B
Dim C

B = 1
C = "1"
A = B + C

Comme les variables de type Variant peuvent contenir des nombres et des chaînes, il est difficile de prévoir si la variable A recevra le nombre 2 ou la chaîne 11.

Vous pouvez éviter les erreurs liées aux conversions de type implicites en vous astreignant à une certaine rigueur dans la programmation, par exemple en évitant d'utiliser le type de données Variant.

Pour éviter d'autres erreurs dues aux conversions de type implicites, StarOffice Basic propose un éventail de fonctions de conversion, que vous pouvez utiliser pour définir quand convertir le type des données d'une opération :

  • CStr(Var) : convertit tout type de données en chaîne de caractères.

  • CInt(Var) : convertit tout type de données en valeur entière.

  • CLng(Var) : convertit tout type de données en valeur longue.

  • CSng(Var)  : convertit tout type de données en valeur simple.

  • CDbl(Var) : convertit tout type de données en valeur double.

  • CBool(Var) : convertit tout type de données en valeur booléenne.

  • CDate(Var) : convertit tout type de données en date.

Vous pouvez vous servir de ces fonctions de conversion pour définir la façon dont StarOffice Basic doit effectuer ces opérations :

Dim A As String
Dim B As Integer
Dim C As Integer

B = 1 C = 1

A = CStr(B + C)      ' B et C sont tout d'abord additionnés, puis
                     ' convertis (on obtient le chiffre 2)
A = CStr(B) + CStr(C)   ' B et C sont convertis en chaîne, puis
                        ' combinés (on obtient la chaîne "11")

Au cours du premier exemple d'addition, StarOffice Basic commence par ajouter les variables entières, puis convertit le résultat en chaîne de caractères. La chaîne 2 est assignée à A. Dans le second exemple, les variables entières sont d'abord converties en deux chaînes de caractères distinctes, qui sont concaténées au cours de l'assignation. A se voit donc assigner la chaîne 11.

Les fonctions de conversion numériques CSng et CDbl acceptent également les nombres décimaux. Vous devez utiliser comme séparateur de décimales le symbole défini dans les paramètres régionaux correspondants. Inversement, les méthodes CStr utilisent les paramètres régionaux sélectionnés pour les détails du formatage des nombres, des dates et de l'heure.

La fonction Val est différente des méthodes Csng, Cdbl et Cstr. Elle convertit une chaîne en nombre, mais attend toujours un point comme séparateur de décimales.

Dim A As String
Dim B As Double

A = "2.22" B = Val(A)      ' est converti correctement, en dépit des
                           ' paramètres régionaux spécifiques

Vérification du contenu des variables

Dans certains cas, la date ne peut pas être convertie :

Dim A As String
Dim B As Date

A = "test"
B = A            ' Crée un message d'erreur

Dans cet exemple, l'assignation de la chaîne test à une variable de date n'a aucun sens, ce qui provoque une erreur de l'interpréteur. Le même principe s'applique lorsque vous tentez d'assigner une chaîne à une variable logique :

Dim A As String
Dim B As Boolean

A = "test"
B = A            ' Crée un message d'erreur

Là encore, l'interpréteur Basic indique une erreur.

Il est possible d'éviter ces messages d'erreur en vérifiant le programme avant une assignation, afin de déterminer si le contenu de la variable à assigner correspond au type de la variable cible. Les fonctions de test suivantes de StarOffice Basic ont été conçues à cet effet :

  • IsNumeric(Value) : vérifie si une valeur est un nombre.

  • IsDate(Value) : vérifie si une valeur est une date.

  • IsArray(Value) : vérifie si une valeur est une matrice.

Ces fonctions sont particulièrement utiles lorsque vous demandez une entrée utilisateur. Par exemple, vous pouvez vérifier qu'un utilisateur a bien saisi une date ou un nombre correct.

If IsNumeric(UserInput) Then
   ValidInput = UserInput
Else
   ValidInput = 0
   MsgBox "Error message."
End If

Dans l'exemple ci-dessus, si la variable UserInput contient une valeur numérique correcte, elle est assignée à la variable ValidInput. Si UserInput ne contient pas de nombre correct, ValidInput se voit assigner la valeur 0 et le programme émet un message d'erreur.

Alors qu'il existe dans StarOffice Basic des fonctions de test pour vérifier les nombres, les dates et les matrices, il n'existe aucune fonction permettant de vérifier les valeurs booléennes. Il est cependant possible d'imiter cette fonctionnalité en utilisant la fonction IsBoolean :

Function IsBoolean(Value As Variant) As Boolean
   On Error Goto ErrorIsBoolean:
   Dim Dummy As Boolean

   Dummy = Value

   IsBoolean = True
   On Error Goto 0
Exit Sub

ErrorIsBoolean:
   IsBoolean = False
   On Error Goto 0
End Function

La fonction IsBoolean définit une variable auxiliaire interne Dummy de type Boolean et tente de l'assigner à la valeur transférée. Si l'assignation fonctionne, la fonction renvoie True. En cas d'échec, le programme génère une erreur d'exécution, qui évite que la fonction de test ne renvoie une erreur.


Remarque –

Si, dans StarOffice Basic, une chaîne contenant une valeur qui n'est pas numérique est assignée à un nombre, StarOffice Basic ne génère pas d'erreur, mais transmet la valeur 0 à la variable. Cette procédure n'est pas la même que dans VBA. Avec ce logiciel, une erreur est générée et l'implémentation du programme est interrompue si une assignation correspondante est exécutée.


Chaînes de caractères

Utilisation de jeux de caractères

Lorsqu'il traite les jeux de caractères, StarOffice Basic utilise le jeu de caractères Unicode. Les fonctions Asc et Chr permettent d'obtenir la valeur Unicode d'un caractère ou le caractère correspondant à une valeur Unicode donnée. Les expressions suivantes assignent les différentes valeurs Unicode à la variable code :

Code = Asc("A")		' Lettre latine A (valeur Unicode 65)
Code = Asc("—")		' Caractère Euro (valeur Unicode 8364)
Code = Asc("??")		' Lettre cyrillique ?? (valeur Unicode 1083)

Inversement, l'expression

MyString = Chr(13)

permet d'initialiser la chaîne MyString avec la valeur correspondant au nombre 13, qui correspond à un retour à la ligne forcé.

La commande Chr est fréquemment utilisée dans les langages Basic pour insérer des caractères de contrôle dans une chaîne. L'assignation

MyString = Chr(9) + "This is a test" + Chr(13)

fait précéder le texte d'un caractère de tabulation (valeur Unicode 9) et le fait suivre d'un retour à la ligne forcé (valeur Unicode 13).

Accès à une partie de la chaîne

StarOffice Basic propose quatre fonctions renvoyant des parties de chaîne :

  • Left(MyString, Length) : renvoie les premiers caractères Length de MyString.

  • Right(MyString, Length) : renvoie les derniers caractères Length de MyString.

  • Mid(MyString, Start, Length) : renvoie les premiers caractères Length de MyString à partir de la position Start.

  • Len(MyString) : renvoie le nombre de caractères dans MyString.

Voici quelques exemples de ces fonctions :

Dim MyString As String
Dim MyResult As String
Dim MyLen As Integer

MyString = "This is a small test"

MyResult = Left(MyString,5)      ' Renvoie la chaîne "This "
MyResult = Right(MyString, 5)    ' Renvoie la chaîne " test"
MyResult = Mid(MyString, 8, 5)   ' Renvoie la chaîne " a sm"
MyLen = Len(MyString)            ' Renvoie la valeur 21

Recherche et remplacement

StarOffice Basic propose la fonction InStr pour rechercher une chaîne partielle à l'intérieur d'une autre :

ResultString = InStr (SearchString, MyString)

Le paramètre SearchString spécifie la chaîne à rechercher dans MyString. La fonction renvoie un nombre contenant la position à laquelle la chaîne SearchString apparaît pour la première fois dans MyString. Pour rechercher d'autres occurrences de la chaîne, la fonction propose une option permettant de spécifier la position à partir de laquelle StarOffice Basic commence à chercher. Dans ce cas, la syntaxe de la fonction est :

ResultString = InStr(StartPosition, MyString, SearchString)

Dans les exemples ci-dessus, InStr ne fait pas la distinction entre les majuscules et les minuscules. Pour effectuer une recherche avec InStr en respectant la casse, ajoutez le paramètre 0, comme indiqué dans l'exemple suivant :

ResultString = InStr(MyString, SearchString, 0)

En utilisant les fonctions d'édition de chaînes indiquées ci-dessus, les programmeurs peuvent rechercher et remplacer une chaîne à l'intérieur d'une autre :

Function Replace(Source As String, Search As String, NewPart As String)
 Dim Result As String
 Dim StartPos As Long
 Dim CurrentPos As Long

 Result = ""
 StartPos = 1
 CurrentPos = 1

 If Search = "" Then
       Result = Source
   Else
       Do While CurrentPos <> 0
           CurrentPos = InStr(StartPos, Search, Source)
           If CurrentPos <> 0 Then
               Result = Result + Mid(Source, StartPos, _
                   CurrentPos - StartPos)
               Result = Result + NewPart
               StartPos = CurrentPos + Len(Search)
           Else
               Result = Result + Mid(Source, StartPos, Len(Source))
           End If ' Position <> 0
       Loop
   End If
   Replace = Result
End Function

La fonction recherche dans la chaîne transférée Search dans une boucle en utilisant InStr dans le terme d'origine Source. Si elle trouve le terme recherché, elle prend la partie précédant l'expression et l'écrit dans le tampon de retour Result. Elle ajoute la section NewPart au niveau du terme recherché Search. Si aucune occurrence supplémentaire du terme recherché n'est trouvée, la fonction détermine la partie de la chaîne restante et l'ajoute au tampon de retour. Elle renvoie la chaîne ainsi créée comme résultat du processus de remplacement.

Comme le remplacement de parties de séquences de caractères est une des fonctions les plus fréquemment utilisées, la fonction Mid de StarOffice Basic a été étendue de manière à pouvoir effectuer cette tâche automatiquement. L'exemple suivant

Dim MyString As String

MyString  = "This was my text"
Mid(MyString, 6, 3, "is")

remplace trois caractères par la chaîne est à partir de la sixième position de la chaîne MyString.

Formatage des chaînes

La fonction Format formate les nombres sous forme de chaînes. Pour ce faire, la fonction attend une expression Format, qui sert de modèle pour le formatage des nombres. Chaque substituant à l'intérieur du modèle assure que cet élément est bien formaté en conséquence dans la valeur de sortie. Les cinq substituants les plus importants à l'intérieur d'un modèle sont le zéro (0), le signe dièse (#), le point (.), la virgule (,) et le signe dollar ($).

Le caractère zéro dans le modèle assure que l'emplacement correspondant sera toujours occupé par un nombre. Si aucun chiffre n'est fourni, un 0 est affiché à sa place.

Un point correspond au séparateur de décimales défini par le système d'exploitation dans les paramètres nationaux.

L'exemple ci-dessous montre comment les caractères zéro et point peuvent définir le nombre de décimales d'une expression :

MyFormat = "0.00"

MyString = Format(-1579.8, MyFormat)     ' Renvoie "-1579,80"
MyString = Format(1579.8, MyFormat)      ' Renvoie "1579,80"
MyString = Format(0.4, MyFormat)         ' Renvoie "0,40"
MyString = Format(0.434, MyFormat)       ' Renvoie "0,43"

De la même manière, il est possible d'ajouter des zéros devant un nombre pour lui donner la longueur souhaitée :

MyFormat = "0000.00"

MyString = Format(-1579.8, MyFormat)     ' Renvoie "-1579,80"
MyString = Format(1579.8, MyFormat)      ' Renvoie "1579,80"
MyString = Format(0.4, MyFormat)         ' Renvoie "0000,40"
MyString = Format(0.434, MyFormat)       ' Renvoie "0000,43"

Une virgule représente le caractère utilisé par le système d'exploitation comme séparateur de milliers, et le signe dièse un chiffre ou un emplacement qui n'est affiché que si la chaîne en entrée le nécessite.

MyFormat = "#,##0.00"

MyString = Format(-1579.8, MyFormat)   ' Renvoie "-1.579,80"
MyString = Format(1579.8, MyFormat)      ' Renvoie "1.579,80"
MyString = Format(0.4, MyFormat)      ' Renvoie "0,40"
MyString = Format(0.434, MyFormat)      ' Renvoie "0,43"

À la place du signe dollar, la fonction Format affiche le symbole monétaire adapté, défini par le système :

MyFormat = "#,##0.00 $"

MyString = Format(-1579.8, MyFormat)   ' Renvoie "-1.579,80 —"
MyString = Format(1579.8, MyFormat)      ' Renvoie "1.579,80 —"
MyString = Format(0.4, MyFormat)      ' Renvoie "0,40 —"
MyString = Format(0.434, MyFormat)      ' Renvoie "0,43 —" 

Remarque –

Les instructions de formatage utilisées dans VBA pour la date et l'heure ne sont pas prises en charge par StarOffice Basic.


Date et heure

StarOffice Basic dispose du type de données Date qui enregistre les informations de date et d'heure dans un format binaire.

Spécification de la date et de l'heure dans le code de programme

Vous pouvez assigner une date à une variable de date par la simple assignation d'une chaîne :

Dim MyDate As Date

MyDate = "1.1.2002"

Cette assignation peut fonctionner correctement, car StarOffice Basic convertit automatiquement la valeur de date définie sous forme de chaîne en variable de date. Ce type d'assignation peut cependant provoquer des erreurs, les valeurs de date et d'heure étant définies et affichées différemment selon les pays.

Comme StarOffice Basic utilise les paramètres nationaux du système d'exploitation lors de la conversion d'une chaîne en valeur de date, l'expression indiquée plus haut ne fonctionne correctement que si les paramètres nationaux correspondent au format de la chaîne de caractères.

Afin d'éviter ce problème, il est recommandé d'utiliser la fonction DateSerial pour assigner une valeur fixe à une variable de date :

Dim MyVar As Date
MyDate = DateSerial (2001, 1, 1)

Le paramètre de la fonction doit correspondre à l'ordre : année, mois, jour. Cette fonction garantit que la variable reçoit bien la valeur correcte, quels que soient les paramètres nationaux.

La fonction TimeSerial formate les informations d'heure de la même manière que la fonction DateSerial formate les dates :

Dim MyVar As Date

MyDate =  TimeSerial(11, 23, 45)

Leurs paramètres doivent être spécifiés dans l'ordre : heures, minutes, secondes.

Extraction de la date et de l'heure

Les fonctions suivantes constituent le pendant des fonctions DateSerial et TimeSerial :

  • Day(MyDate) : renvoie le jour du mois de MyDate.

  • Month(MyDate) : renvoie le mois de MyDate.

  • Year(MyDate) : renvoie l'année de MyDate.

  • Weekday(MyDate) : renvoie le numéro du jour de la semaine de MyDate.

  • Hour(MyTime) : renvoie les heures de MyTime.

  • Minute(MyTime) : renvoie les minutes de MyTime.

  • Second(MyTime) : renvoie les secondes de MyTime.

Ces fonctions extraient les sections de date ou d'heure d'une variable Date donnée. L'exemple :

Dim MyDate As Date

' ... Initialisation de MyDate

If Year(MyDate) = 2003 Then

   ' ... La date spécifiée est située dans l'année 2003

End If

vérifie si la date enregistrée dans MyDate se trouve dans l'année 2003. De la même manière, l'exemple

Dim MyTime As Date

' ... Initialisation de MyTime

If Hour(MyTime) >= 12 And Hour(MyTime) < 14 Then

   ' ... L'heure spécifiée est comprise entre 12 et 14 heures

End If

vérifie si MyTime est comprise entre 12 et 14 heures.

La fonction Weekday renvoie le numéro du jour de la semaine pour la date indiquée :

Dim MyDate As Date
Dim MyWeekday As String

' ... initialise MyDate

Select Case WeekDay(MyDate)
case 1
   MyWeekday = "Sunday"
case 2
   MyWeekday = "Monday"
case 3
   MyWeekday = "Tuesday"
case 4
   MyWeekday = "Wednesday"
case 5
   MyWeekday = "Thursday"
case 6
   MyWeekday = "Friday"
case 7
   MyWeekday = "Saturday"
End Select

Remarque –

Le dimanche est considéré comme le premier jour de la semaine.


Obtention de l'heure et de la date système

Les fonctions suivantes de StarOffice Basic permettent d'obtenir l'heure et la date système :

  • Date : renvoie la date actuelle.

  • Time : renvoie l'heure actuelle.

  • Now : renvoie le point présent dans le temps (la date et l'heure combinées dans une seule valeur).

Fichiers et répertoires

L'utilisation des fichiers est une des tâches de base d'une application. L'API StarOffice propose un grand nombre d'objets permettant de créer, d'ouvrir et de modifier des documents Office. Ils sont présentés en détail au Chapitre 4, Introduction à l'API StarOffice. Indépendamment de cela, il peut y avoir des circonstances où vous aurez besoin d'accéder directement au système de fichiers, de rechercher dans les répertoires ou d'éditer des fichiers texte. La bibliothèque d'exécution de StarOffice Basic propose plusieurs fonctions fondamentales pour ces tâches.


Remarque –

Certaines fonctions spécifiques à DOS pour les fichiers et les répertoires ne sont plus proposées par StarOffice 8, ou seulement avec des fonctionnalités limitées. Par exemple, les fonctions ChDir, ChDrive et CurDir ne sont plus prises en charge. Certaines propriétés spécifiques à DOS ne sont plus utilisées dans les fonctions utilisant des propriétés de fichier comme paramètres (par exemple, pour distinguer les fichiers cachés et les fichiers système). Cette évolution était devenue nécessaire pour assurer une indépendance maximum de StarOffice par rapport aux différentes plates-formes.


Administration des fichiers

Recherche dans les répertoires

La fonction Dir de StarOffice Basic permet de parcourir les répertoires et sous-répertoires à la recherche de fichiers. Lors de la première requête, vous devez assigner une chaîne contenant le chemin des répertoires dans lesquels effectuer la recherche comme premier paramètre de la fonction Dir. Le second paramètre de la fonction Dir spécifie le fichier ou le répertoire à rechercher. StarOffice Basic renvoie le nom de la première entrée de répertoire trouvée. Pour obtenir l'entrée suivante, vous devez appeler la fonction Dir sans lui passer de paramètres. Si la fonction Dir ne trouve pas d'entrée supplémentaire, elle renvoie une chaîne vide.

L'exemple suivant montre comment utiliser la fonction Dir pour obtenir la liste de tous les fichiers d'un répertoire. La procédure enregistre les différents noms de fichier dans la variable AllFiles, puis l'affiche dans une boîte de message.

Sub ShowFiles
   Dim NextFile As String
   Dim AllFiles As String

   AllFiles = ""
   NextFile = Dir("C:\", 0)

   While NextFile  <> ""
      AllFiles = AllFiles & Chr(13) &  NextFile
      NextFile  = Dir
   Wend

   MsgBox AllFiles
End Sub

Le 0 utilisé comme second paramètre de la fonction Dir indique à celle-ci de ne renvoyer que les noms des fichiers et d'ignorer les répertoires. Les paramètres suivants peuvent être spécifiés ici :

  • 0 : renvoie les fichiers normaux.

  • 16 : sous-répertoires.

L'exemple suivant est pratiquement identique au précédent, si ce n'est que la fonction Dir est appelée avec une valeur 16 en paramètre, et renvoie donc les sous-répertoires d'un dossier et non plus les noms des fichiers.

Sub ShowDirs
   Dim NextDir As String
   Dim AllDirs As String
   AllDirs = ""
   NextDir = Dir("C:\", 16)
   While NextDir <> ""
      AllDirs = AllDirs & Chr(13) &  NextDir
      NextDir  = Dir
   Wend
   MsgBox AllDirs
End Sub

Remarque –

Lorsqu'elle est appelée dans StarOffice Basic, la fonction Dir utilisée avec le paramètre 16 renvoie uniquement les sous-répertoires d'un dossier. Dans VBA, la fonction renvoie également les noms des fichiers standard, ce qui oblige à opérer un traitement supplémentaire pour n'obtenir que les répertoires. Lorsque l'on utilise la fonction CompatibilityMode ( true ), StarOffice Basic, utilisé avec le paramètre 16, se comporte comme les fonctions VBA et Dir, et renvoie des sous-répertoires et des fichiers standard.



Remarque –

Les options proposées par VBA pour rechercher dans des répertoires uniquement les fichiers possédant les propriétés caché, fichier système, archive et nom de volume n'existent pas dans StarOffice Basic, car les fonctions de système de fichiers correspondantes n'existent pas dans tous les systèmes d'exploitation.



Remarque –

Les indications de chemin utilisées avec la fonction Dir peuvent contenir les substituants * et ? dans VBA comme dans StarOffice Basic. Cependant, dans StarOffice Basic, le substituant * ne peut être que le dernier caractère du nom d'un fichier ou de son extension, ce qui n'est pas le cas dans VBA.


Création et suppression de répertoires

StarOffice Basic dispose de la fonction MkDir pour créer des répertoires.

    
MkDir ("C:\SubDir1")

Cette fonction crée des répertoires et des sous-répertoires. Tous les répertoires nécessaires à la hiérarchie sont également créés, le cas échéant. Par exemple, si seul le répertoire C:\SubDir1 existe, un appel

MkDir ("C:\SubDir1\SubDir2\SubDir3\")

crée à la fois le répertoire C:\SubDir1\SubDir2 et le répertoire C:\SubDir1\SubDir2\SubDir3.

La fonction RmDir supprime des répertoires.

    
RmDir ("C:\SubDir1\SubDir2\SubDir3\")

Si le répertoire contient des sous-répertoires ou des fichiers, ceux-ci sont également supprimés. Utilisez donc la fonction RmDir avec prudence.


Remarque –

Dans VBA, les fonctions MkDir et RmDir ne s'appliquent qu'au répertoire actif. En revanche, dans StarOffice Basic, les fonctions MkDir et RmDir peuvent servir à créer ou à supprimer plusieurs niveaux de répertoires.



Remarque –

Dans VBA, RmDir génère un message d'erreur lorsqu'un répertoire contient un fichier. Dans StarOffice Basic, le répertoire ainsi que tous ses fichiers sont supprimés. Si vous utilisez la fonction CompatibilityMode ( true ), StarOffice Basic se comporte comme VBA.


Copie, attribution d'un nouveau nom, suppression et vérification de l'existence de fichiers

L'appel

FileCopy(Source, Destination)

crée une copie du fichier Source sous le nom de Destination.

Grâce à la fonction

Name OldName As NewName

vous pouvez renommer le fichier OldName en NewName. Le mot clé As et l'absence de virgule remontent aux origines du langage Basic.

L'appel

Kill(Filename)

supprime le fichier Filename. Pour supprimer un répertoire (avec tous ses fichiers), utilisez la fonction RmDir.

La fonction FileExists peut être utilisée pour vérifier l'existence d'un fichier :

If FileExists(Filename) Then
   MsgBox "file exists."
End If

Lecture et modification des propriétés d'un fichier

Lorsque vous utilisez des fichiers, il peut être important de pouvoir en connaître les propriétés, comme la date de leur dernière modification et leur longueur.

L'appel

Dim Attr As Integer
Attr = GetAttr(Filename)

renvoie certaines des propriétés d'un fichier. La valeur de retour est fournie sous la forme d'un masque de bits qui peut avoir les valeurs suivantes :

  • 1 : fichier en lecture seule.

  • 16 : nom d'un répertoire.

L'exemple

Dim FileMask As Integer
Dim FileDescription As String

FileMask = GetAttr("test.txt")
If (FileMask AND 1) > 0 Then
   FileDescription = FileDescription & " read-only "
End IF

If (FileMask AND 16) > 0 Then
   FileDescription = FileDescription & " directory "
End IF

If FileDescription = "" Then
   FileDescription = " normal "
End IF

MsgBox FileDescription

détermine le masque de bits du fichier test.txt et vérifie s'il est en lecture seule et s'il s'agit d'un répertoire. Si aucun de ces deux cas ne s'applique, FileDescription reçoit la chaîne "normal".


Remarque –

Les drapeaux utilisés dans VBA pour obtenir les propriétés de fichier caché, fichier système, archivé et nom de volume ne sont pas pris en charge par StarOffice Basic, car ils sont propres à Windows et ne sont pas, ou pas complètement, disponibles dans les autres systèmes.


La fonction SetAttr permet de modifier les propriétés d'un fichier. L'appel

SetAttr("test.txt", 1)

peut donc être utilisé pour passer un fichier en lecture seule. Il est possible de supprimer un statut de lecture avec l'appel suivant :

SetAttr("test.txt", 0)

La date et l'heure de la dernière modification d'un fichier peuvent être obtenues avec la fonction FileDateTime. La date est formatée ici selon les paramètres régionaux utilisés sur le système.

FileDateTime("test.txt")   ' Renvoie la date et l'heure
                                           ' de la dernière
                                           ' modification du fichier.

La fonction FileLen détermine la longueur d'un fichier en octets (au format entier long).

FileLen("test.txt")      ' Renvoie la longueur du fichier en octets.

Écriture et lecture de fichiers texte

StarOffice Basic propose un large éventail de méthodes pour lire et écrire des fichiers. Les explications qui suivent portent sur l'utilisation de fichiers texte (et non de documents texte).

Écriture de fichiers texte

Pour pouvoir accéder à un fichier texte, vous devez l'avoir ouvert au préalable. Pour ce faire, il faut un descripteur de fichier libre, qui identifie clairement le fichier pour les accès ultérieurs.

La fonction FreeFile sert à créer un descripteur de fichier libre. Ce descripteur est passé comme paramètre à l'instruction Open, qui ouvre le fichier. Pour ouvrir un fichier de manière à pouvoir le spécifier comme fichier texte, l'appel Open est :

Open Filename For Output As #FileNo

Filename est une chaîne de caractères contenant le nom du fichier. FileNo est le descripteur créé par la fonction FreeFile.

Une fois le fichier ouvert, vous pouvez décrire l'instruction Print ligne par ligne :

Print #FileNo, "This is a test line."

FileNo désigne ici aussi le descripteur de fichier. Le second paramètre spécifie le texte à enregistrer comme ligne du fichier texte.

Une fois le processus d'écriture achevé, le fichier doit être refermé avec un appel Close :

    
Close #FileNo

Là encore, il faut spécifier le descripteur du fichier.

L'exemple suivant montre comment ouvrir, décrire et refermer un fichier texte :

Dim FileNo As Integer
Dim CurrentLine As String
Dim Filename As String

Filename = "c:\data.txt"  ' Définit le nom du fichier FileNo = Freefile
                          ' Génère un descripteur de fichier libre

Open Filename For Output As #FileNo  ' Ouvre le fichier (en mode écriture)
Print #FileNo, "This is a line of text"      ' Enregistre une ligne
Print #FileNo, "This is another line of text"   ' Enregistre une ligne
Close #FileNo                  ' Ferme le fichier

Lecture de fichiers texte

Les fichiers texte sont lus de la même manière qu'ils sont écrits. L'instruction Open utilisée pour ouvrir le fichier contient l'expression For Input à la place de l'expression For Output, et au lieu de la commande Print permettant d'écrire des données, c'est la commande Line Input qui est utilisée pour lire les données.

Enfin, lorsque vous accédez à un fichier texte, l'instruction

eof(FileNo)

sert à vérifier si vous avez atteint la fin du fichier.

L'exemple suivant montre comment lire un fichier texte :

Dim FileNo As Integer
Dim CurrentLine As String
Dim File As String
Dim Msg as String

' Définit le nom du fichier
Filename = "c:\data.txt"

' Génère un descripteur de fichier libre
FileNo = Freefile

' Ouvre le fichier (en mode lecture)
Open Filename For Input As FileNo

' Vérifie si la fin du fichier a été atteinte

Do While not eof(FileNo)
   ' Read line
   Line Input #FileNo, CurrentLine
   If CurrentLine <>"" then
      Msg = Msg & CurrentLine & Chr(13)
   end if
Loop

' Close file
Close #FileNo

Msgbox Msg

Les différentes lignes sont extraites dans une boucle Do While, enregistrées dans la variable Msg, puis affichées à la fin dans une boîte de message.

Boîtes de message et zones de saisie

StarOffice Basic dispose des fonctions MsgBox et InputBox pour communiquer facilement avec l'utilisateur.

Affichage des messages

MsgBox affiche une boîte d'informations de base, qui peut contenir un ou plusieurs boutons. Dans sa version la plus simple

MsgBox "This is a piece of information!"

la boîte de message MsgBox ne contient que du texte et un bouton OK.

Vous pouvez modifier l'apparence de la boîte d'information avec un paramètre. Le paramètre permet d'ajouter des boutons supplémentaires, de définir un bouton par défaut et d'ajouter un symbole informatif. Les valeurs pour sélectionner les boutons sont :

  • 0 : bouton OK.

  • 1 : boutons OK et Annuler.

  • 2 : boutons Annuler et Réessayer.

  • 3 : boutons Oui, Non et Annuler.

  • 4 : boutons Oui et Non.

  • 5 : boutons Réessayer et Annuler.

Pour définir un bouton par défaut, ajoutez une des valeurs suivantes à la valeur du paramètre choisie dans la liste de sélection des boutons. Par exemple, pour créer trois boutons Oui, Non et Annuler (valeur 3), où Annuler est le bouton par défaut, le paramètre doit avoir une valeur de 3 + 512 = 515.

  • 0 : le premier bouton est sélectionné par défaut.

  • 256 : le deuxième bouton est sélectionné par défaut.

  • 512 : le troisième bouton est sélectionné par défaut.

Enfin, les symboles informatifs suivants sont disponibles et peuvent également être affichés en ajoutant les valeurs appropriées au paramètre :

  • 16 : signe stop.

  • 32 : point d'interrogation.

  • 48 : point d'exclamation.

  • 64 : icône Astuce.

L'appel

MsgBox "Do you want to continue?",  292

affiche une boîte d'information avec les boutons Oui et Non (valeur 4), dont le second (Non) est sélectionné par défaut (valeur 256), et contenant également un point d'interrogation (valeur 32), 4 + 256 + 32 = 292

Si une boîte d'informations contient plusieurs boutons, il faut utiliser une valeur de retour pour déterminer le bouton sur lequel l'utilisateur a cliqué. Les valeurs de retour possibles dans ce cas sont les suivantes :

  • 1 : OK.

  • 2 : Annuler.

  • 4 : Réessayer.

  • 5 : Ignorer.

  • 6 : Oui.

  • 7 : Non.

Pour l'exemple précédent, le contrôle de la valeur de retour peut se faire de la manière suivante :

If MsgBox ("Do you want to continue?",  292) = 6 Then
   ' Bouton Oui sélectionné
Else
   ' Bouton Non sélectionné
End IF

En plus du texte d'information et du paramètre pour arranger la boîte d'information, MsgBox propose un troisième paramètre pour définir le titre de la boîte de message :

MsgBox "Do you want to continue?",  292, "Box Title"

Si aucun titre n'est indiqué pour la boîte de message, la valeur par défaut est "soffice".

Zone de saisie pour demander des chaînes simples

La fonction InputBox demande à l'utilisateur de saisir une chaîne simple. Elle constitue donc une alternative simple pour configurer des boîtes de dialogue. InputBox réclame trois paramètres standard :

  • un texte d'information ;

  • un titre pour la boîte de message ;

  • une valeur par défaut pouvant être ajoutée dans la zone de saisie.

InputVal = InputBox("Please enter value:", "Test", "default value")

Comme valeur de retour, la fonction InputBox renvoie la chaîne saisie par l'utilisateur.

Autres fonctions

Beep

La fonction Beep fait émettre un son au système pour avertir l'utilisateur d'une action incorrecte. Beep ne réclame aucun paramètre :

Beep   ' produit un son d'avertissement

Shell

Il est possible de lancer des programmes externes grâce à la fonction Shell.

Shell(Pathname, Windowstyle, Param)

Pathname définit le chemin du programme à exécuter. Windowstyle définit la fenêtre dans laquelle le programme est lancé. Les valeurs suivantes peuvent être utilisées :

  • 0 : le programme est mis en focus et lancé dans une fenêtre cachée.

  • 1 : le programme est mis en focus et lancé dans une fenêtre de taille normale.

  • 2 : le programme est mis en focus et lancé dans une fenêtre réduite.

  • 3 : le programme est mis en focus et lancé dans une fenêtre agrandie.

  • 4 : le programme est lancé dans une fenêtre de taille normale, sans être mis en focus.

  • 6 : le programme est lancé dans une fenêtre réduite, la fenêtre active reste en focus.

  • 10 : le programme est lancé en mode plein écran.

Le troisième paramètre, Param, permet d'indiquer des paramètres de ligne de commande à passer au programme à lancer.

Wait

La fonction Wait suspend l'exécution du programme pour une durée donnée. La durée d'attente est spécifiée en millisecondes. La commande

Wait 2000

spécifie d'attendre 2 secondes (2 000 millisecondes).

Environ

La fonction Environ renvoie les variables d'environnement du système d'exploitation. Ces variables dépendent du système et de sa configuration. L'appel

Dim TempDir

TempDir=Environ ("TEMP")

détermine les variables d'environnement du répertoire temporaire du système d'exploitation.