ተግባር
ያለ በይነመረብ ፒሲ አለ, ነገር ግን ፋይሉን በዩኤስቢ በኩል ማስተላለፍ ይቻላል. ይህ ፋይል የሚተላለፍበት ከበይነመረቡ ጋር አንድ ጡባዊ አለ። በጡባዊዎ ላይ አስፈላጊውን ጅረት ማውረድ ይችላሉ ፣ ግን በቂ ነፃ ቦታ የለም። በወንዙ ውስጥ ያለው ፋይል አንድ እና ትልቅ ነው።
የመፍትሄ መንገድ፡-
ወንዙን ለማውረድ ጀመርኩ. ነፃው ቦታ ሊጠፋ ሲቃረብ፣ ማውረዱን ባለበት አቆምኩት። ታብሌቱን ከፒሲ ጋር አገናኘሁት እና ፋይሉን ከጡባዊው ወደ ፒሲ አንቀሳቅሼዋለሁ። ቆም አልኩ እና የሚገርመኝ ፋይሉ እንደገና ተፈጠረ እና ምንም እንዳልተፈጠረ ጅረት መውረድ ቀጠለ።
የቶረንት ደንበኛው የተቀበለውን መረጃ በሚጽፍበት ፋይል ላይ ትንሽ ባንዲራ ስለሚያስቀምጥ ስርዓቱ 16 ጂቢ በአንድ ጊዜ ለማስያዝ አይሞክርም እና ከ 4 ጂቢ በላይ የሆነ ፋይል ለመፃፍ ሲሞክር ስህተት አይከሰትም.
አሰራሩን አራት ጊዜ ከደጋገምኩ በኋላ፣ በፒሲዬ ላይ የተለያዩ የአንድ ጅረት ክፍሎችን የያዙ አራት ፋይሎችን ደረሰኝ። አሁን የቀረው እነሱን አንድ ላይ ማሰባሰብ ብቻ ነው. አሰራሩ በመሠረቱ ቀላል ነው። ዜሮ ባይት ከአራቱ ፋይሎች በአንዱ በተሰጠው ቦታ ላይ ካለ በሌላ እሴት መተካት ያስፈልግዎታል።
እንደዚህ ያለ ቀላል ፕሮግራም በይነመረብ ላይ መሆን እንዳለበት መሰለኝ። ማንም ሰው እንደዚህ አይነት ችግር አጋጥሞ አያውቅም? ግን ምን ዓይነት ቁልፍ ቃላት መፈለግ እንዳለብኝ እንኳን እንደማላውቅ ተገነዘብኩ። ስለዚህ ለዚህ ተግባር የሉአ ስክሪፕት በፍጥነት ፈጠርኩ እና አሁን አመቻችቻለው። ላካፍለው የምፈልገው ይህንን ነው።
ወንዙን በከፊል በማውረድ ላይ
- በመጀመሪያው መሳሪያ ላይ ዥረቱን ማውረድ ይጀምሩ
- 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 ደንበኛ qBittorent በፒሲ ላይ።
የሉአ ስክሪፕት
ምንጭ: hab.com