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
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
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 :
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")
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 |