Identifikasi tanda kurung kurawal dan beberapa contoh dalam daftar menggunakan TCL

Saya sedang membaca file besar dan saya hanya tertarik pada sebagian kecil file seperti yang ditunjukkan di bawah ini.

TC.0.Type = Bob 1
TC.1.Type = Mark 1
TC.2.Type =
TC.3.Type =
TC.4.Type = Fred 1
TC.5.Type =
TC.6.Type =
TC.7.Type = 
TC.8.Type =
TC.9.Type = Fred 1

Saya telah membuat variabel yang sekarang menyimpan informasi ini

data = "{Bob 1} {Mark 1} {} {} {Fred 1} {} {} {} {} {Fred 1}"

TC selalu antara 0-9, jadi panjangnya diketahui.

Yang ingin saya lakukan adalah:

1) Jika ada beberapa contoh "Fred 1" dan hapus. 2) Temukan slot kosong pertama dan tentukan indeksnya.

Pertanyaan 1) Apakah biasanya terdapat tanda kurung saat menggunakan lappend? Saya berharap ini hanya terjadi jika bidang kosong

set data ""
for {set j 0} {$j < 10} {incr j} {  
    lappend data $fromfile
    }
puts "Data in list = $data"

Pertanyaan 2) Saya bahkan sudah mencoba menggunakan regexp untuk memilih yang kosong tetapi sepertinya tidak berhasil.

Temukan bidang kosong {}

set j 0
for {set i 0} {$i < $ldata} {incr i} {
# set nline [split $data "\s"]
# puts "data ($i) = $nline"
if {[regexp {\{.*\}} $data]} {
   puts " Found {}"
   incr j
   puts "j = $j"
}
}

Temukan bidang dengan nama mis. Bob 1

for {set i 0} {$i < $ldata} {incr i} {
if {[regexp {\{.*[a-zA-Z0-9]\}} $data]} {
   puts " Found something with names"
}
}

Akan sangat menghargai jika seseorang dapat memberi nasihat dan membimbing.


person Anju    schedule 08.11.2019    source sumber


Jawaban (1)


Perintah lsearch akan sangat berguna untuk apa yang Anda lakukan, terutama dengan opsi -all.

set data "{Bob 1} {Mark 1} {} {} {Fred 1} {} {} {} {} {Fred 1}"
puts [lsearch -all -exact $data "Fred 1"]
# ==> 4 9

Kita juga dapat menggunakannya untuk menghapus nilai tertentu:

puts [lsearch -all -inline -exact -not $data "Fred 1"]
# ==> {Bob 1} {Mark 1} {} {} {} {} {} {}

Untuk mencari slot kosong pertama, kita cukup melakukan:

puts [lsearch -exact $data ""]
# ==> 2

Kami pasti mengharapkan kawat gigi kembali dari operasi daftar; begitulah cara elemen daftar kosong diekspresikan.

person Donal Fellows    schedule 08.11.2019
comment
Hai Donal, terima kasih. Saya pikir saya telah membuatnya menjadi lebih rumit. Namun untuk pembelajaran saya, dapat memperbaiki regexp saya untuk mengidentifikasi slot kosong dan slot dengan string. Saya akan sangat menghargainya. Terima kasih - person Anju; 09.11.2019