VB.Net Lire un fichier ini en sélectionnant que les rubriques

Résolu
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 - 21 janv. 2009 à 13:10
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre 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

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 janv. 2009 à 13:52
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
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 janv. 2009 à 16:38
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 
3
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
21 janv. 2009 à 13:12
Bonjour,

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

Merci

S.L.B.
<hr />
0
lillith212 Messages postés 1229 Date d'inscription vendredi 16 novembre 2007 Statut Membre Dernière intervention 16 juin 2009
21 janv. 2009 à 13:20
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 />
0

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

Posez votre question
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 1
21 janv. 2009 à 13:31
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



 
0
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 1
21 janv. 2009 à 14:29
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...
0
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 1
21 janv. 2009 à 15:50
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
0
cs_MagDix Messages postés 531 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 6 octobre 2012 1
21 janv. 2009 à 17:08
Je n'y serrais jamais arrivé seul


 


merci mille fois
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
21 janv. 2009 à 18:03
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
0
Rejoignez-nous