Извлечь всю строку и выбранную строку.
all_text <- svalue(textwin, index=0)
selected_text <- svalue(textwin, index=0, drop = TRUE)
Затем найдите индекс выбранной подстроки с использованием regexpr
.
rx_match <- regexpr(selected_text, all_text, fixed = TRUE)
Замените эту подстроку чем-нибудь другим.
substring(
all_text,
rx_match,
rx_match + attr(rx_match, "match.length") - 1
) <- "monkey"
Обновление текстового поля.
svalue(textwin) <- all_text
Plan B: манипулировать возвращаемое значение svalue
с index = 1
. Это почти правильно, но я думаю, что есть ошибка в gWidgets
, которая мешает ему работать в целом.
# Get the index of the lines/character positions to start and finish
i <- format(svalue(textwin, index = 1, drop = TRUE), digits = 3)
i <- sapply(strsplit(i, "\\."), as.numeric)
# Get all the text as a character vector
all_text <- svalue(textwin, index=0)
all_text <- strsplit(all_text, "\n")[[1]]
# Replace the selected portion
replacement <- "monkey"
if(i[1, 1] == i[1, 2])
{
svalue(textwin) <- substring(all_text[i[1, 1]], i[2, 1], i[2, 2])
} else
{
all_text[i[1, 1]] <- paste0(
substring(all_text[i[1, 1]], 1, i[2, 1]),
replacement,
substring(all_text[i[1, 2]], 1, i[2, 2])
)
svalue(textwin) <- all_text[-((i[1, 1] + 1):(i[1, 2]))]
}
Большая проблема с вызовом format
, который превращает число индексов в строки. Он не очень хорошо работает с позициями в двухзначных или двузначных позициях. Я уверен, что это ошибка в getMethod(.svalue, signature("gTexttcltk", "guiWidgetsToolkittcltk"))
(хотя могут быть проблемы и в других инструментах).
Но RegExp не знает положения курсора, это работает только в том случае, если извлеченный шаблон уникален или первый случай; else (с повторяющимся рисунком) мы не можем решить, какой шаблон выбрать. Иначе говоря, это не сработает, если я буду отмечать последние «ссадины» в этом предложении: «Верблюд пасутся в пустыне, пасутся и пасутся». Я бы получил: «Верблюжьей обезьяны в пустыне и ссадины и пасти .'' вместо '' Верблюд пасутся в пустыне и ссадины и обезьяны .'' – petermeissner
Ха, это хорошо - это работает только для меня с tcltk, а не с GTK, но я не против - но это *** *** * !? ") § * переформатирование' '1.1'' и' '1.10'' в' '1.1'' (первый символ первой строки) делает его бесполезным на данный момент, верно ?. - - спасибо за усилие – petermeissner
@marvin_dpr Да, он сломан. Отправьте отчет об ошибке Джону Верцани. Он хорошо разбирается в вещах. Вы можете получить его контактные данные из 'packageDescription (« gWidgets », fields =« Maintainer »)'. –