2017-10-27 3 views
0

どのように変数を常に50文字後に分割することができますか?変数内のtclの長さ

のでsplittは50 charachters

set length [::textutil::adjust $text -length 50 -strictlength true] 

よろしく

編集した後にのみ、新しい行にあります。

入力が

LaRochelle, a former pirate captain, is caught by the British. To get his 
ship back, he works as a spy against other pirates, first of all Blackbeard 
and Providence. He works on some ships, crossing the Caribbean sea, with the 
intention 


set pieces [regexp -all -inline {.{1,50}} $Plot] 
set 0 [lindex [lindex $pieces 0] 0] 
set 1 [lindex [lindex $pieces 1] 1] 
putnow "PRIVMSG $channel :$0" 

出力された変数$プロットで、このテキストでありますのみ:

<testbot> LaRochelle, 
<testbot> British. 

残念ながら、もはや..

+0

あなたはあなたが求めるものを手に入れます。 'regexp'の呼び出しはあなたのテキストを複数の50文字に分割します。次に、最初の作品の最初のアイテムを尋ね、2番目の作品の2番目のアイテムの "LaRochelle"を取得し、 "British"を取得します。あなたは何か他のことを期待していましたか? –

+0

はい0-50個、LaRochellaだけでなく、これは11個です。残りはどこですか? 50ピースはこれです:以前の海賊船長のLaRochelleがキャッチされました – revoque

+0

'pieces'変数にあるものを調べるか、' lindex $ pieces 0'と 'lindex $ pieces 1'という式をそれぞれ使用してください。例えば、 'lindex $ pieces 0'は' 'LaRochelle ''(これは元の海賊船長)に' 'によって捕獲されます。これは' 'pieces'のリストの最初の項目です。' pieces'はあなたのテキストからの断片のリストであり、それぞれ最大50文字です。 –

答えて

1

あなたはすべて50番目の文字の後に改行を追加するためにregsubを使用することができます。

set text [string repeat 123456 48] 
set formatted [regsub -all {.{50}} $text "&\n"] 
puts $formatted 
12345612345612345612345612345612345612345612345612 
34561234561234561234561234561234561234561234561234 
56123456123456123456123456123456123456123456123456 
12345612345612345612345612345612345612345612345612 
34561234561234561234561234561234561234561234561234 
56123456123456123456123456123456123456 
+0

これは次の行にのみ分割?正しい?私は変数でそれを必要とし、それはもはやそれぞれの直後ではありません。 – revoque

1

最も簡単な方法は、すべての一致のリストの結果を有する(及びサブマッチ存在する場合)、それは所望の結果をかなり直接送達することができることを意味するように、分割のためregexp -all -inlineを使用することです。

set pieces [regexp -all -inline {.{1,50}} $inputString] 

REは(中括弧で、Tclのでは技術的には不要な、しかし、ほとんど常に良いアイデア).{1,50}で、できるだけ(理由は貪欲のように、「1〜50文字を意味していますマッチング)」、そしてできるだけ多くのものを得ることができます。


あなたは単語の境界に制約したい場合は、REが最高\m.{1,50}\Mに変更されるだろう。

+0

リストを取得したら、それを 'foreach'や' [$ join "\ n"] 'で繰り返し、要素テキスト間に改行を含む文字列を作ることができます。 –

+0

ここにテキストが多すぎます、私はfrist postで編集しました – revoque