VB.Net Lire un fichier ini en sélectionnant que les rubriques [Résolu]

Messages postés
532
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
6 octobre 2012
- - Dernière réponse : PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
- 21 janv. 2009 à 18:03
Bonjour à tous


Je cherche un truc afin de pouvoir récupérer toutes les rubriques d'un fichier ini


Par exemple j'ai un fichier ini qui ressemble à cela..


[Section1]
var1=sdfkgjhbask
var2=sfjgkas


[Section2]
var1=fsangl
var2=nsdjf




J'aimerais récupérer seulement le nom des rubriques (Section1 et Section2)
afin de les mettre dans un tableau.


J'arrive à lire le fichier sans problème, d'écrire dans ce fichier mais je n'arrive pas
à comprendre le code afin de lire une partie sécifique du fichier (lire que les rubriques)


Merci de votre aide
Afficher la suite 

9 réponses

Meilleure réponse
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
3
Merci
salut,

hier tu demandais le code pour lire les "libellé" d'un ini
je t'ai donné le code, en provenant de CODYX.org

aujourd'hui tu veux lister les sections
voyons voir si codyx marche toujours....

magie :)



<hr />
'    LISTER LES SECTIONS D'UN FICHIER INI
'    http://www.codyx.org/snippet_lister-sections-fichier-ini_306.aspx#991
'    Posté par [ Willi ]
le 17/02/2007
<hr />



<DllImport(

"kernel32.dll"

, CharSet:=CharSet.Auto)>
_




Function


GetPrivateProfileSectionNames( _
ByVal

lpszReturnBuffer
As
IntPtr,
ByVal
nSize
As

Integer
,
ByVal
lpFileName
As

String
)
As

Integer

End

Function
   
Private Function EnumSections(ByRef sections() As String, ByVal path As String)
As Boolean

        Dim bRet As
Boolean = True
        Dim pBuff As IntPtr =
Marshal.AllocCoTaskMem(458752)

        Dim iRet = GetPrivateProfileSectionNames(pBuff, 458752,
path)

        If iRet > 0
Then
            Dim sRet As String = Marshal.PtrToStringAuto(pBuff,
iRet)
            sections = sRet.Substring(0, sRet.Length -
1).Split(vbNullChar)
        Else
            bRet = False
        End
If

       
Marshal.FreeCoTaskMem(pBuff)

       
Return bRet

    End
Function








'----------------------------------------------------------------



'Remarques :


'Ajoutez la directive Imports System.Runtime.InteropServices











conclusion : tu demandes au final du tout cuit pour qu'on te fasse tout ton code INI, et toujours dans chercher
çà se passe de tout commentaire

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
3
Merci
salut,

BY REF = PAR RéFéRENCE

le résultat sera dans le tableau en paramètre la fonction retourne une résultat de réussite ou d'échec

dim asRet() as string

if EnumSections(asRet(),"c:\fichier.ini") then messagebox.shox "le tableau contient les section = SUCCESS"

<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 188 internautes nous ont dit merci ce mois-ci

Commenter la réponse de PCPT
Messages postés
1231
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
0
Merci
Bonjour,

Quel code tu utilises?
Qu'est ce que tu comprends pas dans ce code?

Merci

S.L.B.
<hr />
Commenter la réponse de lillith212
Messages postés
1231
Date d'inscription
vendredi 16 novembre 2007
Statut
Membre
Dernière intervention
16 juin 2009
1
0
Merci
Re,
regarde ce code... (Trouvé sur CS)
à placer dans un module

#Region "Sections INI"

PrivateDeclareFunction GetPrivateProfileSectionNames Lib "kernel32.dll" Alias "GetPrivateProfileSectionNamesA" (ByVal lpszReturnBuffer() AsByte, ByVal nSize AsInteger, ByVal lpFileName AsString) AsInteger

Function SectionsINI() As ArrayList

SectionsINI = New ArrayList

Dim Buffer(MAX_ENTRY) AsByte

Dim BuffStr AsString

Dim PrevPos AsInteger = 0

Dim Length AsInteger

Try

Length = GetPrivateProfileSectionNames(Buffer, MAX_ENTRY, Fichier)

Catch

ExitFunction

EndTry

Dim ASCII AsNew System.Text.ASCIIEncoding

If Length > 0 Then

BuffStr = ASCII.GetString(Buffer)

Length = 0

PrevPos = -1

Do

Length = BuffStr.IndexOf(ControlChars.NullChar, PrevPos + 1)
If Length - PrevPos 1 OrElse Length -1 ThenExitDo

Try

SectionsINI.Add(BuffStr.Substring(PrevPos + 1, Length - PrevPos))

Catch

EndTry

PrevPos = Length

Loop

EndIf

EndFunction

#EndRegion

lien de la source :
http://www.vbfrance.com/codes/INI-VB-NET_7709.aspx

S.L.B.
<hr />
Commenter la réponse de lillith212
Messages postés
532
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
6 octobre 2012
1
0
Merci
Salut... oui c'est à partir de ce code que j'ai essayé mais...


