Recherche dans un tableau

Résolu
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011 - 24 avril 2011 à 19:22
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 - 25 avril 2011 à 14:44
Bonjour,

je bute sur une recherche dans un tableau.
***************************************************************************
Mon code :

'on lit le fichier
Dim v_Monfichier As StreamReader
Dim v_Contenu As String
v_Monfichier = New StreamReader("Storage Card\2577\ConfigInstall.ini")

' on met tout le contenu du fichier dans une variable
v_Contenu = v_Monfichier.ReadToEnd().ToString

' On le met dans un tableau avec en parametre le séparateur de mot ","
Dim v_Tableau() As String = v_Contenu.Split(",", vbCr)

' on recherche un élément dans le tableau
Dim v_AChercher As String = "Parametres de connexion"
For v_CptA = 1 To v_Tableau.GetUpperBound(0)
MsgBox(v_Tableau(v_CptA))
If v_Tableau(v_CptA) = v_AChercher Then
Exit For
End If
Next
***************************************************************************
mon fichier ini :
Applications
Microsoft .NET CF 3.5 FR-String Resource,01_NETCFv35.Messages.FR.wm.cab,0
Microsoft SQL Mobile 2005,05_sqlce.ppc.wce5.armv4i.CAB,1
PARAMETRES
Parametres de connexion,DisabledAPN.xml
Fin de section
***************************************************************************
ma problématique :
si ma recherche s'effectue sur le premier élément qui fait suite au VbCr (ex : Microsoft .NET CF 3.5 FR-String Resource, PARAMETRES,..), la recherche échoue
si ma recherche s'effectue sur un autre élément (01_NETCFv35.Messages.FR.wm.cab,DisabledAPN.xml,..) pas de pb
tous mes éléments sont de type STring.

Moi y en a rien comprendre...
Merci de votre aide,

11 réponses

NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 avril 2011 à 20:19
Bonjour,

As-tu testé en pas à pas ?

Tu as pensé à Cr, mais le Lf ?

Pourquoi ne pas utiliser une collection et utiliser io.File.ReadAllLines (avec un split par ligne dans une boucle For Each) ?

Mon site
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 avril 2011 à 22:11
Bonjour,

Le but du pas à pas que je te conseil est de vérifier élément par élément pour voir si l'élément recherché apparait, si ce n'est pas le cas, comprendre pourquoi.
Essayes avec ton code d'origine pour voir.

Mon site
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 avril 2011 à 23:48
Bonjour,

Jenpense que ça vient du séparateur de ligne, VbCrLf, comme tu ne retire que le Cr, il reste le Lf.

Il y a une surcharges dans le Split (voir si présent dans le CF) qui te permet de lui passer une chaine de caractères et il fais le découpage à chacun de ces caractères. Sinon, utilises un tableau de char pour voir si ça passe.

Mon site
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
25 avril 2011 à 13:24
Bonjour,

Dim lText As String="..."

lText=lText.Replace(vbcr,",").replace (vblf,",")
Ensuite, tu split sur ",", c'est une autre solution.

Mon site
3

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

Posez votre question
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011
25 avril 2011 à 14:24
Salut,

on tient le bon bout !
En fait, il y a 2 caractères indésirables : VbCr & VbLf
j'en ai donc renommé un en "," et supprimé l'autre
le code fonctionne avec ceci :

v_Contenu = v_Contenu.Replace(vbCr, "").Trim(vbLf)
Dim v_Tableau() As String = v_Contenu.Split(",", vbLf)

je te remercie encore pour le temps passé.

Excellente journée à toi,
3
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011
24 avril 2011 à 20:44
Bonjour NHenry,

Merci pour ta réactivité.
Pour le bilan :
1 - j'ai testé le mode pas à pas qui n'a rien donné car pas d'erreur, je n'ai pas la remontée de l'information c'est tout.
2 - j'ai testé aussi avec le VbCrLf qui donne le même résultat
3 - j'ai testé avec ta procédure proposée :

Dim v_Path As String = "Storage Card\2577\ConfigInstall.ini"

Dim v_Tableau() As String = IO.File.ReadAllLines(v_Path, Encoding.Unicode)
Dim s As String
For Each s In v_Tableau
MsgBox(s)
Next

Cependant, j'ai un message " IO.File.ReadAllLines " n'est pas un membre de System.IO.File, sachant que j'ai déclaré les namespace suivants :
Imports System
Imports System.IO
Imports System.IO.File
Imports System.IO.Path
Imports System.Text

Merci pour ton soutien,
Bonne soirée
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
24 avril 2011 à 21:00
Bonjour,

Tu utilises le Compact Framework ? Si oui, je n'avais pas pris en compte cela (d'où le ReadAllLines inconnu).

Concernant le pas à pas, tu peux vérifier passage par passage pour savoir pourquoi ton égalité n'est jamais vraie. (caractère en trop ou autre)

Mon site
0
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011
24 avril 2011 à 21:26
Re,

Effectivement, j'utilise le compact Framework 3.5 car c'est un dev pour PDA.
Je développe sous visual studio 2008, le pas à pas, c'est le " pas à pas détaillé " ?
si tel est le cas, comment l'utiliser à bon escient, car je n'ai trouvé aucune erreur particulière ?
Dsl, et encore merci
0
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011
24 avril 2011 à 23:20
j'ai effectivement effectué divers tests croisés avec des boucles et en affichant les résultats dans un msgbox, comme par exemple afficher un à un tous les éléments du tableau afin de voir comment ils étaient interprétés, de quel type ils étaient.
Ils sont tous sont bien enregistrés dans le tableau, possèdent tous le même type STRING, cependant le pb persiste.
Je pense que la piste à suivre est dépendante du split que j'ai effectué ; comme je le précisait plus haut, les seuls éléments que je n'arrive pas à cibler sont uniquement les premiers items qui font suite au retour chariot (VbCr), les autres pas de soucis.
L'objectif de mon dev est de créer un master sur carte SD auto-installable qui , lors de l'insertion de ladite carte, exécute un autorun.exe qui va consulter un fichier de type .ini dans lequel je précise le séquencement des opérations (installation du cab1, puis du cab2,....puis du fichier de paramétrage provisionning XML,...)
Je bute donc sur la toute première partie.
Voilà, merci pour ton aide et bonne nuit !
0
mr100kv Messages postés 14 Date d'inscription samedi 16 septembre 2006 Statut Membre Dernière intervention 19 septembre 2011
25 avril 2011 à 09:03
Salut NHenry,

Comme quoi la nuit porte conseil !
Effectivement, il s'agit bien d'un séparateur VbLf qui me fout la zone.
J'ai effectué un découpage comme suit :
MsgBox("a" & v_Tableau(v_CptA) & "a") qui m'a permis de révéler un séparateur " saut de ligne ".
Maintenant la question reste comment supprimer tous ces sauts qui occupent une place vide dans le tableau ?
Encore merci de m'avoir mis sur la piste.
0
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
25 avril 2011 à 14:44
Bonjour,

Si tu as résolu ton pb, merci de mettre "Réponse acceptées" sur le ou les messages qui t'ont aidés.

Mon site
0
Rejoignez-nous