Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
936 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  écriture fichier txt/ini

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

écriture fichier txt/ini

n°756691
destynov@
Posté le 08-06-2004 à 15:55:07  profilanswer
 

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

mood
Publicité
Posté le 08-06-2004 à 15:55:07  profilanswer
 

n°756716
JihemAir
Je sais pas
Posté le 08-06-2004 à 16:05:25  profilanswer
 

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.
 

n°756722
destynov@
Posté le 08-06-2004 à 16:08:04  profilanswer
 

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?

n°756742
JihemAir
Je sais pas
Posté le 08-06-2004 à 16:13:17  profilanswer
 

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.

n°756772
destynov@
Posté le 08-06-2004 à 16:26:49  profilanswer
 

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?

n°756776
destynov@
Posté le 08-06-2004 à 16:28:01  profilanswer
 

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

n°756795
JihemAir
Je sais pas
Posté le 08-06-2004 à 16:33:34  profilanswer
 

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 ?

n°756804
destynov@
Posté le 08-06-2004 à 16:35:44  profilanswer
 

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

n°756829
destynov@
Posté le 08-06-2004 à 16:44:43  profilanswer
 

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?

n°756830
JihemAir
Je sais pas
Posté le 08-06-2004 à 16:46:16  profilanswer
 

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

mood
Publicité
Posté le 08-06-2004 à 16:46:16  profilanswer
 

n°756834
destynov@
Posté le 08-06-2004 à 16:47:35  profilanswer
 

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

n°756867
destynov@
Posté le 08-06-2004 à 17:02:49  profilanswer
 

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=)

n°756940
prog1001
Posté le 08-06-2004 à 17:57:23  profilanswer
 

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 ?
 

n°756952
destynov@
Posté le 08-06-2004 à 18:18:46  profilanswer
 

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.

n°756954
destynov@
Posté le 08-06-2004 à 18:21:33  profilanswer
 

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. =)

n°757045
prog1001
Posté le 08-06-2004 à 20:04:47  profilanswer
 

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.

n°757417
drasche
Posté le 09-06-2004 à 08:02:17  profilanswer
 

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)
n°757424
JihemAir
Je sais pas
Posté le 09-06-2004 à 08:08:21  profilanswer
 

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


n°757440
destynov@
Posté le 09-06-2004 à 08:40:14  profilanswer
 

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...)

n°757442
destynov@
Posté le 09-06-2004 à 08:46:06  profilanswer
 

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.

n°757446
JihemAir
Je sais pas
Posté le 09-06-2004 à 08:55:40  profilanswer
 

Application.Path ?

n°757448
destynov@
Posté le 09-06-2004 à 08:59:30  profilanswer
 

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 =)

n°757449
JihemAir
Je sais pas
Posté le 09-06-2004 à 09:04:55  profilanswer
 

==> ThisWorkbook.Path

n°757470
destynov@
Posté le 09-06-2004 à 09:31:02  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  écriture fichier txt/ini

 

Sujets relatifs
Soucis d'écriture d'un fichier BITMAP [RESOLU]Problème écriture dans fichier texte
[ASP.NET][C#]ecriture d'un fichier xml[C++]Ecriture dans un fichier texte
méthode optimisée d'écriture dans un fichier logEcriture dans un fichier XLS : problème de format
BMP à SHP - Ecriture de n bytes ds un fichier, Taille réelle : n+1BMP à SHP - Ecriture de n bytes ds un fichier, Taille constatée: n+1
[Help needed] Pb de fprintf , ecriture dans un fichier.[C++ Builder] Problème étrange entre OpenDialog & écriture de fichier
Plus de sujets relatifs à : écriture fichier txt/ini


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR