Даалгавар:
Интернетгүй компьютер байгаа ч USB-ээр файл дамжуулах боломжтой. Энэ файлыг шилжүүлэх боломжтой интернеттэй таблет байдаг. Та таблет дээрээ шаардлагатай torrent-ийг татаж авах боломжтой боловч хангалттай зай байхгүй байна. Торрент дахь файл нь нэг бөгөөд том хэмжээтэй.
Шийдвэрлэх зам:
Би татаж авахын тулд torrent-ийг эхлүүлсэн. Сул зай бараг дуусч байхад би татаж авахаа түр зогсоов. Би таблетаа компьютерт холбож файлыг таблетаас компьютер руу шилжүүлсэн. Би түр зогсоод, файл дахин үүсэж, торрент юу ч болоогүй юм шиг татсаар байгаад гайхсан.
Торрент клиент нь хүлээн авсан өгөгдлөө бичиж буй файлдаа сийрэг тугийг тавьдаг тул систем нь нэг дор 16 ГБ нөөцлөхийг оролддоггүй бөгөөд 4 ГБ-аас дээш хэмжээтэй файл руу бичих гэж оролдоход алдаа гарахгүй.
Уг процедурыг дөрвөн удаа давтсаны дараа би нэг торрентын өөр өөр хэсгүүдийг агуулсан дөрвөн файлыг компьютер дээрээ хүлээн авлаа. Одоо тэднийг нэгтгэх л үлдлээ. Уг процедур нь үндсэндээ энгийн. Хэрэв дөрвөн файлын аль нэгэнд өгөгдсөн байрлалд байгаа бол тэг байтыг өөр утгаар солих шаардлагатай.
Ийм энгийн программ интернетэд байх ёстой юм шиг надад санагдсан. Ийм асуудалтай хэн ч тулгарч байгаагүй юу? Гэхдээ би ямар түлхүүр үг хайхаа мэдэхгүй байгаагаа ойлгосон. Тиймээс би энэ даалгаварт зориулж Луа скриптийг хурдан үүсгэсэн бөгөөд одоо үүнийг оновчтой болгосон. Энэ бол миний хуваалцах гэсэн зүйл юм.
Торрентыг хэсэгчлэн татаж авч байна
- Эхний төхөөрөмж дээр torrent татаж эхлэх
- ROM дүүрэх хүртэл хүлээнэ үү
- татаж авахыг түр зогсоох
- файлыг хоёр дахь төхөөрөмж рүү шилжүүлж, файлын нэрэнд дугаар нэмнэ үү
- файлыг бүрэн татаж авах хүртэл бид эхний цэг рүү буцна
Нэг файлд хэсгүүдийг нэгтгэх
Сүүлийн хэсгийг хүлээн авсны дараа тэдгээрийг нэг файлд цуглуулах шаардлагатай.
Даалгавар нь энгийн:
- Бүх хэсгийг нэг дор унших
- Хэрэв зарим хэсэгт байрлал нь тэг байт биш бол бид үүнийг гаралт руу бичнэ, үгүй бол бид тэг бичнэ.
үйл ажиллагаа merge_part
цувааны массивыг хүлээн авдаг streams_in
хэмжээсийн хэсгийг уншдаг buffer_length
мөн өөр өөр утаснуудын хэсгүүдийг нэгтгэсний үр дүнг буцаана.
function merge_part(streams_in, buffer_length)
local out_part
for _, stream in ipairs(streams_in) do
local in_part = stream:read(buffer_length)
if not out_part then
out_part = in_part -- просто копируем часть из первого файла
elseif in_part and #in_part > 0 then
if #out_part < #in_part then
out_part, in_part = in_part, out_part
end
if out_part ~= in_part -- данные различаются
and in_part:find("[^ ]") -- есть данные в in_part
and out_part:find(" ", 1, true) -- есть пустые места в out_part
then
local find_index = 1
--[[
үйл ажиллагаа string.gsub
Энэ нь тэгээр дүүргэсэн хэсгүүдийг олж, түүнд өгсөн зүйлийг хүргэх тул даалгаварт тохиромжтой.
--]]
out_part = out_part:gsub(" +", function(zero_string)
if #in_part < find_index then
return -- не на что менять
end
--[[
string.gsub
тоглолтыг олсон байрлалыг илэрхийлэхгүй. Тиймээс бид албан тушаалын зэрэгцээ хайлт хийдэг zero_string
функцийг ашиглан string.find
. Эхний тэг байтыг олоход хангалттай.
--]]
local start_index = out_part:find(" ", find_index, true)
find_index = start_index + #zero_string
--[[
Одоо орвол in_part
-д зориулсан өгөгдөл бий out_part
тэдгээрийг хуулах.
--]]
if #in_part >= start_index then
local end_index = start_index + #zero_string - 1
--[[
-аас таслах in_part
тэгийн дараалалд тохирох хэсэг.
--]]
local part = in_part:sub(start_index, end_index)
if (part:byte(1) ~= 0) or part:find("[^ ]") then
--[[
В part
өгөгдөл байна.
--]]
if #part == #zero_string then
return part
else
--[[
part
дараалсан тэгээс бага болсон. Үүнийг тэдэнтэй хамт нэмэгдүүлцгээе.
--]]
return part..zero_string:sub(1, end_index - #in_part)
end
end
end
end)
end
end
end
return out_part
end
дүгнэлт
Тиймээс бид энэ файлыг компьютер дээрээ татаж аваад угсарч чадсан. Нэгдсэний дараа би таблетаас torrent файлыг гаргаж авсан. Би компьютер дээрээ torrent клиент суулгаж, түүгээр файлаа шалгасан.
Таблет дээрх хамгийн сүүлд татаж авсан хэсгийг түгээлт дээр үлдээж болно, гэхдээ та үүнээс өмнө хэсгүүдийг дахин шалгахыг идэвхжүүлж, файлыг дахин татаж авахгүйн тулд тэмдэглэгээг арилгах хэрэгтэй.
Ашигласан:
- Таблет дээрх Flud torrent клиент.
- Компьютер дээрх Torrent клиент qBittorent.
Луа скрипт
Эх сурвалж: www.habr.com