Check list and file reading.
I have written a code to create checklist to read Id and names from a text file.
{BEGIN LEGEND}
Entity # Title
1 abc
2 efs
3 afdsf
4 xzcH
5 sdsafd
6 wqerwf
During file reading I want to skip first two lines and take lines from 3 to 10. What change should be made in the code?
Similarly, in the checklist, when I tick and press OK, the corresponding ID should be stored in a variable. WHat should I do?
The code is given below!!!!!!!!!!!!!!!!
$w hide apply;
set recess [$w recess]
proc ::texample::OnSelect {W S c} {
puts [info level 0]
}
hwtk::selectlist $recess.sl -stripes 1 -selectmode multiple -selectcommand '::texample::OnSelect %W %S %c'
pack $recess.sl -fill both -expand true;
$recess.sl columnadd id -text Id
$recess.sl columnadd entities -text 'Section Name'
#####################
set fileName [tk_getOpenFile]
set fp [open $fileName r]
set ::lines [split [read $fp] '\n']
set i 0
foreach line $::lines {
set ID [string range $line 7 8]
set NM [string range $line 14 20]
$recess.sl rowadd row$i -values
incr i
}
close $fp;
}
$w post
Answers
-
Hi,
If you want to ignore the first 2 lines, you just write 'gets' twice.
Example:
set fh [open [tk_getOpenFile] r];
gets $fh null;
gets $fh null;
while {! [eof $fh]} {
gets $fh cl;
puts $cl;
}
close $fhThanks,
Imoto0 -
Altair Forum User said:
Hi,
If you want to ignore the first 2 lines, you just write 'gets' twice.
Example:
set fh [open [tk_getOpenFile] r];
gets $fh null;
gets $fh null;
while {! [eof $fh]} {
gets $fh cl;
puts $cl;
}
close $fhThanks,
Imotoi want to read from 3rd to 41st line only.
0 -
Altair Forum User said:
i want to read from 3rd to 41st line only.
For each line, make a counter. So your code looks like
if {$counter >=3 && $counter <=41} { # do something }
0 -
Altair Forum User said:
For each line, make a counter. So your code looks like
if {$counter >=3 && $counter <=41} { # do something }
How to make a counter using my code.
0 -
Just replace the 'while' to 'for'.
set fh [open [tk_getOpenFile] r];
gets $fh null;
gets $fh null;
for {set i 0} {$i < 39} {incr i} {
gets $fh cl;
puts $cl;
}
close $fh
0 -
Altair Forum User said:
How to make a counter using my code.
set i 1 foreach line $::lines { if {$i>=3 && $i<=41} { #do something with $line } incr i }
0 -
-
@tinh Please help for last Query
0 -
Hi,
define selectcommand as below
proc ::texample::OnSelect {W S c} {
set IDs {}
foreach row $S {
lappend IDs [dict get [$W rowcget $row -values] id]
}
puts 'Selected IDs=[set ::var_SelectedIDs $IDs]'
}
0 -
@tinh can you tell me how can I create a similar window outside hM. What will be the change? Please help me.
Thanks for your kind support.
0 -
Hi Jouher,
You need to load hwtk package by these commands:
set AltairHome 'C:/Altair/2017'
if {[file join $AltairHome hw tcl] ni $::auto_path]} {
lappend ::auto_path [file join $AltairHome hw tcl]; #because hwtk needs some packages in this
lappend ::auto_path [file join $AltairHome hw tcl hwtk];
}
package require hwtk
source [file join $AltairHome hw tcl hwtk init.tbc]
#then you can create its widgets:
hwtk::selectlist .sl ...
...
0 -
Altair Forum User said:
Hi Jouher,
You need to load hwtk package by these commands:
set AltairHome 'C:/Altair/2017'
if {[file join $AltairHome hw tcl] ni $::auto_path]} {
lappend ::auto_path [file join $AltairHome hw tcl]; #because hwtk needs some packages in this
lappend ::auto_path [file join $AltairHome hw tcl hwtk];
}
package require hwtk
source [file join $AltairHome hw tcl hwtk init.tbc]
#then you can create its widgets:
hwtk::selectlist .sl ...
...
I did not understand set altair home. Please explain. While I run as batch using wish tool, its showing cant run packages.
0 -
@tinh When I execute this command
'source [file join $AltairHome hw tcl hwtk init.tbc]' Its throwing error.
can't rename to 'xml::tdomparser': command already exists0 -
Hi, just ignore that command!
I use v13.0 so i need it.
0 -
@Tinh, It works.
could you tell me how I will add to my selectlist a filter option. Like, if I press 'A' and enter 'ok', all names with A will come.
0