Arcane  v3.14.10.0
Documentation développeur
Chargement...
Recherche...
Aucune correspondance
StringVariableReplace.cc
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* StringVariableReplace.cc (C) 2000-2023 */
9/* */
10/* Classe permettant de remplacer les symboles d'une chaine de caractères */
11/* par une autre chaine de caractères définie dans les arguments de */
12/* lancement. */
13/* Un symbole est défini par une chaine de caractères entourée de @. */
14/* Exemple : @mon_symbole@ */
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/core/internal/StringVariableReplace.h"
18#include "arcane/utils/PlatformUtils.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23namespace Arcane
24{
25
26/*---------------------------------------------------------------------------*/
27/*---------------------------------------------------------------------------*/
28
52{
53 // Si la variable d'environnement ARCANE_REPLACE_SYMBOLS_IN_DATASET n'est pas
54 // définie, on ne touche pas à la chaine de caractères.
55 if (platform::getEnvironmentVariable("ARCANE_REPLACE_SYMBOLS_IN_DATASET").null() &&
56 parameter_list.getParameterOrNull("ARCANE_REPLACE_SYMBOLS_IN_DATASET").null()) {
58 }
59
61
64 Integer nb_at;
65
66 // On découpe la string là où se trouve les @.
67 // On récupère la position des symboles et le nombre de @.
69
70 // S'il n'y a aucun symbole, on retourne la chaine d'origine.
71 if(symbol_pos.empty()) return string_with_symbols;
72
73 for(Integer pos : symbol_pos){
75 String reference_input = parameter_list.getParameterOrNull(symbol);
76 if(reference_input.null()) {
77 symbol = "@" + symbol + "@";
78 }
79 else {
81 }
82 }
83
84 // On recombine la chaine de caractères.
86 for(Integer i = 0; i < string_splited.size() - 1; ++i){
87 const String& str = string_splited[i];
88 combined.append(str);
89 }
90
91 // Si le nombre de @ est impair, alors il faut rajouter un @ avant le dernier element pour reproduire
92 // la chaine d'origine.
93 if(nb_at % 2 != 0){
94 combined.append("@" + string_splited[string_splited.size()-1]);
95 }
96 else{
97 combined.append(string_splited[string_splited.size()-1]);
98 }
99
100 return combined.toString();
101}
102
118{
120
121 Int64 offset = 0;
122 bool is_symbol = false;
123 Int64 len = str.length();
124 nb_c = 0;
125
126 for(Int64 i = 0; i < len; ++i) {
127
128 if (str_str[i] == c) {
129 nb_c++;
130 str_array.add(str.substring(offset, i - offset));
131 offset = i+1;
132
133 if(is_symbol){
134 int_array.add(str_array.size() - 1);
135 is_symbol = false;
136 }
137 else{
138 is_symbol = true;
139 }
140 }
141 }
142 if(offset == len){
143 str_array.push_back("");
144 }
145 else {
146 str_array.push_back(str.substring(offset, len - offset));
147 }
148}
149
150
151//template<typename StringContainer>
152//void StringVariableReplace::split(const String& str, StringContainer& str_array, char c)
153//{
154// Span<const Byte> str_str = str.bytes();
155//
156// Int64 offset = 0;
157// Int64 len = str.length();
158//
159//
160// for( Int64 i = 0; i < len; ++i ) {
161// if (str_str[i] == c) {
162// str_array.push_back(str.substring(offset, i - offset));
163// offset = i+1;
164//
165// }
166// }
167// str_array.push_back(str.substring(offset, len - offset));
168//}
169
170/*---------------------------------------------------------------------------*/
171/*---------------------------------------------------------------------------*/
172
173} // namespace Arcane
174
175/*---------------------------------------------------------------------------*/
176/*---------------------------------------------------------------------------*/
Lecteur des fichiers de maillage via la bibliothèque LIMA.
Definition Lima.cc:120
Liste de paramètres.
static void _splitString(const String &str, UniqueArray< String > &str_array, UniqueArray< Integer > &int_array, Integer &nb_c, char c)
static String replaceWithCmdLineArgs(const ParameterList &parameter_list, const String &string_with_symbols)
Constructeur de chaîne de caractère unicode.
Chaîne de caractères unicode.
Span< const Byte > bytes() const
Retourne la conversion de l'instance dans l'encodage UTF-8.
Definition String.cc:291
Int64 length() const
Retourne la longueur de la chaîne.
Definition String.cc:338
String substring(Int64 pos) const
Sous-chaîne commençant à la position pos.
Definition String.cc:1114
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-