1

私が持っているプログラムに使用するコードのスニペットがあります[したがって、アプリ固有のコードの一部] ...とにかく、単語が大文字でない限り、各単語の最初の文字を大文字にしようとしています。

例: >>これは変更されるテキストです。

私がこれまでに持っているコードは次のとおりです。

繰り返しますが、これの一部はアプリ固有のもので、「puts」を使用できません。結果は returnとして返される必要があります。これが、var を作成して単語ごとに追加する理由です。

proc ToTitle {} {
set Input [sh_set clipboard]
set CleanedInput [string map {" " |} [string trimright [string trimleft $Input]]]
set InputList [split $CleanedInput "|"]
set wresult ""
set item 0
foreach line $InputList {
set List_Item [lindex $InputList $item];
if {[string is upper $List_Item] == 1} {
 set newline $List_Item
    set wresult "$wresult $newline"
    incr item   
} else {
 set newline [string totitle $List_Item]
    set wresult "$wresult $newline"
    incr item
}
}
regsub -all {\u0020{2,}} $wresult " " wresult; #REMOVE ALL EXCESSIVE SPACE CHARACTERS
set $wresult [string trimright [string trimleft $wresult]]; # TRIM ALL OF THE WHITESPACE BEFORE AND AFTER THE STRING
return "$wresult"}

これは現在機能しており、出力は次のようになります。 これは変更されるテキストです。

問題は「変更」です。「。」のため。 問題は、特殊文字または単語文字を含むアイテムの単語文字のみを読み取るには、何を使用できるかということです。

{[string is upper $List_Item] == 1}

私はそれをチェックするためにそれに追加できるものがあることを知っています...すべての助けを前もってありがとう。

4

1 に答える 1

4

もっと簡単な解決策があると思います。これを試して:

set a "this is text THAT would be CHANGED."
set out ""
foreach word $a {
append out "[string toupper $word 0 0] "
}
puts $out

実行すると、次の出力が得られます。

% % % This Is Text THAT Would Be CHANGED.
于 2013-01-07T00:42:07.107 に答える