အလုပ်တစ်ခု
အင်တာနက်မရှိသော PC တစ်လုံးရှိသော်လည်း USB မှတစ်ဆင့် ဖိုင်ကို လွှဲပြောင်းနိုင်သည်။ ဤဖိုင်ကို လွှဲပြောင်းနိုင်သည့် အင်တာနက်ပါရှိသော တက်ဘလက်တစ်ခု ရှိပါသည်။ သင့်တက်ဘလက်တွင် လိုအပ်သော torrent ကို ဒေါင်းလုဒ်လုပ်နိုင်သော်လည်း နေရာလွတ် မလုံလောက်ပါ။ torrent ထဲက ဖိုင်က တစ်ခုပြီးတစ်ခု ကြီးပါတယ်။
ဖြေရှင်းရန်လမ်းကြောင်း-
ဒေါင်းလုဒ်လုပ်ရန် torrent ကို စတင်လိုက်ပါပြီ။ နေရာလွတ်တွေ မရှိတော့တဲ့အခါ၊ ဒေါင်းလုဒ်ကို ခဏရပ်လိုက်တယ်။ တက်ဘလက်ကို PC နဲ့ ချိတ်ဆက်ပြီး ဖိုင်ကို တက်ဘလက်ကနေ PC သို့ ရွှေ့လိုက်တယ်။ ကျွန်တော် ခေတ္တရပ်လိုက်ပြီး အံ့သြစရာကောင်းတာက ဖိုင်ကို ပြန်ဖန်တီးပြီး torrent က ဘာမှမဖြစ်ခဲ့သလို ဒေါင်းလုဒ်ဆွဲနေခဲ့တယ်။
torrent client သည် လက်ခံရရှိသောဒေတာကိုရေးသည့်ဖိုင်တွင် အကျဲသောအလံကိုသတ်မှတ်ထားသောကြောင့်၊ စနစ်သည် 16GB ကိုတစ်ပြိုင်နက်တည်းသိမ်းဆည်းရန်မကြိုးစားဘဲ 4GB ထက်ကျော်လွန်သောဖိုင်တစ်ခုသို့ရေးရန်ကြိုးစားသောအခါတွင်အမှားအယွင်းတစ်ခုဖြစ်ပေါ်မည်မဟုတ်ပါ။
လုပ်ထုံးလုပ်နည်းကို လေးကြိမ်ပြန်လုပ်ပြီးနောက်၊ တူညီသော torrent ၏ မတူညီသောအစိတ်အပိုင်းများပါရှိသော ကျွန်ုပ်၏ PC တွင် ဖိုင်လေးခုကို လက်ခံရရှိခဲ့ပါသည်။ အခု ကျန်တာတွေအားလုံးက သူတို့ကို ပေါင်းထားဖို့ပဲ။ လုပ်ထုံးလုပ်နည်းသည် အခြေခံအားဖြင့် ရိုးရှင်းပါသည်။ ဖိုင်လေးခုအနက်မှ တစ်ခု၌ ပေးထားသည့် အနေအထားတွင် ရှိနေပါက သုညဘိုက်ကို အခြားတန်ဖိုးဖြင့် အစားထိုးရန် လိုအပ်သည်။
ဒီလို ရိုးရှင်းတဲ့ ပရိုဂရမ်ဟာ အင်တာနက်မှာ ရှိသင့်တယ်လို့ ကျွန်တော်ထင်ပါတယ်။ ဒီလိုပြဿနာမျိုး ဘယ်သူမှ မကြုံဖူးဘူးလား။ ဒါပေမယ့် ဘယ်သော့ချက်စာလုံးတွေကို ရှာရမှန်းတောင် မသိတော့ဘူး ဆိုတာ သိလိုက်ရတယ်။ ထို့ကြောင့်၊ ဤလုပ်ငန်းအတွက် Lua script ကို အမြန်ဖန်တီးခဲ့ပြီး ယခုအခါ ၎င်းကို အကောင်းဆုံးဖြစ်အောင် ပြုလုပ်ထားပါသည်။ ဒါက ကျွန်တော် မျှဝေချင်တာပါ။
torrent ကို အပိုင်းအလိုက် ဒေါင်းလုဒ်လုပ်ခြင်း။
- ပထမဆုံးစက်တွင် torrent ကို စတင်ဒေါင်းလုဒ်လုပ်ပါ။
- ROM ပြည့်တဲ့အထိစောင့်ပါ။
- ဒေါင်းလုဒ်ကိုခေတ္တရပ်ပါ။
- ဖိုင်ကို ဒုတိယစက်သို့ လွှဲပြောင်းပြီး ဖိုင်အမည်သို့ နံပါတ်တစ်ခုထည့်ပါ။
- ဖိုင်ကို လုံးဝဒေါင်းလုဒ်မလုပ်မချင်း ပထမအချက်သို့ ပြန်သွားပါ။
အစိတ်အပိုင်းများကို ဖိုင်တစ်ခုအဖြစ် ပေါင်းစည်းပါ။
နောက်ဆုံးအပိုင်းကို လက်ခံရရှိပြီးနောက်၊ ၎င်းတို့ကို ဖိုင်တစ်ခုလုံးတွင် စုစည်းရန် လိုအပ်သည်။
အလုပ်က ရိုးရှင်းသည်-
- အပိုင်းအားလုံးကို တစ်ပြိုင်နက်ဖတ်ပါ။
- တစ်စိတ်တစ်ပိုင်းမှာ position က သုည byte မဟုတ်ရင် output မှာ ရေးမယ်၊ မဟုတ်ရင် သုည ရေးမယ်။
လုပ်ဆောင်ချက် merge_part
threads တစ်ခု၏ array ကိုလက်ခံသည်။ streams_in
အဲဒီထဲက အရွယ်အစား အပိုင်းကို ဖတ်တယ်။ buffer_length
မတူညီသော thread များမှ အစိတ်အပိုင်းများကို ပေါင်းစည်းခြင်း၏ရလဒ်ကို ပြန်ပေးသည်။
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
function ကို အသုံးပြု 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
သုည၏ sequence နှင့်သက်ဆိုင်သောအပိုင်း။
--]]
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
ကောက်ချက်
ထို့ကြောင့်၊ ကျွန်ုပ်တို့သည် ဤဖိုင်ကို PC ပေါ်တွင် ဒေါင်းလုဒ်လုပ်ပြီး စုစည်းနိုင်ခဲ့သည်။ ပေါင်းစည်းပြီးနောက်၊ တက်ဘလက်မှ torrent ဖိုင်ကိုဆွဲထုတ်ခဲ့သည်။ ကျွန်ုပ်သည် ကျွန်ုပ်၏ PC တွင် torrent client ကို ထည့်သွင်းပြီး ၎င်းနှင့်အတူ ဖိုင်ကို စစ်ဆေးခဲ့သည်။
တက်ဘလက်ပေါ်ရှိ နောက်ဆုံးဒေါင်းလုဒ်လုပ်ထားသောအပိုင်းကို ဖြန့်ချီရေးတွင် ချန်ထားနိုင်သော်လည်း ၎င်းမတိုင်မီတွင် အစိတ်အပိုင်းများကို ပြန်လည်စစ်ဆေးခြင်းကို ဖွင့်ပြီး ၎င်းကို ထပ်မံဒေါင်းလုဒ်မလုပ်စေရန်အတွက် ဖိုင်ကို အမှန်ခြစ်ဖြုတ်ရန် လိုအပ်သည်။
အသုံးပြုခံ့:
- တက်ဘလက်တစ်ခုပေါ်ရှိ Flud torrent သုံးစွဲသူ။
- PC တွင် Torrent client qBittorent။
Lua ပဲဗျ။
source: www.habr.com