split
コマンドのオプションの第二引数ががオンに分割する文字のを設定すると解釈されるので、本当にあなたがやりたいことするつもりはありません。しかし、他のアプローチがあります。あなたが欲しいものを行うための単純な方法の一つは、(!Unicodeはそれらの完全である)入力データにない文字に文字列を変換するstring map
を使用し、その上split
することです:
set strdata "34a64323R6662w0332665323020346t534r66662v43037333444533053534a64323R6662w0332665323020346t534r66662v430373334445330535"
set splitterm "3334445330535"
set items [split [string map [list $splitterm "\uFFFF"] $strdata] "\uFFFF"]
foreach i $items {
puts "==> $i"
}
# ==> 34a64323R6662w0332665323020346t534r66662v43037
# ==> 34a64323R6662w0332665323020346t534r66662v43037
# ==> {}
{}
(つまり、空の文字列のリスト要素)が最後の分割要素の後に来る文字列であるため、末尾にあることに注意してください。基本的にはお勧めは何textutil :: splitx`
# Doing this in steps because the line is a bit long otherwise
set mapped [string map [list $splitterm "\uFFFF"] $strdata]
set trimmed [string trimright $mapped "\uFFFF"]
set items [split $trimmed "\uFFFF"]
ありがとうドナルド。 "\ uFFFF"は何を意味しますか? – Andre
通常のテキスト*または*バイナリデータでは発生しない、Unicode文字のエスケープされたバージョンです。私は、Unicode Consortiumによると、実際にはシリアル化された文字列では有効ではないと思います。それは私たちが分割する場所のマーカーとして一時的に借りているだけなので、ここでOKです。それは何も意味しない。 –
よろしくお願い申し上げます。 – Andre