Caractère répété

9 réponses
Avatar
Gloops
Bonjour tout le monde,

Quand on veut tracer un trait (horizontal), on peut écrire une boucle
pour alimenter une chaîne de caractères.

Sinon, existe-t-il aussi une fonction intégrée pour faire ça de façon
élégante, comme par exemple, en VBS pour avoir 60 points on enverra
String(60, ".")

Je n'ai pas essayé String(60, "-+") pour alterner deux caractères
différents ...

9 réponses

Avatar
Guiche
Gloops Wrote in message:
Bonjour tout le monde,
Quand on veut tracer un trait (horizontal), on peut écrire une boucle
pour alimenter une chaîne de caractères.
Sinon, existe-t-il aussi une fonction intégrée pour faire ça de façon
élégante, comme par exemple, en VBS pour avoir 60 points on enverra
String(60, ".")
Je n'ai pas essayé String(60, "-+") pour alterner deux caractères
différents ...

Bonjour,
Tu peux faire "abc".repeat(10) mais IE ne le supporte pas. Une
alternative est (comme souvent) proposée sur MDN :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Ob
jets_globaux/String/repeat).
Selon un MVP Excel (http://answers.microsoft.com
/en-us/office/forum/office_2010-customize/repeat
-function/6a6142bc-6fae-403c-af5d-ca471c13ced4?auth=1), String ne
fonctionne qu'avec un caractère.
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Avatar
Gloops
Le 04/08/2016 à 07:00, Guiche a écrit :
Bonjour,

Bonjour,
Merci pour la réponse
Tu peux faire "abc".repeat(10) mais IE ne le supporte pas.

Ah ben ça, comme gag, ça se pose là, parce qu'en C# on connaît
"abc".PadRight() et "abc".PadLeft(), selon qu'on veut ajouter des
espaces (ou un autre caractère) à gauche ou à droite. En revanche
effectivement ça ne répète pas "abc".
OK on n'écrit pas de scripts en C#, mais ça vient quand même de chez
Microsoft, c'est pour ça que ça fait rire.
Une
alternative est (comme souvent) proposée sur MDN :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/repeat).

Bon je vais regarder ça.
J'étais tout content d'avoir écrit un programme pour ouvrir une URL en
enlevant les sauts de ligne qu'il y a dedans, mais v'là'-t-y pas que les
anti-virus récents se mettent à dire qu'il est louche, mon truc.
Qu'à cela ne tienne, j'ai enlevé le saut de ligne dans la citation,
alors comme Thunderbird n'en ajoute pas ...
Selon un MVP Excel (http://answers.microsoft.com
/en-us/office/forum/office_2010-customize/repeat
-function/6a6142bc-6fae-403c-af5d-ca471c13ced4?auth=1), String ne
fonctionne qu'avec un caractère.

Ah c'est bien possible, ça.
Dieu sait que j'ai gagné ma croûte un bout de temps avec Excel, mais
depuis je suis passé à autre chose. Bien sûr si j'avais cherché je
l'aurais retrouvé.
Avatar
Gloops
Le 04/08/2016 à 22:05, Gloops a écrit :
Une
alternative est (comme souvent) proposée sur MDN :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/repeat).


Ben la vache, si j'avais bricolé une boucle sur un coin de table, j'ai
l'impression que je l'aurais faite moins sophistiquée, il y a des
chances que j'aurais loupé des trucs.
Au fait j'ai déjà vu dans la doc des fonctions qui réagissent
différemment selon qu'on a mis "use strict" ou pas (et d'ailleurs je
n'aurais jamais eu l'idée de mettre des guillemets à ça), est-ce que
c'est comme en VB, l'obligation de déclarer toutes les variables ?
A la différence qu'en Javascript si je ne m'abuse on ne peut déclarer
que sans type.
Avatar
Guiche
Gloops Wrote in message:
Le 04/08/2016 à 22:05, Gloops a écrit :
Une
alternative est (comme souvent) proposée sur MDN :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/repeat).


Ben la vache, si j'avais bricolé une boucle sur un coin de table, j'ai
l'impression que je l'aurais faite moins sophistiquée, il y a des
chances que j'aurais loupé des trucs.

Perso j'ai jusqu'ici préféré utiliser les miennes, je suppose que
je souffre aussi du syndrome du « pas inventé ici »... Si un jour
je le regrette je sais où retrouver « les bonnes »
!
Au fait j'ai déjà vu dans la doc des fonctions qui réagissent
différemment selon qu'on a mis "use strict" ou pas (et d'ailleurs je
n'aurais jamais eu l'idée de mettre des guillemets à ça), est-ce que
c'est comme en VB, l'obligation de déclarer toutes les variables ?
A la différence qu'en Javascript si je ne m'abuse on ne peut déclarer
que sans type.

En VBS (dans de l'ASP ou comme langage de script disponible
directement sous Windows) non plus tu n'as pas de types (c'est
ce
qui m'a motivé à passer à Javascript pour ces développements
vu qu'on peut ainsi profiter de son aspect fonctionnel pour
éviter les répétitions et écrire moins de code donc peut-être
moins de bugs). En VB6/VBA tu peux omettre les types mais ça fera
de tes variables des Variant (type poubelle qui peut contenir
Null, par exemple, contrairement à Integer qui ne le peut
pas).
Les guillemets évitent de déclencher une erreur de syntaxe avec
des anciens interpréteurs. De ce que j'ai lu, ça interdit plus de
choses que ce qui était prévu à la base et si tu ne te bases pas
sur les exceptions supplémentaires qu'il lève, je crois que tu
devrais t'en sortir. Je vois plus ça comme une aide mais ça va
ici plus loin qu'Option Explicit qui ne s'occupe que des
variables non déclarées (il faut dire que JS permet des horreurs
comme des noms de paramètres qui ne sont pas uniques pour une
même fonction...).
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Avatar
Guiche
Gloops Wrote in message:
Le 04/08/2016 à 07:00, Guiche a écrit :
Bonjour,

Bonjour,
Merci pour la réponse
Tu peux faire "abc".repeat(10) mais IE ne le supporte pas.

Ah ben ça, comme gag, ça se pose là, parce qu'en C# on connaît
"abc".PadRight() et "abc".PadLeft(), selon qu'on veut ajouter des
espaces (ou un autre caractère) à gauche ou à droite. En revanche
effectivement ça ne répète pas "abc".

Ces méthodes (je trouve que c'est quand même très agréable de
pouvoir ainsi étendre le langage, par exemple en Java tu peux
oublier cette forme d'élégance) sont vite faites (ou "inlined",
je n'en connais pas la traduction) avec substr/slice quand ces
dernières acceptent des paramètres négatifs (pas toujours le cas
sous IE, attention !)... Niveau performances, la différence avec
une « bonne implémentation » sera je pense négligeable (surtout
si tu formates des nombres, par exemple).
OK on n'écrit pas de scripts en C#, mais ça vient quand même de chez
Microsoft, c'est pour ça que ça fait rire.

Leur implémentation est bien plus vieille et ils ne semblent plus
être très intéressés...
Une
alternative est (comme souvent) proposée sur MDN :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/repeat).

Bon je vais regarder ça.
J'étais tout content d'avoir écrit un programme pour ouvrir une URL en
enlevant les sauts de ligne qu'il y a dedans, mais v'là'-t-y pas que les
anti-virus récents se mettent à dire qu'il est louche, mon truc.
Qu'à cela ne tienne, j'ai enlevé le saut de ligne dans la citation,
alors comme Thunderbird n'en ajoute pas ...

Désolé, j'utilise principalement (dans les transports, souvent) un
client Android. J'avoue par contre ne pas avoir regardé
attentivement ses paramètres...
Selon un MVP Excel (http://answers.microsoft.com
/en-us/office/forum/office_2010-customize/repeat
-function/6a6142bc-6fae-403c-af5d-ca471c13ced4?auth=1), String ne
fonctionne qu'avec un caractère.

Ah c'est bien possible, ça.
Dieu sait que j'ai gagné ma croûte un bout de temps avec Excel, mais
depuis je suis passé à autre chose. Bien sûr si j'avais cherché je
l'aurais retrouvé.

