Перейти к контенту

Внимание. На форуме проводятся технические работы с боковым меню.

_Val_ _Val_

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

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

Поделиться этим сообщением


Ссылка на сообщение

 

 

os.execute
Это не подходит (сворачивает игру). Надобность в копировании у меня все равно отпала. Скажу что на форуме lua.ru я нашёл разные примеры. Алгоритм заключался в том что файл открывался на чтение, считывался, потом "записывался" в другом месте.

Поделиться этим сообщением


Ссылка на сообщение

Всем привет! Нужна помощь. Используя пространство 

oi.

Создать алгоритм, который читает файл в текстовом режиме (если бы мы открыли файл блокнотом) и  находит в файле некую строку, возвращает последующие 4 символа после заданной строки.

Поделиться этим сообщением


Ссылка на сообщение

 

 

В чём тебе нужна помощь?
Листинг. Я не могу это написать, потому что ни когда не работал в луа со средствами ввода\вывода io.

Поделиться этим сообщением


Ссылка на сообщение

 

 

не совсем ясно - тебе нужно
в неком файле может содержаться три варианта выражения (в любой строке и в любой части строки) это seoson_osen1 , seoson_osen2 , seoson_win1.  Я хочу найти, в файле слово seoson_  и получить 5 (не 4, я ошибся) символа после т. е. либо osen1 либо osen2 или win1.

Поделиться этим сообщением


Ссылка на сообщение

у меня код 

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+ю

поправлено

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение

@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, каким шаблоном?  Единственный поиск по шаблону - закоментирован


Да и поиск работает, только не дальше первой строки в файле почему то

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение

@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.

когда работать не стало, я просто искал кусок строки. Да и смысл уже в том, что файл криво читается и тут дело не в строках получается...

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение

@Malandrinus, Файл в котором я работаю это сейв ТЧ, Если его открыть текстовым процессором, то можно увидеть как некоторые ресурсы (части логики, инфопоршни, переменные из пстор и т.д.) хранятся "прямым текстом", вот я и решил, что читать файл как текстовой.

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение

 

 

класс reader тебе в помощь
Им можно воспользоваться до загрузки игры?

 

 

Пожалуй ты его успешно теми своими экспериментами навернул
Нет, он загружается нормально, я же файл не изменял, только читал его.

reader Это который при загрузке в биндере? Я им не смогу воспользоваться до загрузки игры из гл. меню...

Поделиться этим сообщением


Ссылка на сообщение

@User_X.A.R26, @Malandrinus, Ура! получилось! Не понадобились

 

бинарное же посимвольное чтение и собственная реализация функций поиска текста

я то хотел уже из хекс редактора шаблоны текста брать, но даже открыв файл как бинарный он сохранил свою "текстовую" структуру. Вот мой код 

 


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", "rb")
		get_console():execute(file:read("*a"):match("osen%d"))
		file:close()
		console:execute	("disconnect")	
		console:execute	("start server(" .. fname .. "/single/alife/load) client(localhost)")	
	else
		console:execute	("load " .. fname)	
	end
end 

 

Сохранение загрузилось, после выхода я вижу в логе 

! Unknown command:  osen2 

Теперь можно делать самому враппер сейвов...


 

 

local str = file:r_stringZ()
Такое не сделать наверно без загрузки уровня? Изменено пользователем Graff46
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

 

 

Пользоваться можно и до загрузки.
я попробовал 
[error]Arguments     : LUA error: ... of fukushima\gamedata\scripts\ui_load_dialog.script:275: attempt to call method 'r_stringZ' (a nil value)
 

stack trace:

Поделиться этим сообщением


Ссылка на сообщение
file:r_stringZ()

Это методы reader'а? Я не могу найти описание этого класса на нашем форуме и на близлежащих, из луа _хелп ни чего не понял, там только перечислены методы. Если можно, тыкните носом на описание класса reader.

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение

Подскажите, кроме хилого 

os.execute("")

, у Луа есть другие способы работать с шеллом оси и запускать внешние приложения с параметрами?


Также буду признателен за уроки на русском по wxLua и IUP..

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение

Я призадумался. Когда я начал изучать в ВУЗ'е вэб-программирование, то конечно же столкнулся с фреймворком "jQuery" в теории по этой библиотеке описывалось почему есть jQuery.js и  jQuery_min.js. Дело все в представлении листинга "в одну строку" (Для Нотпад++ есть плагин JStool --> JS_min). Такое представление кода хоть и некрасива, но повышает скорость исполнения. Что если использовать эту ф-цию для критичных по времени участков кода в скриптах Сталкера? 

Поделиться этим сообщением


Ссылка на сообщение

Вопрос по luabind:

class (my_new_class)  (parent_class)
function my_new_class:_init ()
	...
end

Можно ли обращаясь к my_new_class получить его предка, т. е. parent_class ?

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...