Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2019-05-09T14:50:42+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Association d'identifiants de différents onglets, message #2029512019-05-09T14:50:42+02:00LeaN/@LeaNhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202951<p>J’ai donc essayé d’utiliser des tableaux pour les identifiants, en les incluant dans des boucles, et j’en suis arrivée au code suivant. Cependant il ne fonctionne pas, rien n’en ressort, et il n’y a pas de message d’erreur.</p>
<p>Même avec l’utilisation de tableaux, je suis obligée de faire des boucles FOR non ? Si oui, cela veut dire que à chaque fois la boucle entière est parcourue (et cela ne résout pas le problème du temps d’exécution si ?). Y aurait-il donc un moyen pour que l’on sorte de la boucle dès que l’identifiant est trouvé ? </p>
<p>(Pour essayer mon programme, j’ai réduit mon onglet 1 à 15 lignes au lieu de 140 000 et mon onglet 2 à 25 lignes au lieu de 300).</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-angelscript"><span class="hljs-keyword">for</span> (var i = <span class="hljs-number">2</span> ; i < <span class="hljs-number">25</span> ; i++) { <span class="hljs-comment">// Compteur de ligne pour tableau des id (onglet 2)</span>
var nomTableau = sheetOnglet2.getRange(i, <span class="hljs-number">1</span>).getValues() ;
var idTableau = sheetOnglet2.getRange(i, <span class="hljs-number">2</span>).getValues() ;
<span class="hljs-keyword">for</span> (var j = <span class="hljs-number">2</span> ; j < <span class="hljs-number">15</span> ; j++) { <span class="hljs-comment">// Compteur de lignes pour l'onglet 1</span>
var id = sheetOnglet1.getRange(j, <span class="hljs-number">2</span>).getValues() ;
var <span class="hljs-built_in">array</span>TableauId = [idTableau] ;
var <span class="hljs-built_in">array</span>TableauNom = [nomTableau] ;
<span class="hljs-keyword">if</span> ( id[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>] === <span class="hljs-built_in">array</span>TableauId[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>] ) {
sheetOnglet1.getRange(j, <span class="hljs-number">1</span>).setValue(<span class="hljs-built_in">array</span>TableauNom) ; }
</code></pre></div>
<p>Sinon oui j’avais déjà fait de la programmation, mais avec des boucles très simples (en automatisant des petits calculs)</p>Association d'identifiants de différents onglets, message #2028832019-05-08T13:03:25+02:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202883<p>Mon code ne fait rien de tout ça, je comptais te laisser y réfléchir toi-même <img src="/static/smileys/smile.png" alt=":)" class="smiley"> Je ne fais que lister les outils utilisables, ce n’est absolument pas une solution.</p>
<p>À toi de :</p>
<ol>
<li>boucler sur les 300 identifiants (ça tu le fais déjà, il faut juste déplacer la sous-boucle avant) ;</li>
<li>les stocker dans un objet avec comme clef leur ID ;</li>
<li>utiliser ce tableau plutôt que de reboucler à chaque fois sur la feuille de calculs.</li>
</ol>
<p>Les moyens pour le faire, sont précisés plus haut et/ou sur le <em>Mozilla Developer Network</em> (lien plus haut également), mais je ne vais pas tout faire à ta place <img src="/static/smileys/hihi.png" alt="^^" class="smiley"> (sans compter que ce ne serait que bien peu formateur).</p>
<blockquote>
<p>Je ne manipule l’App Script seulement depuis 2 semaines</p>
</blockquote>
<p>Tu avais fait de la programmation avant, ou c’est aussi depuis deux semaines que tu y touches ?</p>Association d'identifiants de différents onglets, message #2028432019-05-07T14:47:49+02:00LeaN/@LeaNhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202843<p>Un grand merci pour ton aide et de me consacrer du temps, sauf que je ne comprends pas bien ton code… Je ne manipule l’App Script seulement depuis 2 semaines, et je ne vois pas bien comment ton code peut enregistrer des noms et des identifiants que je rentre pas à la main, pour ensuite les associer à mes id de l’onglet d’origine </p>Association d'identifiants de différents onglets, message #2028362019-05-07T12:02:50+02:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202836<p>En réalité le terme que j’ai utilisé est impropre, par habitude d’autres langages (mes excuses). En JS, les “tableaux associatifs” sont en fait de simples objets littéraux.</p>
<p>En très rapide, voilà comment on utilise des objets comme “pseudo tableau associatif” (c’est vraiment un condensé <img src="/static/smileys/hihi.png" alt="^^" class="smiley"> ), mais n’hésite pas à aller trouver plus ample documentation sur internet (en particulier <a href="https://developer.mozilla.org/fr/docs/Learn/JavaScript/Objects/Basics">sur le <em>Mozilla Developers Network</em></a>, la bible).</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-js">>>> the_id = <span class="hljs-string">'7786f053'</span>
<span class="hljs-comment">// Création avec une paire d'accolades. On peut pré-remplir aussi : cf. doc.</span>
>>> names = {}
<span class="hljs-comment">// Ajout d'une valeur (une propriété, en soit)</span>
<span class="hljs-comment">// On peut aussi faire « names.ID = 'valeur', mais avec une variable</span>
<span class="hljs-comment">// (cf. après) il faut forcément utiliser les crochets. Or vu l'objectif,</span>
<span class="hljs-comment">// c'est ce dont tu vas avoir besoin =) .</span>
>>> names[<span class="hljs-string">'ID'</span>] = <span class="hljs-string">'valeur'</span>
<span class="hljs-comment">// Avec une variable, donc, crochets spécifiquement.</span>
>>> names[the_id] = <span class="hljs-string">'ZdS'</span>
<span class="hljs-comment">// Récupérer la valeur ; pareil, « names.ID » marche aussi pour des</span>
<span class="hljs-comment">// noms de propriétés littéraux et sans espaces.</span>
>>> names[<span class="hljs-string">'ID'</span>]
<span class="hljs-string">"valeur"</span>
<span class="hljs-comment">// Avec une variable, crochets.</span>
>>> names[the_id]
<span class="hljs-string">"ZdS"</span>
<span class="hljs-comment">// Ça reste techniquement un objet avec ses propriétés qu'on utilise</span>
<span class="hljs-comment">// pour stocker des valeurs quelconques ; par suite, la méthode pour</span>
<span class="hljs-comment">// savoir si une propriété existe, c'est `hasOwnProperty`.</span>
>>> names.hasOwnProperty(<span class="hljs-string">'ID'</span>)
<span class="hljs-literal">true</span>
>>> names.hasOwnProperty(<span class="hljs-string">'strange ID'</span>)
<span class="hljs-literal">false</span>
<span class="hljs-comment">// Une autre façon de vérifier : toute tentative d'accès à une</span>
<span class="hljs-comment">// propriété inconnue renverra `undefined`.</span>
>>> names[<span class="hljs-string">'strange ID'</span>]
<span class="hljs-literal">undefined</span>
>>> names
<span class="hljs-built_in">Object</span> { <span class="hljs-attr">ID</span>: <span class="hljs-string">"valeur"</span>, <span class="hljs-number">7786</span>f053: <span class="hljs-string">"ZdS"</span> }
</code></pre></div>Association d'identifiants de différents onglets, message #2028292019-05-07T10:25:05+02:00LeaN/@LeaNhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202829<p>Salut Amaury ! Oui cela serait plus simple et plus rapide, mais comment je créer un tableau associatif ?</p>Association d'identifiants de différents onglets, message #2027992019-05-06T20:13:35+02:00Amaury/@Amauryhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202799<p>Là, pour chaque ligne de la première feuille, tu re-parcours toutes les lignes de la seconde feuille pour retrouver l’identifiant. La seconde feuille est donc parcourue 140 000 fois, ce qui fait 42 millions de comparaisons !</p>
<p>Une solution pour éviter ça, supposant que les données de la seconde feuille ne changent pas lors de l’exécution, serait de la parcourir une fois au début, de stocker l’association dans un tableau associatif <code>ID → Nom</code>, et pour chacune des lignes de la première feuille, récupérer directement la valeur du tableau associée à l’ID. Ainsi, on ne refait pas une recherche du nom à chaque fois (l’association étant stockée une bonne fois pour toutes dans un tableau) et on diminue considérablement le nombre d’itération (de 42 millions à 140k).</p>
<blockquote>
<p>Je voulais également savoir si il existait une fonction équivalente à "Screen UpDating" d’Excel pour GogleSheet ? Je pense que cela ferait gagner du temps à l’exécution de ma fonction</p>
</blockquote>
<p>Je l’ignore, ne connaissant pas l’API offerte par Google Sheets. Mais je suppose qu’ils ont une documentation ? Sinon, je laisse quelqu’un d’autre répondre à cette question <img src="/static/smileys/smile.png" alt=":)" class="smiley"> .</p>Association d'identifiants de différents onglets, message #2027942019-05-06T18:11:36+02:00LeaN/@LeaNhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202794<p>Salut Angelo, non car je dois obligatoirement utiliser la partie programmation de GoogleSheet, pas seulement écrire une formule dans les cellules </p>Association d'identifiants de différents onglets, message #2027902019-05-06T17:37:16+02:00LeaN/@LeaNhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202790<p>Salut Angelo, non car je dois obligatoirement utiliser la partie programmation de GoogleSheet, pas seulement écrire une formule dans les cellules </p>Association d'identifiants de différents onglets, message #2027862019-05-06T16:49:07+02:00DonKnacki/@DonKnackihttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202786<p>Salut</p>
<p><a href="https://support.google.com/docs/answer/3093318?hl=fr">RECHERCHEV </a>ne fais pas le job ? </p>Association d'identifiants de différents onglets, message #2027722019-05-06T14:53:58+02:00LeaN/@LeaNhttps://zestedesavoir.com/forums/sujet/12456/association-didentifiants-de-differents-onglets/?page=1#p202772<p>Bonjour à tous, </p>
<p>Je travaille sur GoogleSheet, et je suis bloquée sur une fonction qui prend beaucoup beaucoup beaucoup de temps à s’exécuter (mon fichier fait 140 000 lignes !!!).
J’utilise 2 boucles FOR et 1 boucle IF imbriquées, et je voulais savoir si il existait une autre manière d’écrire un programme similaire au mien, afin que l’exécution soit plus rapide (Dictionnaire de données ? Boucles While ? Utilisation de Booléens ?)</p>
<p>Je vous pose mon problème :
Dans un onglet 1 contenant 140 000 lignes, j’ai des identifiants, que je dois associer à un nom. Dans un onglet 2 contenant 300 lignes, j’ai l’ensemble des identifiants ainsi que leur noms associés. Je dois donc, pour chaque identifiant de mon onglet 1, rechercher le même dans l’onglet 2 afin de lui associé son nom.</p>
<p>Voici mon code :
<code></code></p>
<p>function import() {</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-angelscript"><span class="hljs-keyword">for</span> (var i = <span class="hljs-number">2</span> ; i < <span class="hljs-number">140000</span> ; i++) <span class="hljs-comment">// compteur lignes onglet 1</span>
{ var id_Onglet_1 = sheetOnglet1.getRange(i, <span class="hljs-number">7</span>).getValues() ;
<span class="hljs-keyword">for</span> (var j = <span class="hljs-number">2</span> ; j < <span class="hljs-number">300</span> ; j++ ) <span class="hljs-comment">// compteur lignes onglet 2 </span>
{ var id_Onglet_2 = sheetOnglet2.getRange(j, <span class="hljs-number">2</span>).getValues() ;
var nom_Onglet_2 = sheetOnglet2.getRange(j, <span class="hljs-number">1</span>).getValues() ;
<span class="hljs-keyword">if</span> (id_Onglet_1[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>] === id_Onglet_2[<span class="hljs-number">0</span>][<span class="hljs-number">0</span>])
{ sheet.getRange(i, <span class="hljs-number">6</span>).setValue(nom_Onglet_2) ; }
}
}
</code></pre></div>
<p>}</p>
<p>Je voulais également savoir si il existait une fonction équivalente à "Screen UpDating" d’Excel pour GogleSheet ? Je pense que cela ferait gagner du temps à l’exécution de ma fonction</p>
<p>Je vous remercie d’avance pour le temps que vous me consacrerez et n’hésitez pas si vous n’avez pas bien compris mes explications ! <img src="/static/smileys/smile.png" alt=":)" class="smiley"></p>Executer un screen depuis php et ben ce entraine des soucis :(, message #1069512016-04-22T17:51:14+02:00WinXaito/@WinXaitohttps://zestedesavoir.com/forums/sujet/5880/executer-un-screen-depuis-php-et-ben-ce-entraine-des-soucis/?page=1#p106951<p>Excuse moi je n'ai pas trop le temps là, mais regarde ici <a href="http://askubuntu.com/questions/159007/how-do-i-run-specific-sudo-commands-without-a-password">http://askubuntu.com/questions/159007/how-do-i-run-specific-sudo-commands-without-a-password</a></p>Executer un screen depuis php et ben ce entraine des soucis :(, message #1069152016-04-22T14:06:57+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/5880/executer-un-screen-depuis-php-et-ben-ce-entraine-des-soucis/?page=1#p106915<p>Bonjour,
un port résérvé a root ? C'est juste que pour le moment les screen appartient à www-data et ducoup c'est pas forcement approprié quoi je voudrais faire tourner les screens sous un autre copte mais je ne sais pas comment <img alt=":(" src="/static/smileys/triste.png"></p>
<p>Merci d'avance !</p>Executer un screen depuis php et ben ce entraine des soucis :(, message #1069022016-04-22T13:35:23+02:00sgble/@sgblehttps://zestedesavoir.com/forums/sujet/5880/executer-un-screen-depuis-php-et-ben-ce-entraine-des-soucis/?page=1#p106902<p>Bonjour,</p>
<p>Pourquoi veux-tu que les instances tournent en root ? Je ne crois pas qu'un serveur Minecraft ait besoin d'écouter un port réservé à root.</p>Executer un screen depuis php et ben ce entraine des soucis :(, message #1069002016-04-22T13:07:30+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/5880/executer-un-screen-depuis-php-et-ben-ce-entraine-des-soucis/?page=1#p106900<p>Et comment je fais cela ? Mais merci beaucoup !</p>Executer un screen depuis php et ben ce entraine des soucis :(, message #1068972016-04-22T13:05:14+02:00WinXaito/@WinXaitohttps://zestedesavoir.com/forums/sujet/5880/executer-un-screen-depuis-php-et-ben-ce-entraine-des-soucis/?page=1#p106897<p>Une idée serais d'autoriser www-data en sudo sans mot de passe. </p>
<p>Sécurité cest moyen, mais je ne sais pas s'il y a d'autre solution.</p>Executer un screen depuis php et ben ce entraine des soucis :(, message #1068822016-04-22T11:09:26+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/5880/executer-un-screen-depuis-php-et-ben-ce-entraine-des-soucis/?page=1#p106882<p>Hello !</p>
<p>En ce moment je développe un hébergeur de serveur Minecraft, j'exécute donc des scripts depuis les pages web.</p>
<p>Dans ces scripts, notamment dans le <code>create_server.sh</code> il y a ce code :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="ch">#!/bin/bash</span>
<span class="k">if</span> <span class="o">[</span><span class="nv">$1</span> <span class="o">==</span> <span class="s2">""</span><span class="o">]</span>
<span class="k">then</span>
<span class="nb">echo</span> <span class="s2">"Require a name"</span><span class="p">;</span>
exit<span class="p">;</span>
<span class="k">fi</span>
<span class="k">if</span> <span class="o">[</span><span class="nv">$1</span> <span class="o">==</span> <span class="s2">"/"</span><span class="o">]</span><span class="p">;</span> <span class="k">then</span>
<span class="nb">echo</span> <span class="s2">"The name is no ok"</span><span class="p">;</span>
exit<span class="p">;</span>
<span class="k">fi</span>
<span class="k">if</span> <span class="o">[</span><span class="nv">$2</span> <span class="o">==</span> <span class="s2">""</span><span class="o">]</span><span class="p">;</span> <span class="k">then</span>
<span class="nb">echo</span> <span class="s2">"The script need a port number"</span><span class="p">;</span>
exit<span class="p">;</span>
<span class="k">fi</span>
<span class="nb">cd</span> /servers <span class="p">;</span>
mkdir <span class="nv">$1</span> <span class="p">;</span>
<span class="nb">cd</span> <span class="nv">$1</span> <span class="p">;</span>
<span class="nb">echo</span> <span class="s2">"Téléchargement de Minecraft Server"</span> <span class="p">;</span>
wget https://s3.amazonaws.com/Minecraft.Download/versions/1.8.9/minecraft_server.1.8.9.jar <span class="p">;</span>
<span class="nb">echo</span> <span class="s2">"Exécution du serveur"</span><span class="p">;</span>
java -Xms900M -Xmx1000M -jar minecraft_server.1.8.9.jar nogui <span class="p">;</span>
<span class="nb">echo</span> <span class="s2">"Changement de l'eula"</span><span class="p">;</span>
sed -i -e <span class="s2">"s/eula=false/eula=true/g"</span> eula.txt <span class="p">;</span>
java -Xms900M -Xmx1000M -jar minecraft_server.1.8.9.jar nogui <span class="p">;</span>
<span class="nb">echo</span> <span class="s2">"server-port=</span><span class="nv">$2</span><span class="s2">"</span> >> server.properties <span class="p">;</span>
screen -dmS <span class="nv">$1</span> java -Xms900M -Xmx1000M -jar minecraft_server.1.8.9.jar nogui <span class="p">;</span>
</pre></div>
</td></tr></table>
<p>Le problème c'est que dans ce script j'utilise des screen pour faire tourner les serveurs en tache de fond et comme les screen appartiennent aux users qui les créé c'est www-data qui prend tout les screen alors que je voudrais que ces screen ce créé au nom de root cependant je n'y arrive pas ;(.</p>
<p>P.S : J'ai deja tente le <code>su -</code> mais cela ne marche pas non plus et aucun message d'erreur.</p>
<p>Merci d'avance ! </p>