Je n'en doute pas mais ça avait attisé ma curiosité...
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Avatar
Gloops
Le 04/08/2016 à 23:34, Guiche a écrit :
Gloops Wrote in message:
Le 04/08/2016 à 22:05, Gloops a écrit :
Une
alternative est (comme souvent) proposée sur MDN :
https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/String/repeat).


Ben la vache, si j'avais bricolé une boucle sur un coin de table, j'ai
l'impression que je l'aurais faite moins sophistiquée, il y a des
chances que j'aurais loupé des trucs.

Perso j'ai jusqu'ici préféré utiliser les miennes, je suppose que
je souffre aussi du syndrome du « pas inventé ici »... Si un jour
je le regrette je sais où retrouver « les bonnes »
!

Quand on a la sienne, pour sûr on sait ce qu'il y a dedans.
Cela étant, vu à quelle cadence les recruteurs me demandent si je
pratique AngularJS, je ne suis pas bien sûr de pouvoir y couper longtemps.
Au fait j'ai déjà vu dans la doc des fonctions qui réagissent
différemment selon qu'on a mis "use strict" ou pas (et d'ailleurs je
n'aurais jamais eu l'idée de mettre des guillemets à ça), est-ce que
c'est comme en VB, l'obligation de déclarer toutes les variables ?

Les guillemets évitent de déclencher une erreur de syntaxe avec
des anciens interpréteurs. De ce que j'ai lu, ça interdit plus de
choses que ce qui était prévu à la base et si tu ne te bases pas
sur les exceptions supplémentaires qu'il lève, je crois que tu
devrais t'en sortir.

Bon, ce soir il va falloir que je regarde si c'est documenté, quelque part.
Je vois plus ça comme une aide mais ça va
ici plus loin qu'Option Explicit qui ne s'occupe que des
variables non déclarées (il faut dire que JS permet des horreurs
comme des noms de paramètres qui ne sont pas uniques pour une
même fonction...).

Uh, ça marche, ça ?
Avatar
Guiche
Gloops Wrote in message:
Je vois plus ça comme une aide mais ça va
ici plus loin qu'Option Explicit qui ne s'occupe que des
variables non déclarées (il faut dire que JS permet des horreurs
comme des noms de paramètres qui ne sont pas uniques pour une
même fonction...).

Uh, ça marche, ça ?

Il paraît. Je ne connaissais pas jusqu'alors un langage qui
autorisait ça...
Voilà la page de test dont je parlais :
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Javascript test</title>
<style>
div.c {
    padding: 5px;
    background-color: grey;
    margin-bottom: 10px;
}
p {
    background-color: lightgrey;
}
</style>
<script>
function empty() {
    var output = document.getElementById("output");
    while (output.hasChildNodes())
        output.removeChild(output.childNodes[0]);
}
function enumerate() {
    empty();
    var ol = document.createElement("ol");
    var tn = document.getElementById("tn").value;
    var from = document.getElementById("from").value;
    from = document.getElementsByTagName(from)[0];
    var elements = from.getElementsByTagName(tn);
    for (var i=0; i<elements.length; i++) {
        var li = document.createElement("li");
        li.appendChild(document.createTextNode(elements[i].tagName));
        ol.appendChild(li);
    }
    document.getElementById("output").appendChild(ol);
    return false; //onsubmit
}
</script>
</head>
<body>
    <div class="c">
        <p>bonjour</p>
        <p>vous allez bien ?</p>
    </div>
    <form onsubmit="return enumerate()">
        <label>partir de:
            <select id="from">
                <option>html</option>
                <option>body</option>
                <option>div</option>
            </select></label>
        <label>Tag Name: <input type="text" id="tn" value="*"></label>
        <button>lister</button>
    </form>
    <div id="output">
    </div>
</body>
</html>
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Avatar
Guiche
Guiche Wrote in message:
Voilà la page de test dont je parlais :

Arf pas le bon fil :/
----Android NewsGroup Reader----
http://usenet.sinaapp.com/
Avatar
Gloops
Le 08/08/2016 à 06:19, Guiche a écrit :
Guiche Wrote in message:
Voilà la page de test dont je parlais :

Arf pas le bon fil :/
----Android NewsGroup Reader----
http://usenet.sinaapp.com/

C'est celle que j'ai testée ce matin, pas vrai ?
(enfin ... ah non c'est vrai maintenant on est demain)