Ru-Board.club
← Вернуться в раздел «Программы»

» Autoplay Media Studio

Автор: Zloy_Gelud
Дата сообщения: 01.11.2011 13:29
dallas page

Измененный код, с учетом рекомендаций tavria2 для работы с кириллицей:

Код: local tAPK = File.Find("C:\\MyDir", "*.apk", false, false, nil, nil);
if tAPK then
os.setlocale("Russian_Russia.1251")
local tSplit, sName
for i, sAPK in pairs(tAPK) do
tSplit = String.SplitPath(sAPK);
sName = String.Replace(tSplit.Filename, " ", "_", false);
sName = String.Upper(String.Left(sName, 1))..String.Mid(sName, 2, -1);
File.Rename(sAPK, tSplit.Drive..tSplit.Folder..sName..tSplit.Extension);
end
os.setlocale("C")
end
Автор: tavria2
Дата сообщения: 01.11.2011 13:35
Zloy_Gelud

Цитата:
os.setlocale("C")

А зачем возвращаться к локали Си, которая поддерживает только английские символы?
Автор: Zloy_Gelud
Дата сообщения: 01.11.2011 13:43
tavria2

Цитата:
А зачем возвращаться к английской локали (Си)?

Для перестраховки Считаю, что необходимо вернуться к той локали, которая была до установки новой. Ведь есть же разница в обработке скриптов в разных локалях. Например, в русской локали - разделитель в десятичных числах "," (запятая), а в английской - "." (точка), т.е. могут возникуть некие проблемы..
Автор: dallas page
Дата сообщения: 01.11.2011 14:01
Zloy_Gelud Спасибо
Автор: tavria2
Дата сообщения: 01.11.2011 14:07
Zloy_Gelud

Цитата:
Для перестраховки

Имхо лишнее это.

Локаль лучше устанавливать не русскую, а соответствующую локали установленной в системе, т.е.: os.setlocale("") ;
чтобы и у иностранцев не возникало проблем с нашим проектом.

Автор: Zloy_Gelud
Дата сообщения: 01.11.2011 14:07
dallas page
Пожалста.


tavria2

Цитата:
Интересно, показывай.

Лень код писать.. вообщем, смысл сводится к тому, что буква переводится в ASCII код, добавляется определенное число (разность между регистрами) к этому коду, а затем обратно конвертируем полученное число в Char. Через *опу конечно, но работало

Добавлено:
tavria2

Цитата:
Локаль лучше устанавливать не русскую, а соответствующую локали установленной в системе, т.е.: os.setlocale("") ;
чтобы и у иностранцев не возникало проблем с нашим проектом.

Ну, dallas page я думаю видит наше обсуждение и сделает так, как лучше.
Автор: tavria2
Дата сообщения: 01.11.2011 14:14
Zloy_Gelud

Цитата:
смысл сводится к тому, что буква переводится в ASCII код...

Спасибо, этот способ известный. Я еще во времена DOS его использовал
Он сравнительно громоздкий и медленный.
Автор: Stalkersof
Дата сообщения: 01.11.2011 14:23
Zloy_Gelud tavria2
Вы уж простите но если в названии не будет пробела, то заглавная буква не изменится.
Автор: tavria2
Дата сообщения: 01.11.2011 14:33
Stalkersof
Удалено, погорячился.
Автор: Stalkersof
Дата сообщения: 01.11.2011 14:46
tavria2
Да должно работать но не работает.
Самое главное в проверочном месандже все правильно показывает. Но не сохраняет хрень какая то. Может это только у меня глюк такой.
Автор: tavria2
Дата сообщения: 01.11.2011 14:57
Stalkersof
Код Zloy_Gelud абсолютно верный, это особенность работы действия File.Rename, которое сравнивает существующее имя файла с новым без учета регистра и если эти имена одинаковы, то переименования не будет.
Например для действия File.Rename имена файлов:
TEXT.txt и text.txt будут одинаковы и переименования не произойдет.

Вариант решения проблемы:
исправленно: 02.11.11

Код: os.setlocale("");
local tAPK = File.Find("C:\\MyDir", "*.apk", false, false, nil, nil);
if tAPK then
local tSplit, sName
for i, sAPK in pairs(tAPK) do
tSplit = String.SplitPath(sAPK);
sName = String.Replace(tSplit.Filename, " ", "_", false);
sName = String.Upper(String.Left(sName, 1))..String.Mid(sName, 2, -1);
os.rename(sAPK, tSplit.Drive..tSplit.Folder..sName..tSplit.Extension);
end
end
Автор: Stalkersof
Дата сообщения: 01.11.2011 15:20
tavria2 Zloy_Gelud все въехал. Проблема заключается только в одинаковых именах.
Автор: Zloy_Gelud
Дата сообщения: 01.11.2011 16:38
tavria2

Цитата:
Вариант решения проблемы:

Еще один. Заменить оригинальную функу переименования на:

Код: DLL.CallFunction("Kernel32.dll", "MoveFileExA", "\""..sAPK.."\",\""..tSplit.Drive..tSplit.Folder..sName..tSplit.Extension.."\", 1", DLL_RETURN_TYPE_LONG, DLL_CALL_STDCALL);
Автор: Stalkersof
Дата сообщения: 01.11.2011 16:52
Zloy_Gelud
Может у вас будет время сделать сборник по вызову dll. Простые необходимые функции.
Автор: Zloy_Gelud
Дата сообщения: 01.11.2011 17:39
Stalkersof
Вообще, я ленивый. Поэтому не обещаю, что что-либо сделаю.
Автор: dallas page
Дата сообщения: 01.11.2011 19:17

Цитата:
Вариант решения проблемы:
Код:
os.setlocale("");
local tAPK = File.Find("C:\\MyDir", "*.apk", false, false, nil, nil);
if tAPK then
local tSplit, sName
for i, sAPK in pairs(tAPK) do
tSplit = String.SplitPath(sAPK);
sName = String.Replace(tSplit.Filename, " ", "_", false);
sName = String.Upper(String.Left(sName, 1))..String.Mid(sName, 2, -1);
File.Rename(sAPK, tSplit.Drive..tSplit.Folder..sName..tSplit.Extension.."~");
File.Rename(sAPK.."~", tSplit.Drive..tSplit.Folder..sName..tSplit.Extension);
end
end


tavria2 спасибо, сработало. Правда к расширению добавлял ~ и получалось *.apk~. Код подправил. Еще раз спасибо.
Автор: sjdb45
Дата сообщения: 01.11.2011 19:25
Zloy_Gelud


Цитата:
Что за детские обиды? Я уверен, что вас никто не хотел обидеть.

Сказу что я даже и намека на какие либо обиды не делал, просто торопился в поисках необходимой информации.
К стати решил все вопросы, стал изучать справку и не пожалел! Оказывается там есть все, что необходимо, нужно только глаза протереть и терпением запастись...
Вот про одно в справке я либо не увидел, либо этого вообще в справке нету, а именно:
Функция в "AUTOIT"
If FileExists("somefile.exe") Then
делаешь что хочешь
EndIf
В батниках
if exist "%systemdrive%\myfile.exe" goto куда хочешь
и т.д
А тут есть похожее на это?
Автор: lerik2703
Дата сообщения: 01.11.2011 21:48
BUBKO3

Цитата:
как вывести в Label имя учетной записи Windows


Код: Label.SetText("Label1", System.GetUserInfo().RegOwner);
Автор: tavria2
Дата сообщения: 02.11.2011 09:20
dallas page

Цитата:
tavria2 спасибо, сработало. Правда к расширению добавлял ~ и получалось *.apk~. Код подправил. Еще раз спасибо.
Код изменил, см. мой предыдущий пост.
Автор: sjdb45
Дата сообщения: 02.11.2011 11:21
Пролазил я в буквальном смысле слова по всем существующим страницам (да и на английском форуме) но так и не нашел подобную тему. Хотя думаю вопрос не сложный.
Значит так, нужно сделать скрытыми одну или несколько кнопок проекта таким образом, что-бы они были видны только в том случае, если в проекте имеется необходимый материал. К примеру кнопка должна открыть следующую страничку, но если в проекте нету необходимого матерьяла то ни кнопка и тем боле следующая страничка не отображаются.
Наверное это как-то будет связано с If File.DoesExist. Возможно ли такое?
Автор: lerik2703
Дата сообщения: 02.11.2011 11:38
sjdb45

Цитата:
ни кнопка и тем боле следующая страничка не отображаются.


Код: Button.SetVisible("Button1", File.DoesExist("C:\\MyFile.txt"));
Автор: Stalkersof
Дата сообщения: 02.11.2011 13:54
tavria2 Упс. Цитата не моя. Не я писал.
Приятно вас всех видеть. Хоть какое то оживление. За код и разъяснения спасибо.
Автор: sjdb45
Дата сообщения: 02.11.2011 14:17
lerik2703
Спасибо, код работает! только вместо ("C:\\MyFile.txt") мне нужно было ("AutoPlay\\Docs\\myfile.txt")
Только вот я думю может разумнее будет писать в такую директорию (_SourceFolder.."\\myfolder\\myfile.txt")
Все таки файл нужно будет искать в файлах проекта...
Да ещё, а как на счет поиска ни файла а папки?
Folder.DoesExist - есть ли такое в АМС?
Автор: Zloy_Gelud
Дата сообщения: 02.11.2011 14:45
sjdb45

Цитата:
Folder.DoesExist - есть ли такое в АМС?

А самому посмотреть?
Автор: tavria2
Дата сообщения: 02.11.2011 15:09
Stalkersof

Цитата:
Цитата не моя. Не я писал.

Извини, промахнулся
Автор: Stalkersof
Дата сообщения: 02.11.2011 19:29

Идея установщика простая подхватывает рядом лежащий архив 7z c использованием is7z.dll.
А вот как сделать деинстолятор. Есть идеи?
Автор: Zloy_Gelud
Дата сообщения: 02.11.2011 20:35
Stalkersof

Цитата:
Есть идеи?

Создавать INI файл, в который записывать пути к ыайлам, которые установились, новые записи в реестре. Далее, написать небольшую утилиту (на другом языке программирования), которая читала бы этот INI файл и выпоняла удаление. Или же запускать авторан с параметром -uninstall, который бы открывал страницу удаления в этом же авторане.
Автор: Stalkersof
Дата сообщения: 02.11.2011 20:55

Цитата:
Создавать INI файл, в который записывать пути к файлам.

Это реально сделать в процессе установки. Или же делать после того как установилось.
Автор: Zloy_Gelud
Дата сообщения: 02.11.2011 21:10
Stalkersof
Реально, в процессе установки.
Автор: Stalkersof
Дата сообщения: 02.11.2011 21:40
Zloy_Gelud ???????????
Будет время вразумите. Можно в личку в какую сторону глядеть. Стандартные функции распаковки из вашего примера.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140

Предыдущая тема: Media Player Classic - Home Cinema (MPC-HC)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.