Bon je suis vraiment perdu...et j'ai besoin d'une lanterner pour m'allumer...


 


mais le code ne fais que me donné des Lenght...


je cherche le nom des sections... je ne sais pas où aller chercher l'info pour répurérer l'info...

MAX_ENTRY qu'est ce que je dois écire...
Fichier c'est bien la lien du fichier...  Voici mes modification que j'ai faite mais je n'y arrive toujours pas...

Et quel varibale de récupère pour me donner le nom de la section...  merci de ton aide



Private



Declare



Function
GetPrivateProfileSectionNames

Lib



"kernel32.dll"



Alias



"GetPrivateProfileSectionNamesA"
(

ByVal
lpszReturnBuffer()

As



Byte
,

ByVal
nSize

As



Integer
,

ByVal
lpFileName

As



String
)

As



Integer








Function
SectionsINI()

As
ArrayListSectionsINI =


New
ArrayList


Dim
Buffer(32768)

As



Byte

Dim
BuffStr

As



String

Dim
PrevPos

As



Integer
= 0


Dim
Length

As



Integer






Try

Length = GetPrivateProfileSectionNames(Buffer, 32768 ,

"C:\fichier.ini"
)


Catch

Exit



Function

End



Try






Dim
ASCII

As



New
System.Text.ASCIIEncoding




If
Length > 0

Then

   BuffStr = ASCII.GetString(Buffer)
   Length = 0
   PrevPos = -1
   

Do

      Length = BuffStr.IndexOf(ControlChars.NullChar, PrevPos + 1)


      If
Length - PrevPos = 1

OrElse
Length = -1

Then



Exit



Do

         Try

            SectionsINI.Add(BuffStr.Substring(PrevPos + 1, Length - PrevPos))


         Catch

         End



Try

      PrevPos = Length


    Loop

End



If






End



Function



 
Commenter la réponse de cs_MagDix
Messages postés
532
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
6 octobre 2012
1
0
Merci
Salut... et bien je l'avais trouvé ton  code.. mais je n'arrive pas à saisir comment appeler
la fonction


D'ou le pourquoi que j'ai écris un message sur le forum...


Je n'ai pas t'endance à écrire tout le parcourt que je fais pour montrer les trucs que je ne comprends pas


J'ai passé une demi heure à essayer de gérer cette fonction et je ne comprend pas comment
l'appeler


Public Function EnumSections(ByRef sections() As String, ByVal path As String) As Boolean




EnumSections(?????,"c:\fichier.ini")


Je ne comprends pas quoi inscrire pour les sections quand c'est justement les section que je cherche.




Voilà pourquoi encore une fois j'ai écrit ce message sur le forum...
Commenter la réponse de cs_MagDix
Messages postés
532
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
6 octobre 2012
1
0
Merci
enfin si ca peut aider quelqu'un
J'ai finalement lu le fichier INI au complet et récupérer tout les lignes
qui avait comme caractères [ et mis cela dans un tableau...
Je n'ai pas réussi à comprendre les fonctions proposées sur le site.


    Public Function Lire_Fichier_Sections_Ini()
        Dim ObjetFichier As IO.StreamReader = New IO.StreamReader("c:\Fichier.ini")
        Dim i As Integer = 0


        Try
            Do
                Fichier = ObjetFichier.ReadLine()
                If InStr(Fichier, "[") Then
                    If i = 0 Then
                        ReDim Tableau_Sections(i)
                    Else
                        ReDim Preserve Tableau_Sections(i)
                    End If
                    Tableau_Sections(i) = Fichier
                    i = i + 1
                End If
            Loop Until Fichier Is Nothing
            ObjetFichier.Close()
        Catch exc As Exception
            MsgBox("Problème - Fichier d'initialisation Absent")
        End Try
    End Function
Commenter la réponse de cs_MagDix
Messages postés
532
Date d'inscription
lundi 5 juin 2006
Statut
Membre
Dernière intervention
6 octobre 2012
1
0
Merci
Je n'y serrais jamais arrivé seul


 


merci mille fois
Commenter la réponse de cs_MagDix
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
26
0
Merci
et pour info...

dans le code que tu as indiqué :

FUNCTION => alors pourquoi ne renvoie-t'elle pas de résultat et n'est pas typée?
FICHIER.. => ou est-elle déclarée?
INSTR => on a pas longuement parlé de INDEXOF hier? de son fonctionnement, de SUBSTRING, de l'aide avec captures etc? instr c'est du VB6, à ne pas utiliser en VB.NET donc
"[" => donc si on a une ligne du genre VAR14=[nimportequoi, çà ressemble à un format valide c'est bien çà?....

je disais quoi hier déjà? ah oui :
"

si c'est pour faire que des copier/coller sans lire, les mêmes questions seront toujours posées (par les mêmes personnes)

"

çà va vite ne plus être amusant
Commenter la réponse de PCPT