2013-12-05 4 views
1

У меня есть адреса mac в этой форме «001122334455», которые я хочу превратить в «00 11 22 33 44 55». Я предполагаю, что есть способ сделать это в одной строке, но единственный способ, который я нашел, - следующая смехотворно ужасная процедура. Может ли кто-нибудь показать мне, как это сделать правильно?добавьте пробел каждые 2 символа в строке

proc addSpaces { mac } { 
    set mac [split $mac {}]         
    set i 0             
    while { $i < 12 } {          
     if { [expr $i % 2] == 0 } {       
      append macAddr " "        
      append macAddr [lindex $mac $i]     
      append macAddr [lindex $mac [expr $i + 1]]  
     }              
     incr i            
    } 
    return $macAddr               
} 

ответ

3

Вы можете использовать TCL невероятно гибкий foreach:

foreach {a b} [split $mac {}] { 
    append macAddr " $a$b" 
} 

Или, если вы хотите избавиться от ведущего пространства, построить список вместо строки:

foreach {a b} [split $mac {}] { 
    lappend macAddr "$a$b" 
} 
join $macAddr " " 

В качестве альтернативы вы можете просто string trim свою строку перед возвратом

+1

Я забыл, что Еогеасп мог сделать такого рода вещь :) первым с струнной отделкой идеально. –

3

regsub также работает

set s 001122334455 
set t [string trimright [regsub -all {..} $s {& }]] 
puts ">$t<" 
>00 11 22 33 44 55< 

@ предложение Донала является большим:

set t [join [regexp -all -inline .. $s]] ;# "00 11 22 33 44 55" 
+3

Или 'regexp -all -inline .. $ s' –

Смежные вопросы