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

Язык 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 пользователей

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

AMK-Team.ru

×
×
  • Создать...