safeStringJoin and safeStringSplit allow to convert a stringlist into a string and back safely, even if the individual strings in the list contain the separator character.
| 68 | // safeStringJoin and safeStringSplit allow to convert a stringlist into a string and back |
| 69 | // safely, even if the individual strings in the list contain the separator character. |
| 70 | QString safeStringJoin(const QStringList& sl, char sepChar, char metaChar) |
| 71 | { |
| 72 | // Join the strings in the list, using the separator ',' |
| 73 | // If a string contains the separator character, it will be replaced with "\,". |
| 74 | // Any occurrences of "\" (one backslash) will be replaced with "\\" (2 backslashes) |
| 75 | |
| 76 | assert(sepChar != metaChar); |
| 77 | |
| 78 | QString sep; |
| 79 | sep += sepChar; |
| 80 | QString meta; |
| 81 | meta += metaChar; |
| 82 | |
| 83 | QString safeString; |
| 84 | |
| 85 | QStringList::const_iterator i; |
| 86 | for(i = sl.begin(); i != sl.end(); ++i) |
| 87 | { |
| 88 | QString s = *i; |
| 89 | s.replace(meta, meta + meta); // "\" -> "\\" |
| 90 | s.replace(sep, meta + sep); // "," -> "\," |
| 91 | if(i == sl.begin()) |
| 92 | safeString = s; |
| 93 | else |
| 94 | safeString += sep + s; |
| 95 | } |
| 96 | return safeString; |
| 97 | } |
| 98 | |
| 99 | // Split a string that was joined with safeStringJoin |
| 100 | QStringList safeStringSplit(const QString& s, char sepChar, char metaChar) |