Ich habe eine TCL UI mit ein paar Eingaben entwickelt, die vom Benutzer eingegeben werden müssen. Der erste Benutzer wird alle Dateien Pfad eingeben, aber dann wollte ich die benutzerdefinierten Einträge in einer Datei speichern und dann später laden. Speichern ist in Ordnung ... Ich denke, alle diese Variablen in einer Datei speichern, aber das Laden von einer Datei benötigt eine Zuordnung, wie es gemacht werden kann? Jedes Beispiel wird hilfreich sein SaveTCL Eingabe Eintrag in einer Datei und später laden
Antwort
Ich erreichte dies durch folgenden Code, obwohl nicht sehr optimiert. Zuerst speichere ich eine Eingabedatei mit Variablenwerten und lese sie dann in der gleichen Reihenfolge.
proc save_input_entries {} {
global ENTRYfilename ENTRYfilename2 ENTRYfilename3 ENTRYfilename4 ENTRYfilename5 ENTRYfilename6 ENTRYfilename7 ENTRYfilename8 ENTRYfilename9 ENTRYfilename10 ENTRYfilename11 ENTRYfilename12 ENTRYfilename13 ENTRYfilename14 ENTRYfilename15 ENTRYfilename16 ENTRYfilename17 topdir corner_dir corner_name
set filename Input_entries.txt
set fileId [open $filename "w"]
puts $fileId $ENTRYfilename
puts $fileId $ENTRYfilename3
puts $fileId $ENTRYfilename4
puts $fileId $ENTRYfilename5
puts $fileId $ENTRYfilename7
puts $fileId $ENTRYfilename8
puts $fileId $ENTRYfilename15
puts $fileId $ENTRYfilename14
puts $fileId $ENTRYfilename16
puts $fileId $ENTRYfilename17
close $fileId
}
proc load_input_entries {} {
global ENTRYfilename ENTRYfilename2 ENTRYfilename3 ENTRYfilename4 ENTRYfilename5 ENTRYfilename6 ENTRYfilename7 ENTRYfilename8 ENTRYfilename9 ENTRYfilename10 ENTRYfilename11 ENTRYfilename12 ENTRYfilename13 ENTRYfilename14 ENTRYfilename15 ENTRYfilename16 ENTRYfilename17
set fp [open Input_entries.txt]
set stuff [read $fp]
set lines [split $stuff "\n"]
set ENTRYfilename [lindex $lines 0]
set ENTRYfilename3 [lindex $lines 1]
set ENTRYfilename4 [lindex $lines 2]
set ENTRYfilename5 [lindex $lines 3]
set ENTRYfilename7 [lindex $lines 4]
set ENTRYfilename8 [lindex $lines 5]
set ENTRYfilename15 [lindex $lines 6]
set ENTRYfilename14 [lindex $lines 7]
set ENTRYfilename16 [lindex $lines 8]
set ENTRYfilename17 [lindex $lines 9]
}
Wenn Sie die Flexibilität haben, um das Format der Datei zu definieren, wo der Inhalt gespeichert wird, würde ich empfehlen, den Inhalt in einer Weise zu speichern, so dass das Lesen/Karten, um die Schlüssel zu schreiben und um unabhängig ist. Dadurch können Sie Ihre Benutzeroberfläche aktualisieren, um Eingabefelder hinzuzufügen oder zu löschen, ohne sich Gedanken über die Reihenfolge machen zu müssen, in der sie in der Datei erfasst wurden.
Zum Beispiel Dateiformat etwas dies sein könnte:
Top Directory: <value>
LEF File: <value>
.
.
.
Sie werden sorgfältig wählen müssen, um eine Trennlinie zwischen dem Schlüssel (Label) und dem Wert.
Wenn dies in TCL immer verwendet wird, können Sie es einfacher machen, indem Sie ein Array in einer Datei speichern. Dies wird auch schneller, wenn Sie die Datei laden, um die Einträge in der Benutzeroberfläche zu füllen. Beispielsweise könnte Ihr Dateiformat etwas davon sein:
set inputFields("Top Directory") <value>
set inputFields("LEF File") <value>
Fügen Sie ein Beispiel des Codes hinzu, den Sie zum Speichern der Variablen verwenden. –