#2596 lreplace doesn't behave properly

obsolete: 8.4.5
closed-invalid
5
2004-02-17
2004-02-16
Ram Sunder
No

following lines are in a file names lreplace.test

set line {'Bauelemente-Name ' ' GF' PIP BpEb SG
[Abmasse [Abholposition [B
estueckposition [Abholort
[Zeiten ] 'Position'}
puts "line: $line"
while { 1 } {
set index [ lsearch -glob $line {\[*} ]
if ![ string compare $index -1 ] then {
break
}
set line [ lreplace $line $index $index DUMMY ]
puts "line in while: $line"
}
puts "line after regsub: $line"

running it on TCL shell, one will get the following result

line: 'Bauelemente-Name ' ' GF' PIP BpEb SG
[Abmasse [Abholposition [Bestueckposition
[Abholort [Zeiten ] 'Position'

line in while: 'Bauelemente-Name ' ' GF' PIP BpEb SG
DUMMY {[Abholposition} {[Bestueckposition}
{[Abholort} {[Zeiten} \] 'Position'

line in while: 'Bauelemente-Name ' ' GF' PIP BpEb SG
DUMMY DUMMY {[Bestueckposition} {[Abholort}
{[Zeiten} \] 'Position'
line in while: 'Bauelemente-Name ' ' GF' PIP BpEb SG
DUMMY DUMMY DUMMY {[Abholort} {[Zeiten}
\] 'Position'

line in while: 'Bauelemente-Name ' ' GF' PIP BpEb SG
DUMMY DUMMY DUMMY DUMMY {[Zeiten} \] 'Position'

line in while: 'Bauelemente-Name ' ' GF' PIP BpEb SG
DUMMY DUMMY DUMMY DUMMY DUMMY \] 'Position'

Just check in output line 2(line in while), second last
element, it get appended by "\" while in older version of
TCL, say 7.3(since I have that)

This is not he behaviour and it is working fine., output of
lreplace command just shows me ] as second last
element of resultant list.

Discussion

  • Donal K. Fellows

    • status: open --> closed-invalid
     
  • Donal K. Fellows

    Logged In: YES
    user_id=79902

    This isn't a bug. The semantics of [lreplace] (and quite a
    few other list operations) were deliberately changed in Tcl
    8.0 (which is itself many years old now) to no longer
    guarantee that minimal alterations to the string were made,
    a sacrifice which allows much more aggressive and efficient
    list handling overall. Note that element-wise comparison
    with what you would expect to get out of Tcl 7.3 should
    still yield equal lists; they are just not expressed using
    the same string.

     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks