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.

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 "";
}
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).

Fichier enregistré en UTF-8 :
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 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...

Un problème dans mon code avec mes variables int begin ou int end?