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.
Répondre Avertir
#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.
Répondre Avertir
#3
Bonjour

Petite question concernant ces morceaux de code, coupent-ils entre deux mots ou au milieu des mots ?
Répondre Avertir
#4
Au milieu des mots Smile
Répondre Avertir
#5
@Merwin : parle pour toi, le mien coupe à l'espace le plus proche :p
Répondre Avertir
#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 Very Happy
Répondre
#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. Wink
Répondre Avertir


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
Tchat 100% gratuit -Discutez en toute liberté