écriture fichier txt/ini

écriture fichier txt/ini - VB/VBA/VBS - Programmation

Marsh Posté le 08-06-2004 à 15:55:07    

Yo tout le monde =) bon je te sens chaud JihemAir aujourd'hui =) j'aimerais savoir s'il est possible en VBA de manipuler(ouverture, écriture,...) des fichiers ini, ou alors au pire des fichiers texte??? Merci d'avance

Reply

Marsh Posté le 08-06-2004 à 15:55:07   

Reply

Marsh Posté le 08-06-2004 à 16:05:25    

Je suis sur un job pas très exitant, alors je me distrais sur le forum :-))
Tu peux lire et écrire les fichiers .ini avec les API:
GetPrivateProfileString et WritePrivateProfileString (de mémoire). C'est le plus efficace.
Si tu veux un exemple, fais moi signe, parce que récupérer les valeurs de retour d'API dans VB exige qq précautions.
 

Reply

Marsh Posté le 08-06-2004 à 16:08:04    

De mémoire ce sont aussi celles utilisées en C++, mais elle ne fonctionnent pas en VBA!!! bouh... =( Il y a p-ê moyen d'inclure des librairies nan?

Reply

Marsh Posté le 08-06-2004 à 16:13:17    

J'ai pas Split mais j'ai les API  :lol:  
Plus sérieux...
Dans le module, dans la section déclarations:

Code :
  1. Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long


et tu vas voir que VBA la reconnait.

Reply

Marsh Posté le 08-06-2004 à 16:26:49    

JihemAir a écrit :

J'ai pas Split mais j'ai les API  :lol:  
Plus sérieux...
Dans le module, dans la section déclarations:

Code :
  1. Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long


et tu vas voir que VBA la reconnait.


 
yaeh ça marche!!! décidément tu es vmt trop fort...  :love: lol. ce qui est en gras est pour intégrer des API? sinon pour les paramètres : le 1er, fo mettre koi? normalement c'est un handle qu'on passe en c++. là ce serait "XLMAIN" par exemple?

Reply

Marsh Posté le 08-06-2004 à 16:28:01    

hey le code ne se met pas en gras...

Reply

Marsh Posté le 08-06-2004 à 16:33:34    

Le 1er param, c'est l'entrée dans le fichier .ini,  
[Appli],  
le 2ème c'est la clé
IniPath=
Le 3ème c'est une valeur pas défaut si y a rien à extraire
 
etc.. mais c'est quoi cette histoire de gras ?

Reply

Marsh Posté le 08-06-2004 à 16:35:44    

pr le gras, tu vois pas les balises dans la citation de ton code? pr les paramètrse j'essaie et je te dis...

Reply

Marsh Posté le 08-06-2004 à 16:44:43    

Alors ça marche pas terro :

Code :
  1. Private Sub CommandButton1_Click()
  2.     Dim retour, str
  3.     retour = GetPrivateProfileString("TOTO", "titi", "", str, 15, "c:\\toto.ini" )
  4. End Sub


retour=5 et str=vide.
Les paramètres doivent avoir un pb. avant le chemin du fichier, c bien le nb de caractères prévu à récupérer non?

Reply

Marsh Posté le 08-06-2004 à 16:46:16    

Demain, parce que là, il faut que j'y vais. Bye.
 

Reply

Marsh Posté le 08-06-2004 à 16:46:16   

Reply

Marsh Posté le 08-06-2004 à 16:47:35    

bonne soirée! ah la la et il me laisse tt seul ds la galère... Au Secours!!! si qq'un m'entend....

Reply

Marsh Posté le 08-06-2004 à 17:02:49    

yo sa marche!!! j'ai créé un ini avec WritePrivateProfileString puis je l'ai relu, et impecc! retour est le nb de caractères lus. merci pr ton aide=)

Reply

Marsh Posté le 08-06-2004 à 17:57:23    

ya un truc que je ne comprend pas, un ini, c'est pas crypté alors pourquoi ne pas le lire et l'ecrire avec Open.
 
L'API ferait-elle un truc de plus ?
 

Reply

Marsh Posté le 08-06-2004 à 18:18:46    

Avec la fonction Open (que je ne connais pas, je ne fais jamais de VB habituellement), est-ce qu'il ne faut pas déplacer un pointeur pour lire et écrire dans le fichier? de ttes façons il faut se dire que la fonction Open utilise très certainement des fonctions de l'API. avec WritePrivateProfileString, on accède directement aux sections et valeurs. c qd même bcp + rapide.

Reply

Marsh Posté le 08-06-2004 à 18:21:33    

je viens de retrouver les termes exacts. Avec Open, tu obtient un accès séquentiel au fichier, et avec les API Write... et Get... tu as un accès direct. j'espère avoir répondu à ta question. =)

Reply

Marsh Posté le 08-06-2004 à 20:04:47    

Non avec Open, tu as aussi un accés direct et le pointeur se déplace a chaque input # si tu lis en mode input.
 
Open est très pratique pour ouvrir n'importe quel fichier et tu peut les ouvrir dans different modes :
-Append : pour écrire directement a la fin du fichier
-Binary : lit par octet je croit
-Input: lecture normal (Input = lire jusqu'a une virgule, Line Input =lire ligne après ligne)
-Output : (écrire avec Write(place les chaines de texte entre quillemets) ou Print (écrit tel quel))
-Random : pour lire et écrire dans le meme mode (Put pour écrire et Get pour lire)
 
Exemple :
Open "Chemin\du\fichier" For Output as #1
    Write #1, "Toto"
    Print #1, "Toto"
Close #1
 
Resultat dans le fichier il sera écrit :
"Toto"
Toto
 
et tu peut faire encore plein de truc mais il faudrais plusieurs pages pour tout afficher.
L'aide de VB sur Open n'est pas très complètes je trouve (sur un pt de vue des exemples).
 
j'ai pas testé l'API, je vais le faire pour voir la difference.

Reply

Marsh Posté le 09-06-2004 à 08:02:17    

on parle de fichiers ini ici, laisse lui utiliser les API, c'est ce qu'il y a de mieux et de plus sûr :o
 
(chuis pas fan des fonctions fichiers en VB, plus merdique et flou que ça, tu meurs)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 09-06-2004 à 08:08:21    

Qq précisions sur la lecture des fichiers:

Citation :

Non avec Open, tu as aussi un accés direct et le pointeur se déplace a chaque input # si tu lis en mode input.

 
Oui mais si ton fichier fait 10000 lignes, tu dois te pastiller la lecture ligne à ligne, avec test si c'est la bonne à chaque lecture. C'est pas vraiment direct!
Avec les API, tu sautes directement à la section qui t'intêresse, en 1 ligne de code.
 
L'important, c'est de préparer le buffer de réception des données retournées, sinon, la méchante API, elle plante le gentil programme VB!
Dans notre cas:

Code :
  1. Option Explicit
  2. Private Declare Function GetPrivateProfileString Lib "kernel32" _
  3.                Alias "GetPrivateProfileStringA" _
  4.               (ByVal lpApplicationName As String, _
  5.                ByVal lpKeyName As Any, ByVal lpDefault As String, _
  6.                ByVal lpReturnedString As String, ByVal nSize As Long, _
  7.                ByVal lpFileName As String) As Long
  8. Private Sub Form_Load()
  9. Dim lRet As Long, lSize As Long
  10. Dim strApplicationName As String, strKeyName As String
  11. Dim strDefault As String, strReturnedString As String
  12. Dim strFileName As String
  13.     ' lRet = Nb de caracteres retournés
  14.     ' strApplicationName = Nom de la section à lire
  15.     ' strKeyName = Clé dans la section
  16.     ' strDefault = Chaine à utiliser si rien trouvé.
  17.     ' strReturnedString = chaine lue dans le .ini
  18.     ' lSize = longueur maxi à lire
  19.     ' strFileName = nom du fichier .ini
  20.    
  21.     ' Initialiser le buffer de retour (très important!!!!)
  22.     strReturnedString = Space(255)
  23.    
  24.     strApplicationName = "User"
  25.     strKeyName = "ScalingList"
  26.     strDefault = "Pas trouve"
  27.     lSize = 255
  28.     strFileName = "c:\win\Lndi.ini"
  29.    
  30.     lRet = GetPrivateProfileString(strApplicationName, _
  31.                strKeyName, strDefault, strReturnedString, lSize, strFileName)
  32.     ' On se debarrasse du caractere de fin de chaine typique du C.
  33.     strReturnedString = Left(strReturnedString, lRet)
  34. End Sub


Reply

Marsh Posté le 09-06-2004 à 08:40:14    

en effet, si le buffer n'est pas préparé, c même excel qui plante (il se ferme sans rien dire! d'où l'intérêt de sauvegarder de tps en tps...)

Reply

Marsh Posté le 09-06-2004 à 08:46:06    

j'aurais voulu savoir comment faire pour que le fichier ini soit dans le répertoire courant et ne pas désigner un chemin en dur dans le code.

Reply

Marsh Posté le 09-06-2004 à 08:55:40    

Application.Path ?

Reply

Marsh Posté le 09-06-2004 à 08:59:30    

ouais, ms non... il me donne où tourne excel, et moins j'aimerais qu'il me donne le chemin où est le document... merci qd même =)

Reply

Marsh Posté le 09-06-2004 à 09:04:55    

==> ThisWorkbook.Path

Reply

Marsh Posté le 09-06-2004 à 09:31:02    

merci bcp!!! c qd même vachement complet le VBA!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed