Обработка строк в Tcl/tk (помогите начать)

Модератор: Модераторы разделов

Ответить
Paul_ls
Сообщения: 154

Обработка строк в Tcl/tk

Сообщение Paul_ls »

Начал изучать Тсl/Тк, чего-то не могу сойти с тормоза. То ли это на столько просто, что об этом не пишут, толи на столько сложно, что умалчивают.

Есть строка:

Код: Выделить всё

set a 1234;


как обратиться к каждому элементу по номеру?
как удалить элемент из строки (хотя бы последний)?
как вставить элемент в середину строки?
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Обработка строк в Tcl/tk

Сообщение gmorgunov »

Paul_ls
Привет. Тоже изучаю Tcl/Tk. Вот ответы на ваши вопросы:

Код: Выделить всё

#!/usr/bin/tclsh

set a 1234
# 1) доступ к злементам ( отсчет с 0 )
puts [string index $a 0]
puts [string range $a 1 2]

# 2) удаляем последний
puts [string replace $a 3 3]

# 3) вставляем W после 1-го элемента ( отсчет с 0)
set sub [string index $a 1]W
puts $sub;# распечатаем подстроку
puts [string replace $a 1 1 $sub]

Хорошая книга(почти 1200 страниц) Брэнт Уэлш, Кент Джонс "Практическое программирование на Tcl и Tk".
Книга есть на www.ozon.ru. Язык не так прост, как кажется(имхо). :)
Спасибо сказали:
Аватара пользователя
korisk
Сообщения: 205
ОС: Xubuntu

Re: Обработка строк в Tcl/tk

Сообщение korisk »

Если позволите, вопрос в тему.

Как заставить запуститься тиклевый скрипт в фоне?

Удач.
Registerd Linux user #486684 at http://counter.li.org/
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Обработка строк в Tcl/tk

Сообщение gmorgunov »

korisk
Можно так:
Создаем скрипт while.tcl:

Код: Выделить всё

#!/usr/bin/tclsh
# бесконечный цикл
while { 1>0 } {}

Создаем скрипт запуска pusk.tcl:

Код: Выделить всё

#!/usr/bin/tclsh
# пробелы обязательны !
puts [exec /home/mike/while.tcl &]
# или puts [exec -keepnewline /home/mike/while.tcl &]

Запускаем: ./pusk.tcl
Проверяем: ps -e. Скрипт while.tcl - в таблице процессов. Если надо - убиваем.
Посмотреть можно у Брента Уэлша(упоминался выше) стр. 188 :)
Спасибо сказали:
Paul_ls
Сообщения: 154

Re: Обработка строк в Tcl/tk

Сообщение Paul_ls »

gmorgunov писал(а):
24.12.2008 21:55
Paul_ls
Привет. Тоже изучаю Tcl/Tk. Вот ответы на ваши вопросы:
...

Спасибо!

gmorgunov писал(а):
24.12.2008 21:55
Paul_ls
Хорошая книга(почти 1200 страниц) Брэнт Уэлш, Кент Джонс "Практическое программирование на Tcl и Tk".
Книга есть на www.ozon.ru. Язык не так прост, как кажется(имхо). :)


Эту книгу я знаю, облазил весь инет в поиске эл. версии, но, пока не нашёл. Собственно именно поэтому и задаю такие вопросы :)

Вообще, Tcl/tk меня привлёк (наверное как и многих) простотой создания граф. приложений. Действительно, язык не так прост сам по себе, но _очень_ интересный. По духу, мне чем-то напомнил Форт.
Моя цель сейчас - построить арифметический калькулятор, который может считать в любой системе счисления от 2 до 20.
В связи с этим нужно реализовать 2 алгоритма:
- Перевод чисел из системы в систему.
- Сложение и вычитание в разных системах.
Конечно, для решения поставленной задачи хватит и 1-го алгоритма (считать можно и в десятичной системе штатными средствами), но хочется всё же сделать и второй алгоритм.
Спасибо сказали:
gmorgunov
Сообщения: 27
ОС: linux mandriva2007

Re: Обработка строк в Tcl/tk

Сообщение gmorgunov »

Paul_ls
Месяца 2 назад тоже искал эту книгу в инете, тоже не нашел. :) Сейчас уже заказал/получил. Цена руб./стр. для такой книги
по-моему вполне приемлима. Книга действительно хороша ! Но ... После 200-ой страницы у меня начались пробуксовки :happy:
Уже заставляю себя садиться и писать. Может синтаксис виноват, может я, не знаю. Параллельно смотрю Python.
Он идет значительно легче. Может вам посмотреть в сторону питона ? Там многое уже реализовано, комьюнити большое, опять же
язык востребован. Кстати у них(тикль-питон) одна и та же граф. библиотека. Tk-Tkinter. Есть привязки ко всему, что движется. :) (Java,Qt,GTK... ).
Спасибо сказали:
Аватара пользователя
korisk
Сообщения: 205
ОС: Xubuntu

Re: Обработка строк в Tcl/tk

Сообщение korisk »

gmorgunov писал(а):
25.12.2008 01:09
Запускаем: ./pusk.tcl
Проверяем: ps -e. Скрипт while.tcl - в таблице процессов. Если надо - убиваем.
Посмотреть можно у Брента Уэлша(упоминался выше) стр. 188 :)


Спасибо )
Registerd Linux user #486684 at http://counter.li.org/
Спасибо сказали:
trunov
Сообщения: 1
ОС: linux

Re: Обработка строк в Tcl/tk

Сообщение trunov »

Начинаю изучать Tcl . Нашел пример поиска файлов но он почему-то не работает.Код вот такой

Код: Выделить всё

set files [list]
foreach dir [glob -types d *] {
set files [concat $files [glob -dir $dir *.tcl]]
}
Но выдает сообщение что файлов с расширен. tcl не найдено. впечатление такое, что тело цикла выполняется один раз, а у меня в этой первой директории таких файлов то и нет.
Может кто подскажет куда смотреть?
Последний раз редактировалось Bizdelnick 31.03.2023 12:16, всего редактировалось 1 раз.
Причина: тег code
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2655
ОС: Gentoo

Re: Обработка строк в Tcl/tk

Сообщение ormorph »

trunov писал:
31.03.2023 10:42
Но выдает сообщение что файлов с расширен. tcl не найдено. впечатление такое, что тело цикла выполняется один раз, а у меня в этой первой директории таких файлов то и нет.
Не использую tcl, проверил всё тут правильно просто отсутствует в текущем каталоге другой каталог с файлами c расширением *.tcl. Тут всё верно ошибка и должна появляться, но вот если нужно что бы программа не завершала работу, если в текущем каталоге нет каталогов и файлов .tcl, то нужно использовать try.

Код: Выделить всё

#!/usr/bin/tclsh

set files [list]
try {
	foreach dir [glob -types d *] {
		set files [concat $files [glob -dir $dir *.tcl]]
	}
} trap {} {msg} { 
	puts "Error: $msg" 
}
К такому решению придет любой кто ранее писал на других языках и использовал исключения. Тут просто в цикле foreach прогоняются все каталоги в текущей директории и по очереди проверяются на наличие файлов *.tcl, если в каком то каталоге отсутствует данный файл, то завершается ошибкой.
Если вывод ошибки не нужен, то можно удалить конструкцию trap.
Также есть ещё catch, для проверки ошибок, можно использовать с оператором if вместо try.

Код: Выделить всё

#!/usr/bin/tclsh

set files [list]
try {
	foreach dir [glob -types d *] {
		if {[catch { set files [concat $files [glob -dir $dir *.tcl]] } result] == 1} {puts "Error: $result"}
	}
} trap {} {msg} { 
	puts "Error: $msg" 
}
Спасибо сказали:
Ответить