<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Подстановка переменных TCL при использовании SQLite</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4061.html</link>
    <description>День добрый,&lt;br&gt;&lt;br&gt;Странная проблема. Судите сами...&lt;br&gt;&lt;br&gt;Иначально: Система FreeBSD 4.9. Из портов поставлен TCL8.3 и &lt;br&gt;библиотека  Sqlite 2.8.3 c tcl wrappers.&lt;br&gt;Пришется скрипт для учета времени работы клиентов в интернете.&lt;br&gt;&lt;br&gt;Исходный текст (err.tcl):&lt;br&gt;&lt;br&gt;#!/usr/local/bin/tclsh8.4&lt;br&gt;&lt;br&gt;package require sqlite;&lt;br&gt;set namedb &quot;/usr/local/Bscript/session.db&quot;;&lt;br&gt;&lt;br&gt;set IFNAME &#091;lindex $argv 0&#093;;    # Intarface name&lt;br&gt;set AUTHNAME &#091;lindex $argv 1&#093;;  # Authname &lt;br&gt;set STARTTIME &#091;clock seconds&#093;;   # Current time&lt;br&gt;&lt;br&gt;sqlite sesdb $namedb;&lt;br&gt;&lt;br&gt;sesdb eval &#123;INSERT INTO sestbl (authname, starttime, stoptime, ifname, traffic) VALUES ( $AUTHNAME, $STARTTIME , $STARTTIME, $IFNAME, 0)&#125;;&lt;br&gt;&lt;br&gt;sesdb close;&lt;br&gt;&lt;br&gt;При запуске скрипта:&lt;br&gt;$./err.tcl ccc vvv&lt;br&gt;&lt;br&gt;Получаем следующее:&lt;br&gt;&lt;br&gt;unrecognized token: &quot;$&quot;&lt;br&gt;    while executing&lt;br&gt;&quot;sesdb eval &#123;INSERT INTO sestbl (authname, starttime, stoptime, ifname, traffic)  VALUES ( $AUTHNAME, $STARTTIME , $STARTTIME, $IFNAME, 0)&#125;&quot;&lt;br&gt;    (file &quot;./err.tcl&quot; line 12)&lt;br&gt;&lt;br&gt;Такое очущение что tcl в конкретном случае отказывае</description>

<item>
    <title>Подстановка переменных TCL при использовании SQLite (Антон)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4061.html#3</link>
    <pubDate>Wed, 06 Jul 2011 06:35:14 GMT</pubDate>
    <description>Привет.&lt;br&gt;Столкнулся со схожей проблемой в случае замены подстрок XXKADRXX на переменную $coor (определена ранее) в текстовых файлах .svrf&lt;br&gt;&lt;br&gt;set file_list &#091;glob *.svrf&#093;&lt;br&gt;&lt;br&gt;foreach F $file_list &#123;&lt;br&gt;&lt;br&gt;set infile &#091;open $F&#093; &lt;br&gt;set contents &#091;read $infile&#093; &lt;br&gt;close $infile&lt;br&gt;&lt;br&gt;set contents &#091;string map &#123;XXKADRXX &quot;$coor&quot;&#125; $contents&#093; &lt;br&gt;set outfile &#091;open $F w&#093; &lt;br&gt;puts -nonewline $outfile $contents &lt;br&gt;close $outfile &lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;Буду очень благодарен за мнения)&lt;br&gt;</description>
</item>

<item>
    <title>Подстановка переменных TCL при использовании SQLite (northbear)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4061.html#2</link>
    <pubDate>Mon, 14 Mar 2005 09:27:39 GMT</pubDate>
    <description>&amp;gt;Все очень просто - TCL не производит подстановку переменныых в блоке обрамленном &lt;br&gt;&amp;gt;&#123;&#125; - этот блок просто считается списком констант. &lt;br&gt;&amp;gt;Но как только вы обрамляете его еще и кавычками &quot;&quot; подстановка происходит &lt;br&gt;&amp;gt;- теперь это законная строка ;-) &lt;br&gt;&amp;gt;В Вашем случае правильнее сделать так (замена &#123;&#125; на &quot;&quot;): &lt;br&gt;&amp;gt;sesdb eval &quot;INSERT INTO sestbl (authname, starttime, stoptime, ifname, traffic) VALUES ( &lt;br&gt;&amp;gt;$AUTHNAME, $STARTTIME , $STARTTIME, $IFNAME, 0)&quot; &lt;br&gt;&amp;gt;тогда будет все правильно - tcl произведет подстановки и передаст в sqlite &lt;br&gt;&amp;gt;правильную строку. &lt;br&gt;&lt;br&gt;Хм... Действительно. Сие писалось с оглядкой на примеры, приведенные на &lt;br&gt;www.sqlite.org, а там у них везде используются именно фигурные скобки. &lt;br&gt;Мне казалось они должны знать толк в TCL, тем более, что tcl wrappers&lt;br&gt;у них идет вместе с сырцами.&lt;br&gt;&lt;br&gt;&amp;gt;P.S. Не ставьте ; в конце каждой строки скрипта - эт необязательно &lt;br&gt;&amp;gt;;-) &lt;br&gt;&lt;br&gt;Ну, IMHO, лучше перебдеть, чем недобдеть. С синтаксисом еще &lt;br&gt;не освоился толком, по этому перестраховываюсь.&lt;br&gt;</description>
</item>

<item>
    <title>Подстановка переменных TCL при использовании SQLite (MaximKuznetsov)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/4061.html#1</link>
    <pubDate>Mon, 14 Mar 2005 02:32:11 GMT</pubDate>
    <description>Все очень просто - TCL не производит подстановку переменныых в блоке обрамленном &#123;&#125; - этот блок просто считается списком констант.&lt;br&gt;Но как только вы обрамляете его еще и кавычками &quot;&quot; подстановка происходит - теперь это законная строка ;-)&lt;br&gt;В Вашем случае правильнее сделать так (замена &#123;&#125; на &quot;&quot;):&lt;br&gt;sesdb eval &quot;INSERT INTO sestbl (authname, starttime, stoptime, ifname, traffic) VALUES ( $AUTHNAME, $STARTTIME , $STARTTIME, $IFNAME, 0)&quot;&lt;br&gt;тогда будет все правильно - tcl произведет подстановки и передаст в sqlite правильную строку.&lt;br&gt;P.S. Не ставьте ; в конце каждой строки скрипта - эт необязательно ;-)&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
