Dennis_Chikin 3 658 Опубликовано 4 Января 2015 Поделиться Опубликовано 4 Января 2015 (изменено) С чего начинать и где взять. Установка Lua:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=629106 Руководство «Программирование на языке Lua», третье издание:http://www.amk-team.ru/forum/index.php?showtopic=11584&p=905308 Изменено 2 Марта 2015 пользователем Kirgudu Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Graff46 598 Опубликовано 3 Февраля 2016 Поделиться Опубликовано 3 Февраля 2016 Всем привет! Нужна помощь. Используя пространство oi. Создать алгоритм, который читает файл в текстовом режиме (если бы мы открыли файл блокнотом) и находит в файле некую строку, возвращает последующие 4 символа после заданной строки. Ссылка на комментарий
Malandrinus 615 Опубликовано 3 Февраля 2016 Автор Поделиться Опубликовано 3 Февраля 2016 (изменено) @Graff46, В чём тебе нужна помощь? Ты фактически описал алгоритм: Читать очередную строку, пока не кончится файл в каждой строке искать нужную подстроку если нашёл, то прибавить к найденной позиции длину строки и по полученной позиции прочитать подстроку из 4-х символов Изменено 3 Февраля 2016 пользователем Malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Graff46 598 Опубликовано 3 Февраля 2016 Поделиться Опубликовано 3 Февраля 2016 В чём тебе нужна помощь?Листинг. Я не могу это написать, потому что ни когда не работал в луа со средствами ввода\вывода io. Ссылка на комментарий
Malandrinus 615 Опубликовано 4 Февраля 2016 Автор Поделиться Опубликовано 4 Февраля 2016 @Graff46, for line in io.lines(<имя файла>) do Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
naxac 2 445 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 @Graff46, справочное руководство по Луа. 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Charsi 440 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 @Graff46, не совсем ясно - тебе нужно 4 символа непосредственно после первого вхождения заданной подстроки: local file = io.open(path) if file then result = file:read("*a"):match("substring(....)") file:close() else print("can't read file: "..path) end или первые 4 символа из строки, следующей за найденной. Во втором случае шаблон в match будет "substring.-\n(....)". Если искомая подстрока содержит магические символы, то их следует экранировать символом %. 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
Graff46 598 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 не совсем ясно - тебе нужно в неком файле может содержаться три варианта выражения (в любой строке и в любой части строки) это seoson_osen1 , seoson_osen2 , seoson_win1. Я хочу найти, в файле слово seoson_ и получить 5 (не 4, я ошибся) символа после т. е. либо osen1 либо osen2 или win1. Ссылка на комментарий
Charsi 440 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 @Graff46, тогда берем буквы и в конце цифру: match("seoson_(%a+%d)") 1 Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
RayTwitty 492 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 Возможно кто-нибудь в курсе, как правильно называется следующая функция: function clamp(n, min, max) if n < min then return max elseif n > max then return min else return n end endПока обозвал clamp, но обычно clamp это запрет выхода за диапазон, а у меня значение идет по кругу. Не хочется путаться в дальнейшем с названиями. Ссылка на комментарий
Graff46 598 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 match("seoson_(%a+%d)") Тут точно скобки нужны? Ссылка на комментарий
User_X.A.R26 261 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 (изменено) Тут точно скобки нужны? В вызове функции всегда используются круглые скобки по дефолту во многих ЯП Изменено 4 Февраля 2016 пользователем User_X.A.R26 Ссылка на комментарий
Desertir 202 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 @RayTwitty, это похоже на частный случай wrap. Частный потому, что не учитывает смещение при пересечении границы. Wrap предполагает, что значение может выходить далеко за пределы минимума и максимума, и учитывает смещение. @User_X.A.R26, замечу, что скорее всего имелись ввиду не оператор вызова, а скобки внутри строки-аргумента. А еще для Lua запись match "seoson_(%a+%d)" будет корректной, потому что если аргумент один и это строка, скобки можно не указывать. Вспомни функцию из luabind которая называется class. Так что не всегда используются круглые скобки. 2 ТЧ 1.0004. SAP и Trans mod github Ссылка на комментарий
Graff46 598 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 (изменено) у меня код local file = io.open(getFS():update_path("$app_data_root$", "savedgames\\") .. fname .. ".sav") return file:read("*a"):match("osen") не возвращает строку osen (в файле она точно есть). Методом проб и ошибок я вычислил, что файл читается только до второй строки. Часть текстового кода файла который я мучаю ‘Э ’Э “Э ”Э •Э –Э —Э Э ™Э љЭ ›Э њЭ ќЭ ћЭ џЭ Э ЎЭ ўЭ ЈЭ ¤Э ҐЭ ¦Э §Э ЁЭ ©Э ЄЭ «Э ¬Э Э ®Э ЇЭ °Э ±Э ІЭ іЭ ґЭ µЭ ¶Э ·Э ёЭ №Э єЭ »Э јЭ ЅЭ ѕЭ їЭ АЭ БЭ ВЭ ГЭ ДЭ ЕЭ ЖЭ ЗЭ ИЭ ЙЭ КЭ ЛЭ МЭ НЭ ОЭ ПЭ РЭ СЭ ТЭ УЭ ФЭ ХЭ ЦЭ ЧЭ ШЭ ЩЭ ЪЭ ЫЭ ЬЭ ЭЭ ЮЭ ЯЭ аЭ бЭ вЭ гЭ дЭ еЭ жЭ зЭ иЭ йЭ кЭ лЭ мЭ нЭ оЭ пЭ рЭ сЭ тЭ уЭ фЭ хЭ цЭ чЭ шЭ щЭ ъЭ ыЭ ьЭ эЭ юЭ яЮ ЬяЭ Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э !Э "Э #Э $Э %Э &Э 'Э (Э )Э *Э +Э ,Э -Э .Э /Э 0Э 1Э 2Э 3Э 4Э 5Э 6Э 7Э 8Э 9Э :Э ;Э <Э =Э >Э ?Э @Э AЭ BЭ CЭ DЭ EЭ FЭ GЭ HЭ IЭ JЭ KЭ LЭ MЭ NЭ OЭ PЭ QЭ RЭ SЭ TЭ UЭ VЭ WЭ XЭ YЭ ZЭ [Э \Э ]Э ^Э _Э `Э aЭ bЭ cЭ dЭ eЭ fЭ gЭ hЭ iЭ jЭ kЭ lЭ mЭ nЭ oЭ pЭ qЭ rЭ sЭ tЭ uЭ vЭ wЭ xЭ yЭ zЭ {Э |Э }Э ~Э Э ЂЭ ЃЭ ‚Э ѓЭ „Э …Э †Э ‡Э €Э ‰Э ЉЭ ‹Э ЊЭ ЌЭ ЋЭ ЏЭ ђЭ ‘Э ’Э “Э ”Э •Э –Э —Э Э ™Э љЭ ›Э њЭ ќЭ ћЭ џЭ Э ЎЭ ўЭ ЈЭ ¤Э ҐЭ ¦Э §Э ЁЭ ©Э ЄЭ «Э ¬Э Э ®Э ЇЭ °Э ±Э ІЭ іЭ ґЭ µЭ ¶Э ·Э ёЭ №Э єЭ »Э јЭ ЅЭ ѕЭ їЭ АЭ БЭ ВЭ ГЭ ДЭ ЕЭ ЖЭ ЗЭ ИЭ ЙЭ КЭ ЛЭ МЭ НЭ ОЭ ПЭ РЭ СЭ ТЭ УЭ ФЭ ХЭ ЦЭ ЧЭ ШЭ ЩЭ ЪЭ ЫЭ ЬЭ ЭЭ ЮЭ ЯЭ аЭ бЭ вЭ гЭ дЭ еЭ жЭ зЭ иЭ йЭ кЭ лЭ мЭ нЭ оЭ пЭ рЭ сЭ тЭ уЭ фЭ хЭ цЭ чЭ шЭ щЭ ъЭ ыЭ ьЭ эЭ юЭ яЮ ЬяЭ Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э !Э "Э #Э $Э %Э &Э 'Э (Э )Э *Э +Э ,Э -Э .Э /Э 0Э 1Э 2Э 3Э 4Э 5Э 6Э 7Э 8Э 9Э :Э ;Э <Э =Э >Э ?Э @Э AЭ BЭ CЭ DЭ EЭ FЭ GЭ HЭ IЭ JЭ KЭ LЭ MЭ NЭ OЭ PЭ QЭ RЭ SЭ TЭ UЭ VЭ WЭ XЭ YЭ ZЭ [Э \Э ]Э ^Э _Э `Э aЭ bЭ cЭ dЭ eЭ fЭ gЭ hЭ iЭ jЭ kЭ lЭ mЭ nЭ oЭ pЭ qЭ rЭ sЭ tЭ uЭ vЭ wЭ xЭ yЭ zЭ {Э |Э }Э ~Э Э ЂЭ ЃЭ ‚Э ѓЭ „Э …Э †Э ‡Э €Э ‰Э ЉЭ ‹Э ЊЭ ЌЭ ЋЭ ЏЭ ђЭ ‘Э ’Э “Э ”Э •Э –Э —Э Э ™Э љЭ ›Э њЭ ќЭ ћЭ џЭ Э ЎЭ ўЭ ЈЭ ¤Э ҐЭ ¦Э §Э ЁЭ ©Э ЄЭ «Э ¬Э Э ®Э ЇЭ °Э ±Э ІЭ іЭ ґЭ µЭ ¶Э ·Э ёЭ №Э єЭ »Э јЭ ЅЭ ѕЭ їЭ АЭ БЭ ВЭ ГЭ ДЭ ЕЭ ЖЭ ЗЭ ИЭ ЙЭ КЭ ЛЭ МЭ НЭ ОЭ ПЭ РЭ СЭ ТЭ УЭ ФЭ ХЭ ЦЭ ЧЭ ШЭ ЩЭ ЪЭ ЫЭ ЬЭ ЭЭ ЮЭ ЯЭ аЭ бЭ вЭ гЭ дЭ еЭ жЭ зЭ иЭ йЭ кЭ лЭ мЭ нЭ оЭ пЭ рЭ сЭ тЭ уЭ фЭ хЭ цЭ чЭ шЭ щЭ ъЭ ыЭ ьЭ эЭ юЭ яЮ ЬяЭ Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э !Э "Э #Э $Э %Э &Э 'Э (Э )Э *Э +Э ,Э -Э .Э /Э 0Э 1Э 2Э 3Э 4Э 5Э 6Э 7Э 8Э 9Э :Э ;Э <Э =Э >Э ?Э @Э AЭ BЭ CЭ DЭ EЭ FЭ GЭ HЭ IЭ JЭ KЭ LЭ MЭ NЭ OЭ PЭ QЭ RЭ SЭ TЭ UЭ VЭ WЭ XЭ YЭ ZЭ [Э \Э ]Э ^Э _Э `Э aЭ bЭ cЭ dЭ eЭ fЭ gЭ hЭ iЭ jЭ kЭ lЭ mЭ nЭ oЭ pЭ qЭ rЭ sЭ tЭ uЭ vЭ wЭ xЭ yЭ zЭ {Э |Э }Э ~Э Э ЂЭ ЃЭ ‚Э ѓЭ „Э …Э †Э ‡Э €Э ‰Э ЉЭ ‹Э ЊЭ ЌЭ ЋЭ ЏЭ ђЭ ‘Э ’Э “Э ”Э •Э –Э —Э Э ™Э љЭ ›Э њЭ ќЭ ћЭ џЭ Э ЎЭ ўЭ ЈЭ ¤Э ҐЭ ¦Э §Э ЁЭ ©Э ЄЭ «Э ¬Э Э ®Э ЇЭ °Э ±Э ІЭ іЭ ґЭ µЭ ¶Э ·Э ёЭ №Э єЭ »Э јЭ ЅЭ ѕЭ їЭ АЭ БЭ ВЭ ГЭ ДЭ ЕЭ ЖЭ ЗЭ ИЭ ЙЭ КЭ ЛЭ МЭ НЭ ОЭ ПЭ РЭ СЭ ТЭ УЭ ФЭ ХЭ ЦЭ ЧЭ ШЭ ЩЭ ЪЭ ЫЭ ЬЭ ЭЭ ЮЭ ЯЭ аЭ бЭ вЭ гЭ дЭ еЭ жЭ зЭ иЭ йЭ кЭ лЭ мЭ нЭ оЭ пЭ рЭ сЭ тЭ уЭ фЭ хЭ цЭ чЭ шЭ щЭ ъЭ ыЭ ьЭ эЭ юЭ яЮ !ЬяЭ Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э Э !Э "Э #Э $Э %Э &Э 'Э (Э )Э *Э +Э ,Э -Э .Э /Э 0Э 1Э 2Э 3Э 4Э 5Э 6Э 7Э 8Э 9Э :Э ;Э <Э =Э >Э ?Э @Э AЭ BЭ CЭ DЭ EЭ FЭ GЭ HЭ IЭ JЭ KЭ LЭ MЭ NЭ OЭ PЭ QЭ RЭ SЭ TЭ UЭ VЭ WЭ XЭ YЭ ZЭ [Э \Э ]Э ^Э _Э `Э aЭ bЭ cЭ dЭ eЭ fЭ gЭ hЭ iЭ jЭ kЭ lЭ mЭ nЭ oЬ , DЕ7 nD g actor single_player юОЛЎВB)qА@цЅВјqЌ;wёІї]4єlwяяяя) v Ђ?tј М WH0? Вы <rЂ x 4xrs_armor_t qGseason osen2 l01_escape Ђ2 Ч ‰$ E ѕ 5 2L Z ђUL= l \ Ѓ /M.L f : A\ д Я Љ 9\”@ k\ PMЪ\} Х] m]BMЭMe\ в c]] )M^Md] ЋM ЄM YMрM%]T] ЫMl]ТLw cM,L®MSMі]zM`M ё]y\ x v]uM ]»M tM<MsMSMIMµMrMЌ]q\ • p] jM єL’o\Ѕ nM‚MаM·]8M©M…]7M6M¬]M] 4]Л]?M1],ЂM-M+] *MYM(M¶M'] &M‘M Ё]оMСM"]ЮLh _] ] |M §M]] ѓLљ м]]–ML] ¦] g]«] OMb]a]GL Џ^]<!M °]RM]MґM_]QM\MОMJM[M {MeMW]Ч]VMЊMXM›] PM 0MFM ~M$H] ЙM!]M-У]/3]„M]“]U]#MiM€]h]н] †]K|M5D] RM І]`]]"aM‡Md];Ц]РMW]ЬM;MЇ] [M—MШMпM НM"М]X]™MZ]ј]CMК] ‹] Q] V]бM>MФM±MNM g]№]Щ] ]г] ПMf\ ”ecolog_monster_part_2 normal Ђ freedom_kill_stalker_4-ђ dolg_defend_lager_1-„ sar_secret_lab-p val_prisonThelp- milјcontroller-„ Ђeliminateм.›tm_(Њ camp_5-ф- .Qt-<.| ш+С6-¬'Tsnip/Dи-$.Hagr_d&й3s1ђcourier_jo.а esc_blockpost_case_to_trad/<yan_find_scientist-¤21 3-Њ pprovodnik_task-Ђ XopromЁ gunslin|Icache-° Д(„'й *p†ght1Ф0_3 +0… 1-„ bar_resque_infoBhti`Ы30 (И3 barmen>¬ d x16_document.и5 .fgaЗHdym/АД+. М€,artefac0.Д.б tИ>' . 3…7-D3‘ 15А- ,.ШИP+.Њ |O'Р_return;м get_military7tt? community_que/Tp”7brai3ШЂ arklab:°`RДјЊV.Иxcrazy_veterans3<0 1 l -t5€фТ.$L +`.| аd+ђ 5 ,t.€Ђ1(Дјђ2рvasilyev2pВяrg62€ 2М .ґ3L5ђ *T.фx(ѓjob.А +5Њ (|ЂH.4ф- .Фx• car_graveyard6 +h.р М 6.Ь1м/x$Ь=РDQ-„ .цdo"6_mee._hun"p&(ь ђ-а"{%war0h%mercen`‰*<-ф drunk_ђXЂTitem-€ l!Њ(&se^tov- 3d.X € -E_.Њ dar_codedoor/Ь`SҐ#s2Њ3‚105¬Ђq_.ММmЂ'h.ђ zastava_d±ander)д2°3P.H.А.РАO<dwolf.0/h.garbageЊO&)-Ўa&—)kro.| 3Њ.( "‡/sos#Ё*-l. .`%Ф%.ґ2„captive2”xУ0x&/X 3Ь.Ёи\(HЂљ. !tutorial_wounded.рм+.‘ m,€6.4 5<1Д|b"њ/rule.Д(p$°j_rifl.ј-.¤./'. МV*$/631. gLѓboar.ДF€*”z.*Ђ 'T.ђ 0М.ЂШ+м.esc+ю поправлено Изменено 4 Февраля 2016 пользователем Graff46 Ссылка на комментарий
User_X.A.R26 261 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 (изменено) у меня кодПокажи-ка лучше целиком функцию, а то не шибко понятно к чему этот твой return вообще относится\внутри чего находится Изменено 4 Февраля 2016 пользователем User_X.A.R26 Ссылка на комментарий
Graff46 598 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 @User_X.A.R26, function load_dialog:load_game_internal() local console = get_console() local list = self:GetListWnd("list_window") if list:GetSize()==0 then return end local index = list:GetSelectedItem() if index == -1 then return end local item = list:GetItem(index) local fname = item.fn:GetText() if (alife() == nil) then local file = io.open(getFS():update_path("$app_data_root$", "savedgames\\") .. fname .. ".sav") get_console():execute(file:read("*a"):match("osen")) --"seoson_%a+%d")) --file:close() console:execute ("disconnect") console:execute ("start server(" .. fname .. "/single/alife/load) client(localhost)") else console:execute ("load " .. fname) end end Ссылка на комментарий
User_X.A.R26 261 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 (изменено) @Graff46, вроде бы с самим шаблоном косяк Ещё можно глянуть вот это, кстати. Там указаны и функции работы с различиями Изменено 4 Февраля 2016 пользователем User_X.A.R26 Ссылка на комментарий
Graff46 598 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 (изменено) @User_X.A.R26, каким шаблоном? Единственный поиск по шаблону - закоментирован Да и поиск работает, только не дальше первой строки в файле почему то Изменено 4 Февраля 2016 пользователем Graff46 Ссылка на комментарий
User_X.A.R26 261 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 @Graff46, значит поставь цикл перебора всех строк файла Ссылка на комментарий
Malandrinus 615 Опубликовано 4 Февраля 2016 Автор Поделиться Опубликовано 4 Февраля 2016 Пока обозвал clamp, но обычно clamp это запрет выхода за диапазон, а у меня значение идет по кругуГде же здесь по кругу? По кругу - это остаток от деления, а у тебя вообще не понять что. @Graff46, зачем тебе match? Ты ищешь строго одну и ту же строку. Поиск по шаблону будет переусложнением и перерасходом ресурсов. Используй обычный string.find Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Graff46 598 Опубликовано 4 Февраля 2016 Поделиться Опубликовано 4 Февраля 2016 (изменено) @User_X.A.R26, Я тут провел эксперимент. На одном из форумов я нашел код для копирования файлов основанный как раз то на чтении и копировании local source = io.open(source_path) local dest = io.output(dest_path) dest:write(source:read("*a")) source:close() dest:close() А вот мой код local source = io.open(getFS():update_path("$app_data_root$", "savedgames\\osen2.sav")) local dest = io.output(getFS():update_path("$app_data_root$", "seoson.ini")) dest:write(source:read("*a")) source:close() dest:close() Но когда я выполнил код то в копии (в файле seoson.ini) было лишь яяяя Ъ>9 L аОz»Ѕ9@ A A ¤t all љЂИ2‘sЏBі;5ђ<кХDuЂН L|} p Ьhl | l } p Э Э Э Э Э Э Э Э Ь |ip Э Ь |ip Э Э Э Э Хотя в исходном файле текста почти на мегабайт. Что то обрывает чтение в строках, может пробелы какие или пустоты...? Malandrinus да это я от безысходности, я делаю в неком файле может содержаться три варианта выражения (в любой строке и в любой части строки) это seoson_osen1 , seoson_osen2 , seoson_win1. Я хочу найти, в файле слово seoson_ и получить 5 (не 4, я ошибся) символа после т. е. либо osen1 либо osen2 или win1. когда работать не стало, я просто искал кусок строки. Да и смысл уже в том, что файл криво читается и тут дело не в строках получается... Изменено 4 Февраля 2016 пользователем Graff46 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти