Partage
  • Partager sur Facebook
  • Partager sur Twitter

Remplissage d'un tableau bidimensionnel

Sujet résolu
    14 janvier 2021 à 18:00:05

    Bonjour à tous,

    Je débute en JS et ai besoins de vos lumières.

    J'ai ce code :

    input.addEventListener('blur',() => {
        let texte=input.value;
        let lettres=[];
        let nbRt=0;
    
        for(let i=0; i<texte.length; i++){
            if(texte[i]=='\n'){
                nbRt++;
            }else{
                lettres.push(chars.indexOf(texte[i]));
            }
        }
        
        let txt="";
    
            txt+="<table cellspacing='0' cellpadding='0'><tr>";
    
            let i=0;
            let j=0;
            let k=0;
    
            while(i<8){
                txt+= "<tr>";
                while(j<lettres.length){
                    if(lettres[j]==95){
                        txt+="<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>";
                    }else{
                        while(k<standard[lettres[j]][i].length){
                            if (standard[lettres[j]][i][k]==' '){
                                txt+="<td>&nbsp;&nbsp;</td>";
                            }else{
                                txt+="<td>"+standard[lettres[j]][i][k]+"</td>";
                            }
                            k++;
                        }
                    }
                    j++;
                    k=0;
                }
                txt+= "</tr>";
                i++;
                j=0;
            }
            txt+="</table>";
        
    
        output.innerHTML=txt;
        output.style.color=color.value
    },false)

    Qui me permet de faire du ascii-art mais seulement sur une ligne, mais j'ai quand même une partie qui compte les \n(retours à la ligne) c'est la variable nbRt.

    Sinon, les texte est récupéré dans un textarea(input) et le Ascii est envoyé dans un p(output).

    J'ai mis la création du tableau dans un for qui boucle sur nbRt :

    input.addEventListener('blur',() => {
        let texte=input.value;
        let lettres=[];
        let nbRt=0;
    
        for(let i=0; i<texte.length; i++){
            if(texte[i]=='\n'){
                nbRt++;
            }else{
                lettres.push(chars.indexOf(texte[i]));
            }
        }
        
        let txt="";
    
        for(let l=0; l<=nbRt; l++){
            txt+="<table cellspacing='0' cellpadding='0'><tr>";
    
            let i=0;
            let j=0;
            let k=0;
    
            while(i<8){
                txt+= "<tr>";
                while(j<lettres.length){
                    if(lettres[j]==95){
                        txt+="<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>";
                    }else{
                        while(k<standard[lettres[j]][i].length){
                            if (standard[lettres[j]][i][k]==' '){
                                txt+="<td>&nbsp;&nbsp;</td>";
                            }else{
                                txt+="<td>"+standard[lettres[j]][i][k]+"</td>";
                            }
                            k++;
                        }
                    }
                    j++;
                    k=0;
                }
                txt+= "</tr>";
                i++;
                j=0;
            }
            txt+="</table>";
        }
    
        output.innerHTML=txt;
        output.style.color=color.value
    },false)

    Sauf que du coup, l'entièreté du texte est écrit sur chaque ligne j'ai donc voulu compartimenter les lignes dans un tableau bidimensionnel... Et c'est là que ça se complique...

    J'ai essayé comme ça :

        let lettres=[];
        let nbRt=0;
        let temp=[];
    
        for(let i=0; i<texte.length; i++){
            if(texte[i]=='\n'){
                lettres.push(temp);
                nbRt++;
                while (temp.length!==0){
                    temp.pop();
                }
            }else{
                temp.push(chars.indexOf(texte[i]));
            }
        }

    En passant par un deuxième tableau pour remplir le premier, mais évidemment ça ne marche pas mais ça ne garde que la dernière entrée.

    Merci par avance.

    PS : chars est un tableau avec tous les caractères :

    let chars=['!','\"','#','$','%','&','\'','(',')','*','+',',','-','.','/','0','1','2','3','4','5','6','7','8','9',':',';','<','=','>','?','@','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','[','\\',']','^','_','`','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','{','|','}','~','\n',' '];
    



    -
    Edité par Cyprien Siaud 16 janvier 2021 à 12:05:23

    • Partager sur Facebook
    • Partager sur Twitter

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

      15 janvier 2021 à 8:45:42

      Bonjour,

      Mauvais titre

      Le titre est un élément important qui ne doit pas être négligé. N'oubliez pas cette règle simple : le titre idéal résume la question que vous allez poser en une petite phrase. Il doit permettre aux visiteurs de se repérer facilement dans le forum visité et d'identifier le sujet à sa seule lecture.

      Vous pouvez utiliser divers préfixes comme [Erreur], [MySQL], [Compatibilité], etc... Aussi, pensez à consulter les règles propres à chaque forum (visibles dans les topics épinglés en haut des sections).

      De plus, choisir un bon titre permet de rendre plus faciles les recherches des autres membres.

      Les titres de type "besoin d'aide" ou "problème" ne sont pas tolérés.

      Merci de modifier votre titre. Pour cela, éditez le premier message de votre sujet.

      (titre originel : Tableau multidimensionnel)

      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        16 janvier 2021 à 19:47:48

        Au final j'ai trouvé, il faut à chaque fois créer un nouveau tableau et le remplir au fur et à mesure :

        let tests=[];
        
        for (let i=0; i<5; i++){
            tests.push([]);
            for (let j=0; j<10; j++){
                tests[i].push(j);
            }
        }
        alert(tests);


        A+

        • Partager sur Facebook
        • Partager sur Twitter

        Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
        Confucius

        Remplissage d'un tableau bidimensionnel

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown