Robby
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Zloy_Gelud Есть результаты поиска tblFiles = File.Find... В поиске участвуют все файлы и tblFiles содержит пути ко всем файлам. Среди найденных файлов есть архивы, например *.rar, и текстовые описания к ним формата *.rar.log или *.rar.txt. В тестовых описания последняя строка может быть паролем. Наличие пароля определяется по наличию ":" в строке (например pass: пароль). Нужно результирующий двухмерный массив в котором по индексу и ключу можно получить путь к архиву и пароль для него если он есть. Я сделал так: Код: tblFiles = File.Find("C:\\MyDir\\", "*.*", false, false, nil, nil); -- функция получения пароля function GetPass(path) local function test(path) if File.DoesExist(path..".txt") then tText = TextFile.ReadToTable(path..".txt"); return tText; elseif File.DoesExist(path..".log") then tText =TextFile.ReadToTable(path..".log"); return tText; else return false; end end if test(path) then strPass = tText[#tText]; if strPass=="" and #tText>=2 then index=#tText; while index>1 do strPass = tText[index]; if strPass~="" then break; end index = index-1; end end if String.Find(strPass, ":", 1, false)~=-1 then strPass = String.Mid(strPass, String.Find(strPass, ":", 1, false)+1, -1); strPass = string.gsub (strPass, "^%s*(.+)%s*$", "%1"); if strPass~="" then return strPass; end end end end -- создание массива tblFilePass[i]={Path=value, Pass=GetPass(value)} if (tblFiles) then tblFilePass={}; for i,value in pairs(tblFiles) do local strExtension = String.SplitPath(value).Extension; tblFilePass[i]={Path=value, Pass=GetPass(value)}; end end -- здесь вывод результата работы if (tblFilePass) then for i=1, #tblFilePass do Debug.ShowWindow(true); Debug.Print(tblFilePass[i].Path.." \t "..tostring(tblFilePass[i].Pass).."\r\n"); end end | но скорее всего это не верх совершенства. |