2016-06-30 7 views
0

Ich versuche, ein ‚\ n‘ am Ende jeder Zeile vorgesehen zu geben, wenn es { am Ende bekommt.Erste Ungültige Bareword Fehler

so schrieb ich den Befehl

set fp [open "test.tcl" r] 
set new_file [open "final.tcl" w+] 
while {![eof $fp]} { 
    get $fp line 
    if $line {$'{'} { 
    puts $new_file '\n' 
    } 
} 

aber seine nicht funktioniert und manchmal gibt es Fehler "Invalid Bareword". Kannst du mir bitte helfen?

+0

Sie meinen wahrscheinlich bekommt statt zu bekommen, die, wenn der Befehl verstümmelt ist, und Sie drucken nicht die Textzeile. Außerdem muss die Datei geleert oder geschlossen werden, bevor Änderungen angezeigt werden. –

+0

Ihr Code wird (wahrscheinlich) versuchen, jede Zeile als Ausdruck zu bewerten. Es ist unwahrscheinlich, dass dies etwas ist, was Sie wollen. –

Antwort

1

Wie wäre es

set fp [open test.tcl] 
set new_file [open final.tcl w+] 
while {[gets $fp line] >= 0} { 
    if {[regexp {\{$} $line]} { 
     puts $new_file $line\n 
    } else { 
     puts $new_file $line 
    } 
} 
close $fp 
close $new_file 

?

Dokumentation: close, gets, open, puts, Syntax of Tcl regular expressions, regexp, set, while

+0

Werke. Danke und was, wenn ich zu allen weiteren Zeilen schreiben möchte, außer ich bekomme '}'. Ich hoffe, es macht Ihnen nichts aus, mir wieder zu helfen. –

+0

@DhruvPaul: Entschuldigung, aber nein. Prettyprinting ist schwieriger als es aussieht und kann ziemlich frustrierend sein. Zunächst einmal werden reguläre Ausdrücke auf lange Sicht nicht viel helfen: Sie müssen den Quellcode Zeichen für Zeichen durchlaufen und Methoden entwickeln, um zwischen verschiedenen Arten der Klammerverwendung zu unterscheiden. Sie können viel vom Experimentieren mit dem schönen Druck lernen, aber das ist nur die äußerste Spitze des Eisbergs und wenn wir weitermachen, wird diese Antwort zu einem langen Tutorial. Ich könnte weitere Fragen beantworten, wenn Sie sie veröffentlichen, aber ich werde Sie nicht durchgehen. Nochmals Entschuldigung. –