System.ArgumentOutOfRangeException
Résolu/Fermé4 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
29 sept. 2017 à 09:45
29 sept. 2017 à 09:45
Bonjour,
Le problème vient du fait que strDuFichierTexte a moins de i+26 caractères.
Es-tu sûr que cette chaîne contienne bien tout ton fichier, et pas uniquement la première ligne ?
Dans tous les cas il faudra vérifier que strDuFichier.Length > i + 26 avant de faire ton Substring
Tu devrais passer dessus en mode debug pour t'assurer que tu as bien la valeur attendue dans ta chaîne.
Xavier
Le problème vient du fait que strDuFichierTexte a moins de i+26 caractères.
Es-tu sûr que cette chaîne contienne bien tout ton fichier, et pas uniquement la première ligne ?
Dans tous les cas il faudra vérifier que strDuFichier.Length > i + 26 avant de faire ton Substring
Tu devrais passer dessus en mode debug pour t'assurer que tu as bien la valeur attendue dans ta chaîne.
Xavier
Utilisateur anonyme
29 sept. 2017 à 13:56
29 sept. 2017 à 13:56
Bonjour
Pour ce genre de recherche, la regex peut être une bonne solution.
Pour t’en proposer une il faudrait que tu montres une ligne exemple et un mot recherché exemple (avec des donnée non confidentielles).
Par contre, il est très très très déconseillé d’utiliser des noms avec des accents dans le code.
Pour ce genre de recherche, la regex peut être une bonne solution.
Pour t’en proposer une il faudrait que tu montres une ligne exemple et un mot recherché exemple (avec des donnée non confidentielles).
Par contre, il est très très très déconseillé d’utiliser des noms avec des accents dans le code.
Merci pour ta réponse !
Voici un exemple de plusieurs lignes avec des données fictives :
LXrvsAragbdKwkDM S5ekL 023
xSY3UBdWLuGamD6j 215Zs 100
wm33mGkDSyDFERve 585E5 005
le mot recherché serait donc "wm33mGkDSyDFERve", dans le but d'ensuite récupérer la ligne "wm33mGkDSyDFERve 585E5 005" dans une variable string et de la spliter en un tableau de trois valeurs :
Voici un exemple de plusieurs lignes avec des données fictives :
LXrvsAragbdKwkDM S5ekL 023
xSY3UBdWLuGamD6j 215Zs 100
wm33mGkDSyDFERve 585E5 005
le mot recherché serait donc "wm33mGkDSyDFERve", dans le but d'ensuite récupérer la ligne "wm33mGkDSyDFERve 585E5 005" dans une variable string et de la spliter en un tableau de trois valeurs :
int i = strDuFichierTexte.IndexOf("wm33mGkDSyDFERve"); /*on associe à l'entier i le numéro d'index de la première lettre de "wm33mGkDSyDFERve" dans la chaîne de caractère "strDuFichierTexte" */ string strARecuperer = strDuFichierTexte.Substring(i, i + 26); /*on récupère la ligne de "wm33mGkDSyDFERve" pour que strARecuperer contienne "wm33mGkDSyDFERve 585E5 005" - chaîne de caractères qui contient bien 26 caractères au passage.*/ string[] tab = strARecuperer.Split(' '); /*tab[0] = "wm33mGkDSyDFERve", tab[1] = "585E5" et tab[2] = "005"*/
Utilisateur anonyme
29 sept. 2017 à 17:29
29 sept. 2017 à 17:29
Regarde là
Clique sur l'onglet, tu verras que les groupes contiennent ce que tu cherches.
http://regexstorm.net/tester?p=%28%3f%3a%5e%7c%5cn%29%28%3f%3ctexteATrouver%3ewm33mGkDSyDFERve%29+%28%3f%3ccode%3e%5cw%7b5%7d%29+%28%3f%3cnumero%3e%5cd%7b3%7d%29&i=wm33mGkDSyDFERve+585E5+005+%0d%0aLXrvsAragbdKwkDM+S5ekL+023+%0d%0axSY3UBdWLuGamD6j+215Zs+100+%0d%0awm33mGkDSyDFERve+585E5+005+%0d%0aLXrvsAragbdKwkDM+S5ekL+023+%0d%0aLXrvsAragbdKwkDM+S5ekL+023+%0d%0awm33mGkDSyDFERve+585E5+005+
Clique sur l'onglet, tu verras que les groupes contiennent ce que tu cherches.
Utilisateur anonyme
29 sept. 2017 à 23:02
29 sept. 2017 à 23:02
Un truc comme ça
private void TestVydc() { string texteComplet = @"wm33mGkDSyDFERve 585E6 006 LXrvsAragbdKwkDM S5ekL 023 xSY3UBdWLuGamD6j 215Zs 100 wm33mGkDSyDFERve 585E5 005 LXrvsAragbdKwkDM S5ekL 023 LXrvsAragbdKwkDM S5ekL 023 wm33mGkDSyDFERve 585E4 004 "; string aTrouver = "wm33mGkDSyDFERve"; string pattern = @"(?:^|\n)(?<texteATrouver>" + aTrouver + @") (?<code>\w{5}) (?<numero>\d{3})"; Regex maRegex = new Regex(pattern); List<ResVydc> resultats = new List<ResVydc>(); foreach(Match m in maRegex.Matches(texteComplet)) { resultats.Add(new ResVydc { Reference = m.Groups["texteATrouver"].Value, Code = m.Groups["code"].Value, Numero = Convert.ToInt32(m.Groups["numero"].Value), }); } }
29 sept. 2017 à 16:55
Merci quand même ! :D