Invalid argument=La valeur '0' n'est pas valide pour 'index'

guice11 Messages postés 52 Date d'inscription samedi 25 novembre 2006 Statut Membre Dernière intervention 17 décembre 2009 - 9 sept. 2009 à 16:01
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 11 sept. 2009 à 09:56
J'ai un problème lorsque je veux afficher des informations d'une BD dans une listview. Le 1er affichage est correct mais les suivant j'ai une erreur : Invalid argument=La valeur '0' n'est pas valide pour 'index'. Voilà je sais pas comment faire.


[code=vb] Private Sub ListViewAlbums_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListViewAlbums.SelectedIndexChanged
Try
Me.Cursor = Cursors.WaitCursor
'je récupère le titre sélectionné + l'url du titre
Dim result As String
result = Me.RtHtmlData2.Text

Dim Pattern As String
Pattern = "(.*)"
MessageBox.Show(Pattern)
Dim rx As New Text.RegularExpressions.Regex(Pattern, RegexOptions.IgnoreCase)
MessageBox.Show(rx.ToString)

Dim matches As MatchCollection = rx.Matches(result)
MessageBox.Show(matches.ToString)

Dim index As Integer
index = Me.ListViewAlbums.SelectedIndices(0)
MessageBox.Show(index)

Dim WorkingUrl As String
WorkingUrl = matches(index).ToString
MessageBox.Show(WorkingUrl)

Dim Pattern1 As String
Pattern1 = "/serie-[0-9]*-BD-[a-zA-Z0-9-'_,çœ\(+\)+\\+\/+\&+\x9C+]*.html#[0-9]*"
Dim rx1 As New Text.RegularExpressions.Regex(Pattern1, RegexOptions.IgnoreCase)

Dim match As Match = rx1.Match(WorkingUrl)
MessageBox.Show(match.ToString)

Dim MaRegex As New System.Text.RegularExpressions.Regex("")
Dim Value1 As String
Value1 = System.Text.RegularExpressions.Regex.Replace(matches(index).Value, "(]+>)", "")
Value1 = System.Text.RegularExpressions.Regex.Replace(Value1, "\x9C", "œ")
Me.LabelTitreGrand.Text = Value1
Titre = Value1

Dim album As String = match.ToString
album = album.Replace("serie", "album")
MessageBox.Show(album)

Dim MotHtml As Integer = InStr(album, "html")
MessageBox.Show(MotHtml)

Dim ReperageID As String = Mid(album, MotHtml + 5)
MessageBox.Show(ReperageID)

Dim TitreUrl As String
TitreUrl = System.Text.RegularExpressions.Regex.Replace(WorkingUrl, "(]+>)", "")
TitreUrl = System.Text.RegularExpressions.Regex.Replace(TitreUrl, "\x9C", "œ")
MessageBox.Show(TitreUrl)

Dim TitreUrlTiretEnlever As String
TitreUrlTiretEnlever = TitreUrl.Replace("-", " ")
MessageBox.Show(TitreUrlTiretEnlever)

Dim TitreUrlVirguleEnlever As String
TitreUrlVirguleEnlever = TitreUrlTiretEnlever.Replace(",", "")
MessageBox.Show(TitreUrlVirguleEnlever)

Dim TitreUrlTiretAjouter As String
TitreUrlTiretAjouter = TitreUrlVirguleEnlever.Replace(" ", "-")
MessageBox.Show(TitreUrlTiretAjouter)

Dim TitreUrlApostrophe As String
TitreUrlApostrophe = TitreUrlTiretAjouter.Replace("'", "-")
MessageBox.Show(TitreUrlApostrophe)

Dim TitreUrlTroisPoints As String
TitreUrlTroisPoints = TitreUrlApostrophe.Replace("...", "")
MessageBox.Show(TitreUrlTroisPoints)

Dim TitreUrlPointInterrogation As String
TitreUrlPointInterrogation = TitreUrlTroisPoints.Replace("-?", "")
MessageBox.Show(TitreUrlPointInterrogation)

Dim TitreUrlPointExclamation As String
TitreUrlPointExclamation = TitreUrlPointInterrogation.Replace("-!", "")
MessageBox.Show(TitreUrlPointExclamation)

Dim TitreUrlFini As String = (sansAccents(TitreUrlPointExclamation))
MessageBox.Show((sansAccents(TitreUrlFini)))

Dim SuiteUrl As String
SuiteUrl = "/album-" & ReperageID & "-BD-" & TitreUrlFini & ".html"

'je me connecte à l'url du titre sélectionné
Try
Dim url As String = "http://www.bedetheque.com" & SuiteUrl.ToString
Dim request As WebRequest = WebRequest.Create(url)

Dim response As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
Dim dataStream As Stream = response.GetResponseStream()
Dim respEncoding As Encoding = Encoding.GetEncoding(response.CharacterSet)
Dim reader As New StreamReader(dataStream, respEncoding)


Dim HtmlData As String = reader.ReadToEnd()
Me.RtHtmlData3.Text = HtmlData
reader.Close()
dataStream.Close()
response.Close()
Me.LbUrlAlbum.Visible = False
Me.LbUrlAlbum.Text = url

'je récupère le titre original
Dim PatternTitre As String
PatternTitre = "(.+?)"
Dim rxTitre As New Text.RegularExpressions.Regex(PatternTitre, RegexOptions.IgnoreCase)
Dim matchTitre As Match = rxTitre.Match(HtmlData)
Dim MaRegexTitre As New System.Text.RegularExpressions.Regex("")
Dim ValueTitre As String
ValueTitre = System.Text.RegularExpressions.Regex.Replace(matchTitre.Value, "(]+>)", "")
ValueTitre = System.Text.RegularExpressions.Regex.Replace(ValueTitre, "\x9C", "œ")
ValueTitre = System.Text.RegularExpressions.Regex.Replace(ValueTitre, "\x2B", "+")
ValueTitre = ValueTitre.Replace(". ", "")
If ValueTitre = "" Then
Me.LabelTitre.Text = Titre
Else
Me.LabelTitre.Text = ValueTitre
End If

'je récupères le numéro
Dim PatternNumero As String
PatternNumero = "(.*)"
Dim rxNumero As New Text.RegularExpressions.Regex(PatternNumero, RegexOptions.IgnoreCase)
Dim matchNumero As Match = rxNumero.Match(HtmlData)
CompteurNumero = 1
If matchNumero.ToString = "" Then
CompteurNumero = 2
Dim PatternNumero2 As String
PatternNumero2 = "(.+)(.+?)"
Dim rxNumero2 As New Text.RegularExpressions.Regex(PatternNumero2, RegexOptions.IgnoreCase)
MessageBox.Show(rxNumero2.ToString)
matchNumero = rxNumero2.Match(HtmlData)
MessageBox.Show(matchNumero.ToString)
If matchNumero.ToString = "" Then
CompteurNumero = 3
Dim PatternNumero3 As String
PatternNumero3 = "(.*)(.+?)"
Dim rxNumero3 As New Text.RegularExpressions.Regex(PatternNumero3, RegexOptions.IgnoreCase)
MessageBox.Show(rxNumero3.ToString)
matchNumero = rxNumero3.Match(HtmlData)
MessageBox.Show(matchNumero.ToString)
End If
End If
Dim MaRegexNumero As New System.Text.RegularExpressions.Regex("")
Dim ValueNumero As String
ValueNumero = System.Text.RegularExpressions.Regex.Replace(matchNumero.Value, "(]+>)", "")
If ValueNumero = "" Then
Me.LabelNumero.Text = ValueNumero & "."
Else
Me.LabelNumero.Text = ValueNumero & "."
End If

Dim PatternTitreEtNumero As String
PatternTitreEtNumero = "(.+?)(.+?)"
Dim rxTitreEtNumero As New Text.RegularExpressions.Regex(PatternTitreEtNumero, RegexOptions.IgnoreCase)
Dim matchTitreEtNumero As Match = rxTitreEtNumero.Match(HtmlData)
If matchTitreEtNumero.ToString = "" Then
Dim PatternTitreEtNumero2 As String
PatternTitreEtNumero2 = "(.*)(.+?)(.+?)"
Dim rxTitreEtNumero2 As New Text.RegularExpressions.Regex(PatternTitreEtNumero2, RegexOptions.IgnoreCase)
MessageBox.Show(rxTitreEtNumero2.ToString)
matchTitreEtNumero = rxTitreEtNumero2.Match(HtmlData)
MessageBox.Show(matchTitreEtNumero.ToString)
End If
Dim MaRegexTitreEtNumero As New System.Text.RegularExpressions.Regex("")
Dim ValueTitreEtNumero As String
ValueTitreEtNumero = System.Text.RegularExpressions.Regex.Replace(matchTitreEtNumero.Value, "(]+>)", "")
ValueTitreEtNumero = System.Text.RegularExpressions.Regex.Replace(ValueTitreEtNumero, "\x9C", "œ")
ValueTitreEtNumero = System.Text.RegularExpressions.Regex.Replace(ValueTitreEtNumero, "\x2B", "+")
ValueTitreEtNumero = ValueTitreEtNumero.Replace("quot;", """")
If ValueTitreEtNumero = "" Then
Me.LabelTitreNumero.Text = ""
Else
Me.LabelTitreNumero.Text = ValueTitreEtNumero
End If



Dim PatternScenario As String
PatternScenario = "Scénario :(.+?)"
Dim rxScenario As New Text.RegularExpressions.Regex(PatternScenario, RegexOptions.IgnoreCase)
Dim matchScenario As Match = rxScenario.Match(HtmlData)
Dim MaRegexScenario As New System.Text.RegularExpressions.Regex("")
Dim ValueScenario As String
ValueScenario = System.Text.RegularExpressions.Regex.Replace(matchScenario.Value, "(]+>)", "")
ValueScenario = ValueScenario.Replace("Scénario :", "")
ValueScenario = ValueScenario.Replace("lt;", "")
If ValueScenario = "" Then
Me.LabelScenario.Text = ""
Else
Me.LabelScenario.Text = ValueScenario
End If

Dim VirguleScenario As Integer = InStr(LabelScenario.Text, ",")
Dim SigneSuperieurScenario As Integer = InStr(LabelScenario.Text, ")", "")
ValueDessin = ValueDessin.Replace("Dessin :", "")
ValueDessin = ValueDessin.Replace("lt;", "")
If ValueDessin = "" Then
Me.LabelDessin.Text = ""
Else
Me.LabelDessin.Text = ValueDessin
End If

Dim VirguleDessin As Integer = InStr(LabelDessin.Text, ",")
Dim SigneSuperieurDessin As Integer = InStr(LabelDessin.Text, ")", "")
ValueCouleurs = ValueCouleurs.Replace("Couleurs :", "")
ValueCouleurs = ValueCouleurs.Replace("lt;", "")
ValueCouleurs = ValueCouleurs.Replace("amp;", "&")
If ValueCouleurs = "" Then
Me.LabelCouleur.Text = ""
Else
Me.LabelCouleur.Text = ValueCouleurs
End If

Dim VirguleCouleur As Integer = InStr(LabelCouleur.Text, ",")
Dim SigneSuperieurCouleur As Integer = InStr(LabelCouleur.Text, ")", "")
ValueEditeur = ValueEditeur.Replace("Editeur :", "")
If ValueEditeur = "" Then
Me.LabelEditeur.Text = ""
Else
Me.LabelEditeur.Text = ValueEditeur
End If

Dim PatternCollection As String
PatternCollection = "Collection : (.+?)"
Dim rxCollection As New Text.RegularExpressions.Regex(PatternCollection, RegexOptions.IgnoreCase)
Dim matchCollection As Match = rxCollection.Match(HtmlData)
Dim MaRegexCollection As New System.Text.RegularExpressions.Regex("")
Dim ValueCollection As String
ValueCollection = System.Text.RegularExpressions.Regex.Replace(matchCollection.Value, "(]+>)", "")
ValueCollection = ValueCollection.Replace("Collection : ", "")
If ValueCollection = "" Then
Me.LabelCollection.Text = ""
Else
Me.LabelCollection.Text = ValueCollection
End If

Dim PatternISBN As String
PatternISBN = "ISBN :(.+?)"
Dim rxISBN As New Text.RegularExpressions.Regex(PatternISBN, RegexOptions.IgnoreCase)
Dim matchISBN As Match = rxISBN.Match(HtmlData)
Dim MaRegexISBN As New System.Text.RegularExpressions.Regex("")
Dim ValueISBN As String
ValueISBN = System.Text.RegularExpressions.Regex.Replace(matchISBN.Value, "(]+>)", "")
ValueISBN = ValueISBN.Replace("ISBN :", "")
If ValueISBN = "" Then
Me.LabelISBN.Text = ""
Else
Me.LabelISBN.Text = ValueISBN
End If

Dim PatternCycle As String
PatternCycle = "Cycle :(.+?)"
Dim rxCycle As New Text.RegularExpressions.Regex(PatternCycle, RegexOptions.IgnoreCase)
Dim matchCycle As Match = rxCycle.Match(HtmlData)
Dim MaRegexCycle As New System.Text.RegularExpressions.Regex("")
Dim ValueCycle As String
ValueCycle = System.Text.RegularExpressions.Regex.Replace(matchCycle.Value, "(]+>)", "")
ValueCycle = ValueCycle.Replace("Cycle :", "")
If ValueCycle = "" Then
Me.LabelCycle.Text = ""
Else
Me.LabelCycle.Text = ValueCycle
End If

Dim PatternDepotLegal As String
PatternDepotLegal = "Dépot légal :(.+?)"
Dim rxDepotLegal As New Text.RegularExpressions.Regex(PatternDepotLegal, RegexOptions.IgnoreCase)
Dim matchDepotLegal As Match = rxDepotLegal.Match(HtmlData)
Dim MaRegexDepotLegal As New System.Text.RegularExpressions.Regex("")
Dim ValueDepotLegal As String
ValueDepotLegal = System.Text.RegularExpressions.Regex.Replace(matchDepotLegal.Value, "(]+>)", "")
ValueDepotLegal = ValueDepotLegal.Replace("Dépot légal :", "")
ValueDepotLegal = ValueDepotLegal.Replace("Estimation :", "")
If ValueDepotLegal = "" Then
Me.LabelDepotLegal.Text = ""
Else
Me.LabelDepotLegal.Text = ValueDepotLegal
End If
MessageBox.Show(LabelDepotLegal.Text)
Dim depot As String = Mid(LabelDepotLegal.Text, 1, 7)
MessageBox.Show(depot)

Dim PatternNbplanches As String
PatternNbplanches = "Planches :(.+?)"
Dim rxNbplanches As New Text.RegularExpressions.Regex(PatternNbplanches, RegexOptions.IgnoreCase)
Dim matchNbplanches As Match = rxNbplanches.Match(HtmlData)
Dim MaRegexNbplanches As New System.Text.RegularExpressions.Regex("")
Dim ValueNbplanches As String
ValueNbplanches = System.Text.RegularExpressions.Regex.Replace(matchNbplanches.Value, "(]+>)", "")
ValueNbplanches = ValueNbplanches.Replace("Planches :", "")
ValueNbplanches = ValueNbplanches.Replace("Crée le :", "")
If ValueNbplanches = "" Then
Me.LabelNbplanches.Text = ""
Else
Me.LabelNbplanches.Text = ValueNbplanches
End If

Dim PatternIdentifiant As String
PatternIdentifiant = "Identifiant :(.+?)"
Dim rxIdentifiant As New Text.RegularExpressions.Regex(PatternIdentifiant, RegexOptions.IgnoreCase)
Dim matchIdentifiant As Match = rxIdentifiant.Match(HtmlData)
Dim MaRegexIdentifiant As New System.Text.RegularExpressions.Regex("")
Dim ValueIdentifiant As String
ValueIdentifiant = System.Text.RegularExpressions.Regex.Replace(matchIdentifiant.Value, "(]+>)", "")
ValueIdentifiant = ValueIdentifiant.Replace("Identifiant :", "")
If ValueIdentifiant = "" Then
Me.LabelBEL.Text = ""
Else
Me.LabelBEL.Text = ValueIdentifiant
End If

Dim PatternFormat As String
PatternFormat = "Taille :(.+?)"
Dim rxFormat As New Text.RegularExpressions.Regex(PatternFormat, RegexOptions.IgnoreCase)
Dim matchFormat As Match = rxFormat.Match(HtmlData)
Dim MaRegexFormat As New System.Text.RegularExpressions.Regex("")
Dim ValueFormat As String
ValueFormat = System.Text.RegularExpressions.Regex.Replace(matchFormat.Value, "(]+>)", "")
ValueFormat = ValueFormat.Replace("Taille :", "")
If ValueFormat = "" Then
Me.LabelFormat.Text = ""
Else
Me.LabelFormat.Text = ValueFormat
End If

Dim PatternDescription As String
PatternDescription = "(.*)"
Dim rxDescription As New Text.RegularExpressions.Regex(PatternDescription, RegexOptions.IgnoreCase)
Dim matchDescription As Match = rxDescription.Match(HtmlData)
Dim MaRegexDescription As New System.Text.RegularExpressions.Regex("")
Dim ValueDescription As String
ValueDescription = System.Text.RegularExpressions.Regex.Replace(matchDescription.Value, "(]+>)", "")
If ValueDescription = "" Then
Me.TextBoxDescription.Text = "Aucune donnée disponible...."
Else
Me.TextBoxDescription.Text = ValueDescription
End If

Dim PatternImage As String
PatternImage = ""
Dim rxImage As New Text.RegularExpressions.Regex(PatternImage, RegexOptions.IgnoreCase)
MessageBox.Show(rxImage.ToString)
Dim matchImage As Match = rxImage.Match(HtmlData)
MessageBox.Show(matchImage.ToString)
Dim Image1String As String = matchImage.Value.ToString
MessageBox.Show(Image1String)

Dim PatternImage1 As String
PatternImage1 = "Couvertures/(.*?).jpg"
Dim rxImage1 As New Text.RegularExpressions.Regex(PatternImage1, RegexOptions.IgnoreCase)
Dim matchImage1 As Match = rxImage1.Match(Image1String)
MessageBox.Show(matchImage1.ToString)
Dim ImageResult As String = matchImage1.Value.ToString
MessageBox.Show(ImageResult)
NomCouverture = ImageResult.Replace("Couvertures/", "")
ImageResult = "http://www.bedetheque.com/" & ImageResult
MessageBox.Show(ImageResult)
If ImageResult = "" Then
Me.PictureBoxAlbum.Image = My.Resources.ImageNull
Else
URLImage = ImageResult
im()
Me.PictureBoxAlbum.Image = ImageFinal
SearchCouvertureAlbum.PictureBoxCouv.Image = ImageFinal
End If


Dim PatternImage2 As String
PatternImage2 = ""

Dim rxImage2 As New Text.RegularExpressions.Regex(PatternImage2, RegexOptions.IgnoreCase)
MessageBox.Show(rxImage2.ToString)
Dim matchImage2 As Match = rxImage2.Match(HtmlData)
MessageBox.Show(matchImage2.ToString)

If matchImage2.ToString = "" Then
Dim PatternImage4 As String
PatternImage4 = ""
Dim rxImage4 As New Text.RegularExpressions.Regex(PatternImage4, RegexOptions.IgnoreCase)
MessageBox.Show(rxImage4.ToString)
matchImage2 = rxImage4.Match(HtmlData)
MessageBox.Show(matchImage2.ToString)
End If

Dim Image2String As String = matchImage2.Value.ToString
MessageBox.Show(Image2String)

Image2String = System.Text.RegularExpressions.Regex.Replace(Image2String, "\x9C", "œ")

Dim PatternImage3 As String
PatternImage3 = "Versos/[0-9a-zA-Z_.]*.jpg"
Dim rxImage3 As New Text.RegularExpressions.Regex(PatternImage3, RegexOptions.IgnoreCase)
Dim matchImage3 As Match = rxImage3.Match(Image2String)
MessageBox.Show(matchImage3.ToString)
Dim ImageResult3 As String = matchImage3.Value.ToString
MessageBox.Show(ImageResult3)
ImageResult3 = ImageResult3.Replace("versos", "Versos")
NomVerso = ImageResult3.Replace("Versos/", "")

ImageResult3 = "http://www.bedetheque.com/" & ImageResult3
MessageBox.Show(ImageResult3)
If ImageResult3 = "http://www.bedetheque.com/" Then
CompteurVerso = 1
Me.PictureBoxAlbum_Verso.Image = My.Resources.ImageNull
Else
CompteurVerso = 2
URLImage = ImageResult3
im()
Me.PictureBoxAlbum_Verso.Image = ImageFinal

End If


' Me.Cursor = Cursors.Default
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Erreur - Ty")
search()
Me.Cursor = Cursors.Default
End Try
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Information, "Erreur - Ty")
'search()
'Me.Cursor = Cursors.Default
End Try
search()
Me.Cursor = Cursors.Default
End Sub/code

1 réponse

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
11 sept. 2009 à 09:56
galère de tout lire...

quelques conseils rapides.

le '.' est un caractère spécial.

ainsi :

"Versos/[0-9a-zA-Z_.]*.jpg"
devrait s'écrire :
"Versos/[0-9a-zA-Z_\.]*\.jpg"


indiquant RegexOptions.IgnoreCase
inutile de mettre a-z ET A-Z


Pourquoi toutes ces étapes, variables intermédiaires ?
tu fais a mon gout un trop grand nombre d'operations...



Pattern1 = "/serie-[0-9]*-BD-[a-zA-Z0-9-'_,çœ\(+\)+\\+\/+\&+\x9C+]*.html#[0-9]*"

j'ai du mal à saisir

[a-zA-Z0-9-'_,çœ\(+\)+\\+\/+\&+\x9C+]

Pourquoi échapper les ( et ) c'est inutile dans une classe de caractères

de même, tu y place n fois le caractère '+' ...

fais plutôt:

[-+a-z0-9'_,çœ()\\\/&\x9C]



ca fais pas avancer ton souci, mais je ne sais pas trop s'il est lié aux regex


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0