Fichier - chaine

salmoliv Messages postés 14 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 1 juin 2015 - 15 juil. 2003 à 11:56
salmoliv Messages postés 14 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 1 juin 2015 - 15 juil. 2003 à 16:45
Bonjour, lorsque je charge un fichier qui a cette allure sous notepad (ou autre) :

[SOCIETE]
nomsoc=LEO PHARMACEUTICALS
matsoc=0863
[UTILISATEURS]
nbmatuti=1
matuti1=AD8KR

et que je le mets dans une variable avec le code ci dessous :
Open pathjob$ For Binary As 1
StINI = Input$(LOF(1), 1)
Close 1

La variable stINI sera :

"[SOCIETE]
nomsoc=LEO PHARMACEUTICALS
matsoc=0863
[UTILISATEURS]
nbmatuti=1
matuti1=AD8KR

J ai 3 caracteres bizaroides qui apparaissent ... "
A notter que celui du milieu varie suivant les fichiers ...

Pourquoi ???

Merci

8 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
15 juil. 2003 à 12:02
Bonjour
Cherche à savoir ce que sont ces 3 caractères :
Debug.Print Asc(Mid(stINI, 1, 1)), Asc(Mid(stINI, 2, 1)), Asc(Mid(stINI, 3, 1))
0
salmoliv Messages postés 14 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 1 juin 2015
15 juil. 2003 à 12:43
Le premier : 91
Le second : 83
Et le troisieme : 79

Ce qui semble etre correct ...
91 = [
83=S
79=O

C est donc au moment de l enregistrer qu il rajoute des caracteres speciaux :
Open "c:\test.ini" For Binary As 1
Put 1, , stINI
Close 1

Si je reouvre le fichier ecris et que je "debug" les 7 premiers caracteres, j ai :
Le premier : 8 = code de control BS (??)
Le second est : 0 = NUL
Le troisieme : 55 = 7 (???)
Le quatrieme : 1 = SOH (???)
Et les 3 suivants qui sont bons ...

Pkoi VB rajoute t il ces codes ? Comment ne pas les mettre ??

Olivier
0
sylric Messages postés 91 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 22 août 2003
15 juil. 2003 à 14:21
Ce fichier est un fichier de configuration *.ini ou *.cfg ?
Si le but de ton code est de récupérer les valeurs des clefs, saches qu'il existe des API pour les lires, qui sont plus simple et plus rapides que des fonctions que tu ferais toi même !
0
salmoliv Messages postés 14 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 1 juin 2015
15 juil. 2003 à 15:22
Ceci est un fichier specifique a ma boite.
Cependant il a la meme structure qu un fichier ini ...

Je connais les API pour modifier / ecrire ...

Mais dans mon cas, je dois effacer des lignes ...
Si tu connais l API qui permet de supprimer des lignes dans un fichier ini, fait moi signe, car je ne la connais pas !!

Merci

Olivier
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
15 juil. 2003 à 16:18
Trouvé ! (?)
Plus d'erreur si tu déclares ta variable avant utilisation :
Dim stINI As String
0
sylric Messages postés 91 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 22 août 2003
15 juil. 2003 à 16:23
Il existe au moins quatre API pour les fichier de ce types :
GetPrivateProfileString ' récupère une valeur
WritePrivateProfileString ' ecrit une valeur
et
GetPrivateProfileSection ' récupère toute la rubrique
WritePrivateProfileSection ' ecrit toute la rubric

pour effacer des lignes dans une rubric,
tu met en variable toutes les valeurs que tu veux garder avec GetPrivateProfileString.
tu utilises WritePrivateProfileSection en donnant aucun paramètres à par la section (ou rubric) pour supprimer les ligne de la section
tu réécris les lignes que tu voulais garder avec WritePrivateProfileString

Pour effacer le nom d'une rubric, j'utilise cette méthode :
(je tiens à préciser que ce morceau de code, à qqchose près, a été déposé sur le forum par un auteur dont je ne me rappelle plus le nom... merci à lui)
    'ligne à supprimer
    Strg = "[" & NomRubric & "]"
    'Charge le fichier dans une chaine
    MyFile = FreeFile
    Open CheminFichierINI For Binary As MyFile
        StrINI = Input$(LOF(MyFile), MyFile)
    Close MyFile
    'Recherche la position du début de la ligne et du saut en fin de ligne...
    PosS = InStr(LCase(StrINI), LCase(Strg))
    PosE = InStr(PosS, LCase(StrINI), Chr(13) & Chr(10))
    'Reconstruction de la chaine sans la ligne
    strNewINI = Left(StrINI, PosS - 1) & Mid(StrINI, PosE + 2)
    'On écrase le fichier avec sa nouvelle forme
'    Kill CheminFichierINI
    MyFile = FreeFile
    Open CheminFichierINI For Binary As MyFile
        Put MyFile, , stNewINI
    Close MyFile


pour la déclaration des fonctions :
Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private 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

Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
0
salmoliv Messages postés 14 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 1 juin 2015
15 juil. 2003 à 16:27
Chapeau !!! Ca marche nickel ;-)

Merci beaucoup pour ton aide.

Olivier
0
salmoliv Messages postés 14 Date d'inscription jeudi 17 octobre 2002 Statut Membre Dernière intervention 1 juin 2015
15 juil. 2003 à 16:45
Merci de tonm aide, mais c est le bout de code que j utilise ...

Olivier
0
Rejoignez-nous