Bonjour,
J'ai un code qui lit un fichier inspiré du XML et qui contient une fonction nettoyant ses lignes.
Cette fonction supprime :
- les espaces en trop aux 2 extrémités de la ligne
- un éventuel signe '/' en fin de ligne (après nettoyage des espaces) pour les données de type path de dossiers
Cela fonctionne bien, mais je voudrais utiliser substr à la place de 3 lignes de codes qui construisent la string nettoyée.
Avec la version substr(), cette fonction génère une erreur de lecture sur les lignes non précédées d'espaces, en n'affichant pas le dernier caractère '>' de ces lignes (lignes 1,5,7,14 ci-dessous), et n'enlève pas le dernier '/' du path s'il en contient un (ligne 9).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 // Suppression d'éventuels espaces en début et fin d'une chaine, et d'un // éventuel caractère de séparation de path en trop en fin de chaine string clean(string chaine) { int begin = 0; int end = chaine.size()-1; if (end >= 0) { while (chaine[begin]==' ' && begin<end) begin++; while (chaine[end]==' ' && end>begin) end--; if (chaine[end] == '/') end--; // lignes à supprimer string returnString; for (int i=begin; i<=end; i++) returnString = returnString + chaine[i]; // FIN lignes à supprimer // alternative avec substr() // string returnString = chaine.substr(begin,end); // ligne qui plante cout << returnString << endl; if (returnString ==" ") returnString =""; return returnString; } else return ""; }
Fichier enregistré en UTF-8 :
Affichage avec le code actuel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <scan_options> < autres balises.... > </scan_options> <directories> <path> /home/user/dossier testé/ < autres balises.... > </path> </directories>
Affichage avec le code substr() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <scan_options> < autres balises.... > </scan_options> <directories> <path> /home/user/dossier testé < autres balises.... > </path> </directories>
Le fichier lu est en enregistré en UTF-8. Je me suis demandé si là n'était pas le problème, mais en l'enregistrant en latin-1, cela ne change rien pour les lignes sans espace au début ou le problème du '/', avec en plus des problèmes de reconnaissance de caractères sur les chemins de fichiers en caractères accentués...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 <scan_options < autres balises.... > </scan_options <directories <path> /home/user/dossier testé/ < autres balises.... > </path> </directories
Un problème dans mon code avec mes variables int begin ou int end?
Partager