Fichiers, Dossiers… et maintenant Manipulateurs de fichiers !

Les commandes File et Folder, apparues dans 4D v17 R5, vous permettent de gérer les dossiers et les fichiers sur le disque de manière moderne et efficace.

En ce qui concerne l’écriture et la lecture, les fonctions setText et getText sont à votre disposition pour lire ou écrire l’ensemble du contenu. Mais que faire si vous souhaitez lire ou ajouter une ou plusieurs lignes à un document existant ? Cela peut être fait plus facilement que jamais en utilisant les nouveaux objets « file handles » qui apparaissent dans 4D v19 R7.

Continuez à lire pour plus de détails !

HDI Utiliser les poignées de fichier

Que sont les poignées de fichier ?

Les File handles sont des objets créés sur la base des objets « File » et possèdent des fonctions permettant d’accéder à n’importe quelle partie des documents et, à partir de là, de lire ou d’écrire leur contenu de manière séquentielle.

Même si, dans le cas général, on lit du début à la fin, il est possible de définir précisément la position de la « tête de lecture ».

De même, lorsqu’on veut ouvrir un document pour écrire de nouvelles informations, c’est généralement à la fin du document que l’on veut écrire. Vous pouvez positionner la « tête d’écriture » où vous voulez.

Mais ce n’est pas tout !

La caractéristique principale et la plus significative du gestionnaire de fichiers est qu’il évitera d’ouvrir et de fermer des documents, ce qui est une opération qui prend beaucoup de temps. Et ce qui est encore mieux, c’est que la fermeture d’un fichier par programmation n’est plus obligatoire. Dès que le fichier manipulé n’est plus référencé dans votre code, le fichier sera fermé automatiquement ! C’est la raison pour laquelle, comme nous le verrons plus tard, la fonction .close() n’est pas nécessaire !

Plongeons dans un exemple rapide

L’objectif est d’ajouter des lignes à un fichier journal. Créons une classe appelée Logger et une fonction appelée writeLine et voyons comment l’appeler !

Class constructor($logName : Text)
	
	var $file : 4D.File
	
	$file:=File("/LOGS/"+$logName)
	$file.parent.create()  // check that parent folder exists; Otherwise it will be created.
	This.fh:=$file.open("append")
	
Function writeLine($logText : Text)
	
	This.fh.writeLine($logText)

Une fois cette classe créée, appelons-la !

var $logger : cs.Logger
var $logName : Text

$logName:=Replace string(Timestamp; ":"; "-")+".txt"
$logger:=cs.Logger.new($logName)

For ($i; 1; 10)
	$logger.writeLine("test_"+String(Random))
End for 

A ce stade, nous pourrions fermer le fichier en mettant l’objet $logger à NULL, mais ce n’est pas obligatoire ! A la fin de ce code, l’objet $logger (et son attribut .fh) sera NULL et le fichier sera fermé !

Attributs et fonctions

Fonction nouveau fichier :

La première fonction, open(), est une nouvelle fonction de File permettant de créer le handle. Le handle peut être créé en mode lecture, en mode écriture ou en mode ajout.

$handle:=$file.open("write")

Vous pouvez également utiliser un objet comme paramètre si vous avez besoin de spécifier le charset, les délimiteurs de lecture ou d’écriture.

$o:=New object()
$o.mode:="append"
$o.charset:="UTF-8"
$o.breakModeRead:=Document with CRLF
$o.breakModeWrite:=Document with CRLF
$handle:=$file.open($o)

Une fois le handle créé, d’autres attributs et fonctions seront disponibles :

Deux autres attributs utiles au Handle

  • .offset est le décalage actuel du flux de données (position dans le document).
    • Cet attribut est inscriptible. Utilisez-le uniquement si vous avez besoin de définir la position de lecture ou d’écriture à un endroit spécifique. Rappelez-vous que ses valeurs changent automatiquement après une opération de lecture ou d’écriture.
  • .eof est faux tant que la fin du document n’est pas atteinte.

 

L’attribut .eof permet de parcourir un fichier d’une manière très élégante

$fileHandle:=$file.open("read")  
While (Not($fileHandle.eof))  // eof = end of file
	$text:=$fileHandle.readLine() 
	//…	
End while 

Fonctions de handle

La classe handle est fournie avec de nombreuses fonctions qui permettent de :

  • Lire et écrire du texte
  • Lire et écrire des lignes (avec gestion automatique des sauts de ligne)
  • Obtenir et définir la taille d’un document
  • Lire et écrire des Blobs !

Où aller maintenant ?

Trouvez plus de détails dans la documentation. Et n’hésitez pas à nous contacter sur les forums 4D; nous serons heureux de vous aider.

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.