Паажди! Буфер это дополнительная опция. В основном переводит выделением с экрана с зажатыми Win+Alt (только ими). Почитай в "О программе". Спасибо за внимание к программе!
Рад, что кому-то она понравилась. Программа по сути просто компиляция двух сервисов, но она столько лично мне пользы приносит, что не могу не поделиться :)
Скачал, бегло посмотрел. Программа классная, особенно облегченная Ёлочка. Пожалуй, я бы свою не писал, если бы её видел: почти полные аналоги. Вот их различия, которые я увидел сразу:
Занять горячую клавишу Ё это слишком жестко. Хотя можно Alt+ или Ctrl+, но всё ещё не идеально (по моему скромному мнению)
Перевод более гладкий. Вероятно, из-за лишних переносов строк у меня. Нужно поправить :)
Чуть хуже, чем у меня, интеграция с программами: он делает скрин, для выделения области в нем, из-за чего программа с которой переводят, теряет фокус. Присутствуют нажатия не на хоткей: это и дольше, и мешает игровому процессу.
Красивое, настраиваемое окошко. Перевод можно выделить и скопировать. У меня это нужно сделать методом выделения области, а потом нажать в трее Перевести. Наверное, нужно поменять на копирование сразу перевода в буфер.
Я как-то не так сделал выделение по скрину :) Оно у меня немного тормозит
Для новелл очевидно более удобно: можно настроить область для перевода и не дергать мышкой.
Мелкий текст обе программы одинаково хорошо видят.
Нет функции перевода по тексту из компонента WinAPI (у меня это Win+Alt и после +Ctrl). Не то чтобы это минус, программа то по переводу изображений. Но в некоторых, преимущественно старых, программах, где это можно сделать, взять для перевода текст выглядит логичней.
У меня можно отдельно перевести и/или распознать текст и картинку по меню в трее
На счет перезапуска программы для освобождения памяти. Это конечно не здорово, но, я не знаю как решить эту проблему для сторонней библиотеки. Можно запускать её отдельным процессом или отдельным доменом попробовать и их перезапускать, но это примерно так же коряво будет, и в таком маленьком проекте только лишнее усложнение. Может быть кто посоветует что ещё можно сделать? Подобная проблема вообще часто мне встречается.
Было желание сделать локализацию и выбор с какого в какой язык переводить. Но не понятно будет ли это реально востребовано, самому мне это не нужно. Ну и плюс размер данных для распознания в несколько метров для каждого языка раздует программу :)
Наверное действительно лучше будет убрать переносы строк. Вот только думаю, не испортит ли это перевод, там где нет точек, а фразы разнесены графически. И не поломает ли форматирование текста, хоть это и наименее важно
create table #t(s varchar(12))
insert into #t values('12')
insert into #t values('24')
insert into #t values('36')
insert into #t values('48')
insert into #t values('60')
;with
t1 as
(select s, row_number() over(order by s) rn
from #t
),
t2 as
(
select CAST(s as varchar(max)) [s], 2 [rn] from t1 where t1.rn = 1
union all
select t2.s + ',' + t1.s, t2.rn + 1
from t1 join t2 on t1.rn = t2.rn
)
select s from t2
where rn = (select MAX(rn) from t2)
Работает довольно быстро, хотя я не сравнивал с Вашими методами
Сейчас покрутил процедуры то так, то эдак — действительно в конструкции insert… exec нет разницы, есть ли перечисление. Однако во всех других случаях, я стараюсь перечислять поля при вставке в таблицу, даже если SQL позволяет этого не делать. Например, кто-то может добавить или поменять в таблице колонки местами и не везде, где она используется, скорректировать. Не раз такое бывало, особенно со * :) Единственное исключение, если данный тип таблицы описан в этом же скрипте/процедуре.
Можно использовать и табличную функцию и конструкцию insert… exec, но только если нам нужно вернуть только одну таблицу в качестве результата. К тому же, kolu4iy:
P.S. Табличные функции — удобно. Но по доброй традиции, в MS SQL есть серьезные ограничения (по сравнению с хранимыми процедурами) на использование функций.
Мне в таких случаях всегда хочется спросить: а зачем? Нельзя ли перестроить задачу таким образом, чтобы это перестало быть нужным?
Ну и да, почему просто не использовать табличную функцию?
Это не всегда возможно, по крайне мере, в приложениях, где бизнес-логика в SQL. Например, у нас есть два отчета, для которых сбор данных одинаков и он достаточно громоздкий (например ~500 строк кода), а отличаются они только группировкой в конце. В таких случаях и нужно выносить общую часть в отдельную процедуру.
Спасибо за напоминание про типы, как с 2005 перешли, так их и не использовали. :) Позже поправлю пост.
В табличные переменные нельзя вставить данные внутри процедуры, однако INSERT...EXEC вполне работает. Зачастую достаточно и их. Когда недостаточно — используем следующий трик:
-- Создаем таблицу
SELECT *
INTO #Docs
FROM @Docs
… и вот у нас таблица нужной нам структуры.
Насколько я знаю, нельзя вставлять данные в переменные табличного типа переданные процедуре в качестве параметров, т.к. они readonly.
Паажди!
Буфер это дополнительная опция. В основном переводит выделением с экрана с зажатыми Win+Alt (только ими). Почитай в "О программе".
Спасибо за внимание к программе!
Спасибо за ссылку
Рад, что кому-то она понравилась. Программа по сути просто компиляция двух сервисов, но она столько лично мне пользы приносит, что не могу не поделиться :)
UPD 27.11.2022: Добавил раздел Переносы строк, обновил картинку
Воот! Я знал, что плохо искал, спасибо! :)
Скачал, бегло посмотрел. Программа классная, особенно облегченная Ёлочка. Пожалуй, я бы свою не писал, если бы её видел: почти полные аналоги. Вот их различия, которые я увидел сразу:
Занять горячую клавишу Ё это слишком жестко. Хотя можно Alt+ или Ctrl+, но всё ещё не идеально (по моему скромному мнению)
Перевод более гладкий. Вероятно, из-за лишних переносов строк у меня. Нужно поправить :)
Чуть хуже, чем у меня, интеграция с программами: он делает скрин, для выделения области в нем, из-за чего программа с которой переводят, теряет фокус. Присутствуют нажатия не на хоткей: это и дольше, и мешает игровому процессу.
Красивое, настраиваемое окошко. Перевод можно выделить и скопировать. У меня это нужно сделать методом выделения области, а потом нажать в трее Перевести. Наверное, нужно поменять на копирование сразу перевода в буфер.
Я как-то не так сделал выделение по скрину :) Оно у меня немного тормозит
Для новелл очевидно более удобно: можно настроить область для перевода и не дергать мышкой.
Мелкий текст обе программы одинаково хорошо видят.
Нет функции перевода по тексту из компонента WinAPI (у меня это Win+Alt и после +Ctrl). Не то чтобы это минус, программа то по переводу изображений. Но в некоторых, преимущественно старых, программах, где это можно сделать, взять для перевода текст выглядит логичней.
У меня можно отдельно перевести и/или распознать текст и картинку по меню в трее
На счет перезапуска программы для освобождения памяти. Это конечно не здорово, но, я не знаю как решить эту проблему для сторонней библиотеки. Можно запускать её отдельным процессом или отдельным доменом попробовать и их перезапускать, но это примерно так же коряво будет, и в таком маленьком проекте только лишнее усложнение.
Может быть кто посоветует что ещё можно сделать? Подобная проблема вообще часто мне встречается.
Было желание сделать локализацию и выбор с какого в какой язык переводить. Но не понятно будет ли это реально востребовано, самому мне это не нужно. Ну и плюс размер данных для распознания в несколько метров для каждого языка раздует программу :)
Наверное действительно лучше будет убрать переносы строк.
Вот только думаю, не испортит ли это перевод, там где нет точек, а фразы разнесены графически. И не поломает ли форматирование текста, хоть это и наименее важно
Думаю действительно будет лучше, если убрать переносы строк...
Нет, объединяю в единый текст. На перевод могут влиять переносы строк
Всё как есть в самом гугл переводчике
Вот текст в виде текста:
Okay—now we're going
to check your reflexes.
Вероятно у вас больше 100 значений. Допишите в конец снятие ограничение рекурсии:
option (maxrecursion 0)
Работает довольно быстро, хотя я не сравнивал с Вашими методами
Я подумал, что
Предлагалось разместить внутри вызываемой процедуры :)
Можно использовать и табличную функцию и конструкцию insert… exec, но только если нам нужно вернуть только одну таблицу в качестве результата. К тому же, kolu4iy:
Это не всегда возможно, по крайне мере, в приложениях, где бизнес-логика в SQL. Например, у нас есть два отчета, для которых сбор данных одинаков и он достаточно громоздкий (например ~500 строк кода), а отличаются они только группировкой в конце. В таких случаях и нужно выносить общую часть в отдельную процедуру.
Насколько я знаю, нельзя вставлять данные в переменные табличного типа переданные процедуре в качестве параметров, т.к. они readonly.