Mise en forme de code: pensez à utiliser les balises [ tcl ] et [ /tcl ] (sans les espaces bien sûr) autour de vos codes tcl afin d'avoir un meilleur rendu et une coloration syntaxique. x


Découpage de texte
#1
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.
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#2
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.
#3
Bonjour

Petite question concernant ces morceaux de code, coupent-ils entre deux mots ou au milieu des mots ?
#4
Au milieu des mots Smile
#5
@ Merwin : parle pour toi, le mien coupe à l'espace le plus proche :p
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.
#6
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
irc.zeolia.net - Offrez-moi un café
Merci de ne pas demander d'aide en MP
#7
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. ;)
Toute l'actualité de mes scripts ici     (dernière mise à jour le 22/04/2020)

Tout programme comporte au moins un bug et pourrait être raccourci d'au moins une instruction, de quoi l'on peut déduire que tout programme peut être réduit à une seule instruction qui ne fonctionne pas.


Possibly Related Threads…
Thread Author Replies Views Last Post
  [Résolu] récupérer texte dans page html BrYcOu 5 5,557 22/09/2015, 06:46
Last Post: BrYcOu
  Lire les dernières lignes d'un fichier texte. Ryan 4 5,046 23/09/2012, 18:34
Last Post: CrazyCat
  Detecter Flood texte DnS 7 5,021 05/12/2010, 19:01
Last Post: DnS
  Flood texte a repetition bewess 13 9,079 04/12/2010, 22:51
Last Post: lesny

Forum Jump:


Users browsing this thread: 1 Guest(s)