bebellvm
Messages postés1Date d'inscriptionmercredi 10 octobre 2007StatutMembreDernière intervention 8 juillet 2010
-
8 juil. 2010 à 16:23
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
8 juil. 2010 à 16:55
Bonjour,
Je travaille sous datastage un ETL auquel il manque une fonction replaceChaine.
C'est à dire remplacer une chaîne dans une chaîne autant de fois que possible.
L'outil lance cette fonction en parallèles.
Je ne m'y connait pas trop en C++ mais j'ai pondu (;-)) cette fonction qui marche en local sous unix (a.out) mais pas sous datastage. (Mon traitement ne s’arrête pas mais ne travaille pas non plus, genre de wait).
Pouvez-vous me donner votre avis sur cette fonction ? Pas de problème de mémoire ou conflit si lancer en parallèle.
Si tu es en C++, inutile de faire cela. Tu mélange du C avec du C++, ce n'est pas très élégant. Pourquoi ne pas utiliser directement des std::string ?
Exemple:
#include
std::string& replaceAll(std::string& context,
const std::string& from,
const std::string& to)
{
size_t lookHere = 0;
size_t foundHere;
while ((foundHere = context.find(from, lookHere)) != std::string::npos)
{
context.replace(foundHere, from.size(), to);
lookHere = foundHere + to.size();
}
return context;
}
int main()
{
std::string s = "Just un test pour tester un test, pouet.";
std::cout << s << std::endl;
replaceAll(s, "test", "toto");
std::cout << s << std::endl;
return 0;
}
A noter que la chaîne est remplacé directement. Donc tu peux faire une copie avant si tu le préfères.
Si tu as des contraintes qui t'oblige à utiliser des char*, alors autant le faire en C, ça sera plus pratique. (Tu seras sur de ne pas avoir de souci d'ABI).
________________________________________________________________________
Historique de mes créations, et quelques articles:[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question