<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><category>pcsoft.fr.windev</category><copyright>Copyright 2026, PC SOFT</copyright><lastBuildDate>26 Feb 2020 11:51:03 Z</lastBuildDate><pubDate>26 Feb 2020 11:08:43 Z</pubDate><description>Bonjour à toutes et à tous&#13;
&#13;
Lors du test de mon programme, j'ai une boucle infinie (je suppose), hors je n'arrive pas à en trouver l'origine.&#13;
Le test que je réalise avec le fichier (voir Screenshot plus bas) me permet de directement recopier les lignes sans les traiter.&#13;
Le programme devrait donc se lancer puis s’arrêter quasiment instantanément hors ce n'est pas le cas.&#13;
&#13;
Merci d'avance pour cette longue lecture&#13;
&#13;
https://hostimage.windev.io/images/Capture_3d8f7f056fed4008a654f384591e2f9b.PNG&#13;
&#13;
&#13;
&#13;
[code:wl]&#13;
// Déclaration des variables&#13;
FichierNonTraité est une chaîne&#13;
sFichierTraité est une chaîne&#13;
IDFichier est un entier&#13;
LigneLue est une chaîne&#13;
tabTableauEnregistre est un tableau &lt;agrandissement=1&gt; de chaînes&#13;
TableauTraité est un tableau &lt;agrandissement=1&gt; de chaînes&#13;
Extractchaine est une chaîne&#13;
X1, X2, X3, Y1, Y2, Y3, E, rXmin ,rXmax, rYmin, rYmax, Dx, Dy, Cx, Cy, Rayon sont des réels&#13;
rDecx,rDecy sont des réels&#13;
//Xc, Yc, rRayonc sont des réels&#13;
//a1, b1, a2, b2 sont des réels&#13;
rVec1x, rVec1y, rVec2x, rVec2y sont des réels&#13;
rVec1len, rVec2len, rVecAng, VecProd, rVecSca sont des réels&#13;
//rXdeb,rYdeb sont des réels&#13;
i,j,w sont des entier&#13;
&#13;
// Sélection du fichier à analyser et création du fichier d'extraction&#13;
FichierNonTraité = fSélecteur("", "","Sélection du fichier gcode à analyser", ...&#13;
"Fichier externe" + TAB + "*.gcode", "gcode", fselCrée)&#13;
IDFichier = fOuvre(FichierNonTraité)&#13;
SI IDFichier = -1 ALORS&#13;
	Erreur(ErreurInfo(errMessage))&#13;
SINON&#13;
	sFichierTraité = fCrée("C:\Users\Fnay\Desktop\ExtractWindev\FichierTraité.gcode")&#13;
	SI sFichierTraité = -1 ALORS&#13;
		Erreur(ErreurInfo(errMessage))&#13;
	SINON&#13;
		fOuvre(sFichierTraité)&#13;
		SI sFichierTraité = -1 ALORS&#13;
			Erreur(ErreurInfo(errMessage))&#13;
		SINON&#13;
		FIN&#13;
	FIN&#13;
FIN&#13;
// Boucle principale&#13;
BOUCLE&#13;
	SupprimeTout(tabTableauEnregistre)&#13;
	SupprimeTout(TableauTraité)&#13;
	Ajoute(tabTableauEnregistre,LigneLue)&#13;
	j=1&#13;
// Extraction d'une couche dans le 1er tableau&#13;
	BOUCLE&#13;
		LigneLue = fLitLigne(IDFichier)&#13;
		SI ErreurDétectée ALORS&#13;
			Erreur(ErreurInfo())&#13;
			SORTIR&#13;
		FIN&#13;
		SI ChaîneOccurrence(LigneLue,"; layer ")=1 OU LigneLue = EOT ALORS SORTIR&#13;
		tabTableauEnregistre[j]=LigneLue&#13;
		j=j+1&#13;
	FIN&#13;
	j=1	&#13;
	w=1&#13;
	E=0&#13;
// Inscription des commentaires et début de layer&#13;
	TANTQUE ChaîneOccurrence(tabTableauEnregistre[j],"; ")=1 &#13;
		TableauTraité[w]=tabTableauEnregistre[j] &#13;
		j=j+1&#13;
		w=w+1&#13;
	FIN&#13;
