gambaslinux.fr

Tutoriels › Utiliser les fichiers

Dans cette page, vous trouverez l'essentiel du code pour manipuler des fichiers de plusieurs types :

Importer un fichier CSV dans une ColumnView

Aujourd'hui nous allons essayer d'importer un fichier CSV (Fichier texte exporté de libre office qui a des champs séparés par un symbole  point virugle, virgule ou autre...) dans une ColumnView de GB.
CREATION du FICHIER CSV
ouvrez open office tableur ou gnumeric puis saisissez des valeurs dans les cellulles.
enregistrez votre fichier au format CSV séparé par des points virgules.
nommez le monfichier.csv.

CREATION DU PROGRAMME.
Maintenant ouvrez votre IDE GAMBAS préférée et créez un  projet :
nommez le csvtogb.
ajouter au formulaire Fmain un bouton puis une columnview.
Saisissez ce code :

PUBLIC key AS Integer

PUBLIC SUB _new()
END

PUBLIC SUB Form_Open()
ME.Center
END
PUBLIC SUB Button1_Click()
'clic sur bouton des contacts
DIM hFile AS File
DIM sLine AS String
DIM numclient AS Integer
DIM Car AS String
DIM bal AS Integer
DIM Pos AS Integer
DIM a AS Integer
ColumnView1.Columns.Count = 10 'nombre de colonne de votre fichier CSV exemple a 10
ColumnView1.Columns[0].Width = 150
'ouvre le fichier CSV dont les champs sont separés par des points virgules
hFile = OPEN Application.Path & "/monfichier.csv" FOR INPUT
'Ajouter les donnees dans la columnview
bal = 1
Car = ";" 'caractere separateur
'open the file contact.txt
INC key
WHILE NOT Eof(hFile)
LINE INPUT #hFile, sLine
INC key
Pos = InStr(sLine, Car, bal)
'add first column
ColumnView1.Add(key, Left$­­(sLine, Pos - 1))
'a est le numero de colonne
a = 0
DO WHILE (Pos <> 0 AND sLine <> "")
a = a + 1
'permet d'enlever à chaque fois la partie que lon a ecrit
sLine = Mid(sLine, Pos + 1, Len(sLine))
Pos = InStr(sLine, Car, bal)
ColumnView1[Key][a] = Left$­­(sLine, Pos - 1)
LOOP
WEND 
END


L'astuce du code réside dans les phrases en rouge, qui permettent de détecter le symbole séparateur puis d'en extraire le texte.

Avec Gambas 3, il est aussi possible d'utiliser la commande SPLIT qui est bien plus simple.

Voila pour aujourd'hui.


TELECHARGER L'EXEMPLE

Copier récursivement Fichiers et répertoires

Il est très simple de copier des fichiers sous gambas en utilisant l'instruction COPY.
Seulement pour le moment il n'existe pas d'instruction toute prête pour copier récursivement tous les dossiers et fichiers présents dans un répertoire.
J'ai donc créé une petite méthode pour le faire.

Il suffit d'ajouter dans votre code cette méthode :

Private Sub mycopy(mysource As String, mydestination As String)
Dim s As String
Mkdir mydestination
For Each s In RDir(mysource, "*")
If Not IsDir(mysource &/ s) Then
If Not Exist(mydestination &/ s) Then Copy mysource &/ s To mydestination &/ s
Else
Mkdir mydestination &/ s
Endif
Next
End


Il vous suffit simplement de l'appeler avec le code ci-dessous:


mycopy("foldertocopypath", "destinationpath")


foldertocopypath sera le chemin du répertoire à copier
destinationpath sera le répertoire qui recevra les fichiers.

Merci pour votre attention et merci a vuott pour son aide.

Savoir si un Fichier est déjà ouvert

Pour savoir si votre application a déjà été lancé, il suffit lors du premier lancement de créer un fichier dans le répertoire de l'application.
Ainsi, au deuxieme lancement vous testez la presence de ce fichier. si il existe on  ferme l'application immediatement.

pour resumer dans la fonction OPEN de la FORM :

IF NOT exist(mypath) THEN
myFile = OPEN mypath FOR create
CLOSE #myFile
ELSE
me.CLOSE
ENDif

Dans la fonction CLOSE de la FORM :

kill application.path & "/myfile" 'efface fichier deja ouvert

LA documentation de KILL fermeture de fichier KILL :

http://gambasdoc.org/help/lang/kill?fr


Merci pour votre attention.

Manipuler les Fichiers Texte

Aujourd'hui nous allons manipuler un fichier texte avec les fonctions usuelles :
ouvrir, fermer,rechercher, copier, coller.


A) OUVERTURE D'UN FICHIER TEXTE


ouvrir un fichier est très simple.
Il vous suffit de définir deux variablescomme ceci :

Private monfichier As File
Private maligne As string


ensuite il vous suffit d'ouvrir le fichier et de le lire jusquà la fin avec un test pour voir si nous sommes en fin de fichier avec la boucle :

WHILE NOT eof
WEND


ce qui nous donne en résumé :

DIM monfichier AS File
DIM maligne AS String
monfichier = OPEN "/chemindufichier/" FOR INPUT
WHILE NOT eof(monfichier)
LINE INPUT #monfichier, maligne
print maligne
WEND


Dans cet exemple nous envoyons tous les caracteres vers la console par l'instruction PRINT maligne. Nous aurions pu l'envoyer vers une textarea par la commande:

Textarea1.insert(maligne)

 

B) FERMER UN FICHIER

N'oublions pas que nous devons fermer le fichier par la commande  :

CLOSE #monfichier

Remarque : Meme sans fermer le fichier votre logiciel fonctionnera quand même, mais il vaut mieux le faire par "rigueur du programmeur" :)



C) RECHERCHER UNE OCCURENCE DANS LE FICHIER

Il suffit d'utiliser l'instruction InStr qui cherche dans une chaine de caracteres et vous retourne la position.

exemple :

numero =  Instr(maligne , "toto")

Les fichier RTF

 
rtffile.png



Bonjour,

Aujourd'hui nous allons ouvrir un fichier RTF, le format de fichier texte enrichi , nous allons modifier un texte "aaaaaa" et nous allons le refermer.

Pour cet exemple, nous ferons une petite application qui :

1)ouvrira le fichier RTF au moyen d'une boite de dialogue et copira le contenu du fichier dans une texarea par le code :

PUBLIC SUB bopen_Click()
Dialog.Filter = ["*.rtf", "Fichiers RTF", ".RTF", "Fichiers RTF"]
Dialog.Title = "Ouvrir unfichier"
Dialog.Path = Application.Path
IF Dialog.OpenFile() THEN RETURN
TextArea1.Text = File.Load(Dialog.Path)
END

2) vous saisirez alors votre nom dans une textbox et l'occurence "aaaaaa" dans notre fichier sera remplacée au moyen de ce code:

PUBLIC SUB bedit_Click()
TextArea1.Text = Replace$(TextArea1.Text, "aaaaaa", TextBox1.Text)
END


3)Le nouveau fichier RTF s'enregistrera sous le nom newfile.rtf dans le repertoire de l'application par ce code :

PUBLIC SUB bsave_Click()
DIM fichier2 AS File
fichier2 = OPEN Application.Path & "/mynewfile.rtf" FOR CREATE  
PRINT #fichier2, TextArea1.Text
CLOSE #fichier2
Message.Info("Allez dans le repertoire de l'application, un nouveau fichier mynewfile.rtf est créé, le texte est remplacé. CQFD")
Message.Info("Explore the application path directory. a new file mynewfile.rtf is created.The text is replaced.Yeah!")
END

Ouvrons maintenant le nouveau fichier et le texte est bien remplacé, la mise en page n'est pas perdue, et le fichier n'est pas corrompu.
CQFD !
Merci de votre attention.

Partager un fichier CONF

Il vous est parfois utile de faire communiquer deux logiciels écrit en gambas par un fichier de configuration (le bon vieux .ini sous windaube).
Voici comment faire :

A l'ouverture de votre fmain, entrez dans les deux projets en gambas ceci :

Private myconf As New Settings(System.User.home & "/monfichier.conf")

J'ai stocké le fichier conf dans le répertoire utilisateur.
il vous suffira simplement ensuite de récupérer votre donnée comme habituellement :

Public Sub Button1_Click()
TextBox1.Text = myconf["TOTO/tata"]
End


Voilà pour aujourd'hui.

Connaître le type Mime d'un fichier

Si vous souhaitez connaître le type MIME de vos fichiers,  il suffit de cocher dans les propriétés de votre projet le composant : gb.Desktop

Ensuite nous allons créer une petite application qui va ouvrir une boite de dialogue pour sélectionner un fichier puis en donner son now et son type MIME.

Créez un projet typmime  ave application graphique QT et dans la feuille Fmain écrivez ce code ci dessous :

Public Sub Button1_Click()
Dialog.Title = "selectionner un fichier" 'defini le titre de la boite
Dialog.Path = Application.Path 'defini le chemin par defaut à l'ouverture
If Dialog.OpenFile() Then Return 'si on ne peut ouvrir le fichier alors ne rien faire
TextBox1.Text = Dialog.Path
TextBox2.Text = DesktopMime.FromFile(Dialog.Path).Type
End

Public Sub Form_Open()
Me.Center
End


dans cette feuille veuillez y placer deux boutons, et deux textbox.

Pour récupérer le nom du fichier, nous récupérons la variable dialog.path retournée par la dialogbox, et pour récupérer le type MIME du fichier, il suffit d'entrer la commande suivante :

DesktopMime.FromFile(Dialog.Path).Type

Manipuler les fichier XML

bmenuxml.jpg

Bonjour,

Gb.xml, ce composant fabuleux vous permet de manipuler les fichiers XML avec facilité. vous pouvez l'activer dans les propriétés de votre projet en cochant gb.xml

Aujourd'hui je vais tenter de vous en expliquer son fonctionnement ci dessous :

1) ECRITURE :

L'ecriture est très simple. A ceci près que je ne trouve pas le moyen de modifier une item du fichier mais je dois réécrire tout le fichier. Si vous avez l'astuce, je suis preneur.

Pour la creation d'un fichier XML, il vous suffit d'ajouter ce code ci :

Dim writer As XmlWriter
writer = New XmlWriter
writer.Open(System.User.Home & "/toto.xml", True)


Nous voila fin pret pour remplir notre fichier.
Ajoutons tout d'abord un commentaire :

writer.Comment("Hello from France")


Créons maintenant une categorie nommée characters avec 2 propriétés  serie et Heroes comme ceci :

writer.StartElement("characters")
writer.Attribute("serie", "Heroes")


Maintenant donnons des propriétés à la catégorie heroes :

writer.StartElement("heroe")
writer.Attribute("id", "1")
writer.Attribute("name", "Frantois lollande")

2) LECTURE


Maintenant, nous allons lire dans ce fichier. La lecture est assez compliquée.

Tout d'abord, voici le code pour ouvrir le fichier :

1
2
3
4
5
6
7
Dim reader As XmlReader
reader = New XmlReader
Try reader.Open(System.User.home & "/toto.xml")
If Error Then
Message.Error("Error when trying to open the toto.xml file!")
Return
Endif