Page 1 sur 1

Lecture d'un TEXTAREA

Posté : 12 févr. 2019, 17:37
par JLuc69
Salut tout le monde,
J'utilise un formulaire avec deux TEXTAREA nommés pour que l'utilisateur puisse copier coller un texte dans le premier.
Avec des procédures, je voudrais traiter le texte ligne par ligne et mettre le résultat dans le second TEXTAREA.
J'ai réussi à le faire, mais en prenant le texte au complet, le traiter et mettre le résultat final dans le second. Le soucis, c'est que si le texte est long, je me retrouve avec un "out of mémory"

Est t'il possible de prendre le texte ligne par ligne, traiter la ligne et l'ajouter à la suite puis recommencer ?

Merci de vos futures réponses :p

JLuc69

Re: Lecture d'un TEXTAREA

Posté : 14 févr. 2019, 09:30
par webmaster
Bonjour

Il serait interessant d'avoir le script complet.
Il doit y avoir un problème de boucles et de variables pour arriver à une saturation mémoire sur du texte.

Re: Lecture d'un TEXTAREA

Posté : 14 févr. 2019, 17:46
par JLuc69
Voici le script et le formulaire :

Code : Tout sélectionner

<script language="JavaScript">
function transformer() {
    var programme=document.forms.formulaire.clair.value;
    var reg=new RegExp("[\r\n]+");
    var ligne=programme.split(reg);
    //document.forms.formulaire.crypte.value=table[1];
    for (var i=0; i<ligne.length; i++) {
        if (ligne[i].length > 0) {
            var reg1=/([A-Z]-?[0-9.0-9]+)/g;
            var mots=ligne[i].match(reg1);
            for (var j=0; j<mots.length; j++) {
                var axe=mots[j].charAt(0);
                var valeur = (mots[j].substring(1)*1);
                if(axe=="X" || axe=="Y" || axe=="Z") {
                    var mot=axe + Math.round(valeur*1000)/1000 + " ";
                }
                else {
                    var mot=axe + valeur + " ";
                }
                document.forms.formulaire.crypte.value += mot; 
            }
        }
        document.forms.formulaire.crypte.value += "\r\n";
    }
    
}

function vider_s() {
    document.forms.formulaire.crypte.value = "";
}

function vider_e() {
    document.forms.formulaire.clair.value = "";
}
</script>

<form name="formulaire">
    <fieldset>
	  <table border=0 width=100%>
		<tr>
            <td width=40%>
                <center>
                Programme d'origine :<br />
                <textarea name=clair rows=20 cols=60 wrap=virtual></textarea></center>
            </td>
            <td width=8%><center>
                <input type="BUTTON" value="Vider l'entrée" onClick="vider_e()" name="BUTTON3" style="width: 100px;">
                <input type="BUTTON" value="Transformer" onClick="transformer()" name="BUTTON4" style="width: 100px;">
                <input type="BUTTON" value="Vider la sortie" onClick="vider_s()" name="BUTTON2" style="width: 100px;">
                </center></td>
            <td width=40%>
                <center>
                Programme transformé :<br />
                <textarea name=crypte rows=20 cols=60 wrap=virtual></textarea></center>
            </td>
        </tr>
	  </table>
    </fieldset>
</form>

Re: Lecture d'un TEXTAREA

Posté : 15 févr. 2019, 11:03
par webmaster
Ok, pour que le script fonctionne, il faut des lignes en entrées du type
ABC-125

Mais je ne vois aucune transformation se faire

Il faudrait ajouter des exemples de texte d'entrée

Re: Lecture d'un TEXTAREA

Posté : 15 févr. 2019, 16:47
par JLuc69
Si si, le texte est transformé dans le if :
if(axe=="X" || axe=="Y" || axe=="Z") {
var mot=axe + Math.round(valeur*1000)/1000 + " ";
}
else {
var mot=axe + valeur + " ";
}
document.forms.formulaire.crypte.value += mot;

Le texte, c'est pour un programme en G-Code.selon le logiciel de FAO utilisé, il arrive que les positions X, Y et Z aient une précision de 5 à 6 chiffres après la virgule. Du coup, je remets que 3 chiffres après la virgule avec ce script

Avant :

Code : Tout sélectionner

G1 X0.5952381 Y0.5952381 Z-1.2
G1 X1.190476 Y0.5952381 Z-1.2
G1 X1.190476 Y0.5952381 Z-1.24
G1 X2.380952 Y0.5952381 Z-1.24
Après :

Code : Tout sélectionner

G1 X0.595 Y0.595 Z-1.200
G1 X1.190 Y0.595 Z-1.200
G1 X1.190 Y0.595 Z-1.240
G1 X2.381 Y0.595 Z-1.240
Si, de plus, je pouvais retiré les "0" en trop (Z-1.200 --> Z-1.2) ce serait parfait

Merci

Re: Lecture d'un TEXTAREA

Posté : 18 févr. 2019, 10:55
par webmaster
Ok, je comprends mieux l'intérêt du script :)

J'ai simplement modifié le fonctionnement et ajouté des affichages de données dans la console (https://www.toutjavascript.com/referenc ... onsole.php )

Il vaut mieux utiliser une variable temporaire pour traiter la chaîne de retour et l'affecter en fin de traitement au formulaire.
Je pense que c'est cette partie qui ralentissait le script

Le script est fonctionnel ici :
https://www.toutjavascript.com/user/textarea.html

Avec 6 lignes en entrée :
Fonction transformer(): 0.510009765625ms
textarea.html:28 Avec 6 lignes en entrée
textarea.html:30 Mémoire occupée : 10 000 000 octets
textarea.html:31 Mémoire occupée maximale : 10 000 000 octets
textarea.html:32 Mémoire disponible : 2 330 000 000 octets

Et avec un test en copiant plus de 100 000 lignes, le traitement se fait en moins d'une demi seconde :
Fonction transformer(): 282.31494140625ms
textarea.html:28 Avec 140251 lignes en entrée
textarea.html:30 Mémoire occupée : 10 000 000 octets
textarea.html:31 Mémoire occupée maximale : 10 000 000 octets
textarea.html:32 Mémoire disponible : 2 330 000 000 octets

Re: Lecture d'un TEXTAREA

Posté : 18 févr. 2019, 16:32
par JLuc69
Splendide !
Merci de m'avoir enlevé une petite épine du pied :p
JLuc69