// Inscription des codes ne contenant pas de X et Y&#13;
	TANTQUE ChaîneOccurrence(tabTableauEnregistre[j],"X")=0 OU ChaîneOccurrence(tabTableauEnregistre[j],"Y")=0&#13;
		TableauTraité[w]=tabTableauEnregistre[j] &#13;
		j=j+1&#13;
		w=w+1	&#13;
	FIN&#13;
	FinProgramme()&#13;
	BOUCLE&#13;
		SI TableauCherche(tabTableauEnregistre,tcLinéaireDernier,"")=(j-1) ALORS SORTIR&#13;
		POUR i=1 À 3&#13;
			{"X"+i,indVariable}=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"X")+1 À]])&#13;
			{"Y"+i,indVariable}=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"Y")+1 À]])&#13;
			E=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"E")+1 À]])+E&#13;
			j=j+1&#13;
		FIN&#13;
	rVec1x=X2-X1&#13;
	rVec1y=Y2-Y1&#13;
	rVec2x=X3-X2&#13;
	rVec2y=Y3-Y2&#13;
	rVec1len=rVec1x^2+rVec1y^2&#13;
	rVec2len=rVec2x^2+rVec2y^2&#13;
	VecProd=rVec1x*rVec2y-rVec2x*rVec1y&#13;
	rVecSca = rVec1x * rVec2x + rVec2y  * rVec1y&#13;
	SI rVec1len&lt;&gt;0 ET rVec2len&lt;&gt;0 ALORS&#13;
		rVecAng=(((VecProd^2)/rVec1len)/rVec2len)*90&#13;
		rVec1len = rVec1len^0.5&#13;
		rVec2len = rVec2len^0.5	&#13;
	SINON&#13;
		SI rVecSca &lt; 0 ALORS &#13;
			rVecAng= 180-rVecAng&#13;
		SINON&#13;
		FIN&#13;
		SI VecProd &lt; 0 ALORS&#13;
			rVecAng = - rVecAng&#13;
		SINON&#13;
		FIN&#13;
	FIN&#13;
	SELON rVecAng&#13;
		CAS 0 : TableauTraité[w]=tabTableauEnregistre[j-3]&#13;
				w=w+1&#13;
				TableauTraité[w]=tabTableauEnregistre[j-2]&#13;
				w=w+1&#13;
				TableauTraité[w]=tabTableauEnregistre[j-1]&#13;
				w=w+1&#13;
		CAS À 5 :&#13;
			rXmin=X1&#13;
			rXmax=X1&#13;
			rYmin=Y1&#13;
			rYmax=Y1&#13;
			BOUCLE&#13;
				SI ChaîneOccurrence(tabTableauEnregistre[j],"E0.0000")=1 OU ChaîneOccurrence(tabTableauEnregistre[j],"; ")=1 OU TableauCherche(tabTableauEnregistre,tcLinéaireDernier,"")=(j-1) ALORS SORTIR&#13;
				SI rXmin&gt;Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"X")+1 À]]) ALORS rXmin=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"X")+1 À]])&#13;
				SI rXmax&lt;Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"X")+1 À]]) ALORS rXmax=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"X")+1 À]])&#13;
				SI rYmin&gt;Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"Y")+1 À]]) ALORS rYmin=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"Y")+1 À]])&#13;
				SI rYmax&lt;Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"Y")+1 À]]) ALORS rYmax=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"Y")+1 À]])&#13;
				E=Val(tabTableauEnregistre[j][[Position(tabTableauEnregistre[j],"E")+1 À]])+E&#13;
				j=j+1&#13;
			FIN&#13;
			Dx=rXmax-rXmin&#13;
			Dy=rYmax-rYmin&#13;
			Cx=(rXmax+rXmin)/2&#13;
			Cy=(rYmax+rYmin)/2&#13;
			Rayon=Dx/2&#13;
			rDecx=Cx-Rayon*Cosinus(-5/(180*3.14))&#13;
			rDecy=Cy-Rayon*Sinus(-5/(180*3.14))&#13;
			TableauTraité[w]="G1 x" &amp;rXmin &amp;" Y" &amp;Cy&#13;
			w=w+1&#13;
			TableauTraité[w]="G3 X" &amp;(rXmin+2*Rayon) &amp;" Y" &amp;Cy &amp;" R" &amp;Rayon &amp;" E" &amp;E/2&#13;
			w=w+1&#13;
			TableauTraité[w]="G3 X" &amp;rDecx &amp;" Y" &amp;rDecy &amp;" R" &amp;Rayon &amp;" E" &amp;E&#13;
			w=w+1&#13;
			TableauTraité[w]="G3 X" &amp;rXmin &amp;" Y" &amp;Cy &amp;" R" &amp;Rayon&#13;
			w=w+1&#13;
			&#13;
		CAS 5 À 180 :&#13;
			&#13;
		AUTRE CAS :&#13;
	FIN	&#13;
	FIN&#13;
	POUR TOUT ValeurTableauTraite DE TableauTraité&#13;
		Extractchaine+=[RC] + ValeurTableauTraite&#13;
	FIN&#13;
	fSauveTexte("C:\Users\Fnay\Desktop\ExtractWindev\FichierTraité.gcode",Extractchaine)&#13;
	SI LigneLue= EOT ALORS SORTIR &#13;
	SAI_ContenuFichier=X1 + RC + Y1 + RC + X2 + RC + Y2 + RC + X3 + RC + Y3 + RC + rVecAng + RC + E&#13;
FIN&#13;
ToastAffiche("Traitement du fichier terminé")&#13;
[/code]</description><ttl>30</ttl><generator>WEBDEV</generator><language>fr_FR</language><link>https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie/read.awp</link><title>Boucle infinie</title><managingEditor>moderateur@pcsoft.fr (El moderador)</managingEditor><webMaster>webmaster@pcsoft.fr (El webmaster)</webMaster><item><author>Quentin Lec.</author><category>pcsoft.fr.windev</category><comments>https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie-237312/read.awp</comments><pubDate>26 Feb 2020 11:51:03 Z</pubDate><description>Bonjour,&#13;
Update qui répond à ton commentaire, j'ai coupé lin fichier test afin de garder un minimum de ligne et le problème vie…</description><guid isPermaLink="true">https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie-237312/read.awp</guid><link>https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie-237312/read.awp</link><source url="https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie/read.awp">Boucle infinie</source><title>Re: Boucle infinie</title></item><item><author>Voroltinquo</author><category>pcsoft.fr.windev</category><comments>https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie-237311/read.awp</comments><pubDate>26 Feb 2020 11:27:52 Z</pubDate><description>Bonjour,&#13;
As-tu tenté d'exécuter ton code en mode pas à pas ?&#13;
&#13;
--&#13;
Il y a peut être plus simple, mais, ça tourne</description><guid isPermaLink="true">https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie-237311/read.awp</guid><link>https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie-237311/read.awp</link><source url="https://forum.pcsoft.fr/es-ES/pcsoft.fr.windev/237309-boucle-infinie/read.awp">Boucle infinie</source><title>Re: Boucle infinie</title></item></channel></rss>
