Comment puis-je joindre une liste de chaînes dans specman?
Question
J'ai une liste que je veux imprimer:
foo: list of string;
Je souhaite créer une chaîne bar
qui soit la concaténation des éléments de toto
. En Perl, je ferais:
$bar = join " ", @foo;
La seule façon dont je peux penser à faire ceci dans specman est:
var bar: string = "";
for each in foo {
bar = appendf("%s %s", bar, it);
};
Cela semble avoir de très mauvaises performances, car il copie bar
sur lui-même pour chaque élément de toto
. Y a-t-il une meilleure façon de faire cela?
La solution
Il existe également une fonction dédiée pour cela:
str_join(list: list of string, separator: string) : string
Je suis sûr que help str_join
vous donnera les détails. Il existe également d’autres fonctions utiles telles que str_match
, str_split
, qui pourraient vous plaire.
Comme astuce supplémentaire, vous devriez peut-être imprimer vous-même la e Référence rapide sur le langage , voir http://www.cadence.com/Community/blogs /fv/archive/2009/06/19/send-us-suggestions-for-updating-the-e-specman-quick-reference-card.aspx .
Autres conseils
En écrivant la question, je suis tombé sur la méthode to_string ()
. Je peux utiliser:
var bar: string = foo.to_string();
Ceci est l'équivalent de Perl:
$bar = join "\n", @foo;
Si je veux utiliser des espaces, je peux utiliser:
var bar: string = str_replace(foo.to_string(), "\n", " ");