Communauté sur les Eggdrops - Community about Eggdrops
Découpage de texte - Printable Version

+- Communauté sur les Eggdrops - Community about Eggdrops (https://forum.eggdrop.fr)
+-- Forum: Eggdrop et TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=8)
+--- Forum: Scripts TCL (https://forum.eggdrop.fr/forumdisplay.php?fid=4)
+--- Thread: Découpage de texte (/showthread.php?tid=255)



Découpage de texte - MenzAgitat - 09/08/2008

Description :
Procédure à intégrer dans votre code, permettant d'annoncer du texte sur un chan en le découpant en autant de lignes que nécessaire afin de s'assurer qu'il ne sera pas tronqué par la limite de longueur de ligne de votre serveur IRC.


Syntaxe :
tcl
split_line $limit $chan $texte

$limit représente la longueur maximale qu'une ligne ne peut pas dépasser (le réglage n'est pas le même sur tous les serveurs IRC)
$chan représente le chan sur lequel vous voulez que le texte soit annoncé.
$texte représente le texte intégral que vous voulez afficher sur le chan.


Exemple :
tcl
split_line 420 #monchan "blablabla blabla blablabla bla blabla ...."



Code :
tcl
proc split_line {limit chan texte} {
	set output_length [string length $texte]
	set letter_index 0
	while {$letter_index < $output_length} {
		if {$output_length - $letter_index > $limit} {
			set cut_index [string last " " $texte [expr $letter_index + $limit ]]	
 		} else {
			set cut_index $output_length 
		}
		lappend output [string range $texte $letter_index $cut_index]
		set letter_index $cut_index
	}
	foreach line $output {
		puthelp "PRIVMSG $chan :$line"
	}
}


Sentez-vous libre de l'améliorer, de proposer de meilleures façons de faire et de poster votre code, le débat est ouvert.


RE: Découpage de texte - Merwin - 10/08/2008

Voila une version plus allégée, avec un algo différent, sans utiliser de liste:


tcl
proc split_line {texte maxChars} {
    set strLength [string length $texte]
    set numLines [expr {$strLength / $maxChars}]
    set modulo [expr {$strLength % $maxChars}]
    for {set i 0; set j 0} {$i < $numLines} {incr i; incr j $maxChars} {
        puts [string range $texte $j [expr {$j + ($maxChars-1)}]]
    }
    if {$modulo != 0} {
        puts [string range $texte $j end]
    }
}


Donc en fait $modulo contient le reste de la division, donc en gros, si j'ai une phrase de 15 caractères, que je veux divisé en 3 lignes de 5 (maxChars = 5), le module est 0, mais si je veux le divisé par 4 caractères, la division 15/4 retourne 3, et il reste 3.

Donc si le modulo est égal à 0, c'est qu'on a nombre de ligne tout rond, sinon c'est qu'il reste des caractères à envoyés à la fin.


RE: Découpage de texte - mika23 - 01/02/2010

Bonjour

Petite question concernant ces morceaux de code, coupent-ils entre deux mots ou au milieu des mots ?


RE: Découpage de texte - Merwin - 01/02/2010

Au milieu des mots Smile


RE: Découpage de texte - MenzAgitat - 02/02/2010

@ Merwin : parle pour toi, le mien coupe à l'espace le plus proche :p


RE: Découpage de texte - CrazyCat - 04/02/2010

Espace précédent ou suivant ?
J'imagine que c'est le précédent, mais connaissant les fénéants, je m'attends au pire :D


RE: Découpage de texte - MenzAgitat - 05/02/2010

Tu insinues donc que je suis un fainéant et que tu t'attends au pire de ma part ?

Tss..


Ca coupe à l'espace précédent, bien entendu. ;)