Ru-Board.club
← Вернуться в раздел «Программы»

» Far Manager

Автор: VictorVG4
Дата сообщения: 06.05.2016 00:26
Angel_Ka

У меня проще в скрипте View_XDOC.lua стоит регулярка и по ней идёт фильтрация:

Цитата:
-- Просмотр документов XDOC как текста используя xdoc2txt v2.0.11.0 (UNICODE.)
-- Вызов AltF3 выбран специально чтобы конвертор не портил выходной текст
-- ибо по умолчанию его внутренняя кодировка ShiftJIS (Япония), а на больших
-- файлах его работа заметна по задержке просмотра, да и его временный файл
-- пишется в %TEMP%. HTML файлы через конвертер лучше не смотреть - он
-- игнорирует в них строку <meta ... content="text/html; charset=...">
-- и в итоге если встречает не UTF-8 файл на экран выводится мусор. Посему
-- маски XHTM, HTM, HTML, SHTM выкинуты - если надо смотрите их в браузере.
--
-- History:
-- v1.2 - refactoring.
-- Sun Jun 14 10:00:02 +0300 2015
-- v1.2.1 - contunue and fix typo
-- Mon Jun 15 01:33:25 +0300 2015
-- v1.2.2 - refactoring
-- Tue Jun 16 17:10:08 +0300 2015
-- v1.2.3 - fix typo
--Tue Jun 16 23:24:22 +0300 2015
--
-- VictorVG @ VikSoft.Ru, 1996 -2015
--

local Cmds="view:<xdoc2txt -8 -o=0 "
local Mask="/.+\\.(sx(c|d|i|w)|od(g|p|s|t)|do(c|cm|cx)|xl(s|sm|sx)|pp(t|tm|tx)|rtf|j(a|b|f|t|u|v)w|jt(d|t)|oa(s|2|3)|bun|wj(2|3)|wk(3|4)|123|wri|pdf|mht|eml)/i"

Macro{
uid="65BB8A9F-7AC6-48F3-8F17-E00F34235D1E";
area="Shell";
key="AltF3";
description="View XDOC's as plain text";
filemask=Mask;
flags="NoFolders";
priority=50;
condition=function() return mf.fmatch(APanel.Current,Mask)==1 end;
action=function()
Far.DisableHistory(-1); mf.print(Cmds..'"'..APanel.Current..'"') Keys("Enter");
end;
}
Автор: Angel_Ka
Дата сообщения: 06.05.2016 00:45
VictorVG4

Цитата:
У меня проще ...

Ну Вы даёте! Проще! Вот что значит сила привычки. Вместо двух строчек в ассоциациях полтора десятка строк кода не считая шапки.
А регулярка знатная. Перенимаю с БЛАГОДАРНОСТЬЮ!
Автор: VictorVG4
Дата сообщения: 06.05.2016 02:06
Angel_Ka

Не привычка, а я специально решил задачу через скрипт - это снижает нагрузку на БД конфига раз, и уменьшает вероятность сбоев задачи в целом при её изменении/повреждении.

Добавлено:
А шапка - встроенная документация чтобы после самому не вспоминать что и как работает - у меня вечно нет комментов в коде.

Добавлено:
И насчёт строк - собственно команда это одна строка, а остальное отформатировано для удобства чтения. Можно и в три строки переписать:


Цитата:
local Cmds="view:<xdoc2txt -8 -o=0 "
local Mask="/.+\\.(sx(c|d|i|w)|od(g|p|s|t)|do(c|cm|cx)|xl(s|sm|sx)|pp(t|tm|tx)|rtf|j(a|b|f|t|u|v)w|jt(d|t)|oa(s|2|3)|bun|wj(2|3)|wk(3|4)|123|wri|pdf|mht|eml)/i"
Macro{uid="65BB8A9F-7AC6-48F3-8F17-E00F34235D1E"; area="Shell"; key="AltF3"; description="View XDOC's as plain text"; filemask=Mask; flags="NoFolders"; priority=50; condition=function() return mf.fmatch(APanel.Current,Mask)==1 end; action=function() Far.DisableHistory(-1); mf.print(Cmds..'"'..APanel.Current..'"') Keys("Enter"); end;}

только читать их глаза на лоб вылезут.
Автор: Angel_Ka
Дата сообщения: 06.05.2016 10:02
VictorVG4

Цитата:
специально решил задачу через скрипт - это снижает нагрузку на БД конфига раз, и уменьшает вероятность сбоев задачи в целом при её изменении/повреждении

Тогда понятно. У меня то на машинах ресурсов хватает, Фар летает. Поэтому я даже и не задумывался о подобном. Благодарю за науку!
Автор: Alexyz21
Дата сообщения: 06.05.2016 11:22
Angel_Ka
10-я [more]
Код: local F = far.Flags
local ffi = require'ffi'
local C = ffi.C

local guid = "FE9B8874-9651-434C-8182-72329F2371A5"
local uGuid = win.Uuid(guid)
local BS,ts = string.byte("\\"),{nil,true,9999,true,true,false}
local freport = "Z:\\Temp\\Report.txt"

ffi.cdef[[
int strcmp(const char*, const char*);
int _stricmp(const char*, const char*);
int _strnicmp(const char*, const char*, size_t);
int strncmp(const char*, const char*, size_t);
char* strrchr(const char*, int);
size_t strlen(const char*);
int memcmp(const void*, const void*, size_t);
]]

local function StartAndLen(name)
local ptr = C.strrchr(name,BS)
name = ptr==nil and name or ptr+1
local len = tonumber(C.strlen(name))
return name,len
end

local Items = {
--[[01]] {F.DI_DOUBLEBOX, 3,1, 65,6, 0, 0,0, 0, "Select duplicates of FileName. Help: F1"},
--[[02]] {F.DI_CHECKBOX, 5,2, 26,2, 0, 0,0, 0, "Num&ber of symbols"},
--[[03]] {F.DI_EDIT, 27,2, 31,2, 0, 0,0, 0, ""},
--[[04]] {F.DI_CHECKBOX, 5,3, 20,3, 0, 0,0, 0, "Ignore &case"},
--[[05]] {F.DI_CHECKBOX, 37,3, 56,3, 0, 0,0, 0, "Ignore &full duplicates"},
--[[06]] {F.DI_CHECKBOX, 5,5, 15,5, 0, 0,0, 0, "Re&port"},
--[[07]] {F.DI_TEXT, -1,4, 0,0, 0, 0,0, F.DIF_SEPARATOR,""},
--[[08]] {F.DI_BUTTON, 0,5, 0,0, 0, 0,0, F.DIF_DEFAULTBUTTON+F.DIF_CENTERGROUP,"&Ok"},
--[[09]] {F.DI_BUTTON, 0,5, 0,0, 0, 0,0, F.DIF_CENTERGROUP,"Ca&ncel"}
}

local tts={}

local function DlgProc(hDlg,Msg,Param1,Param2)
if Msg==F.DN_INITDIALOG then
for i=2,#Items-3 do tts[i]=ts[i] end
hDlg:send(F.DM_SETTEXT,3,tts[3])
hDlg:send(F.DM_SETCHECK,2,tts[2] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
hDlg:send(F.DM_SETCHECK,4,tts[4] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
hDlg:send(F.DM_SETCHECK,5,tts[5] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
hDlg:send(F.DM_SETCHECK,6,tts[6] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
elseif Msg==F.DN_BTNCLICK and (Param1==2 or Param1>=4 and Param1<=6) then
tts[Param1] = Param2~=0
elseif Msg==F.DN_EDITCHANGE and Param1==3 then -- Number symbols
tts[3] = tonumber(hDlg:send(F.DM_GETTEXT,3)) or tts[3]
else
return
end
return true
end

Macro {
description="* Select Duplicates FileName in Branch panel"; name="SDFN"; area="Shell";
action=function()
if far.Dialog(uGuid,-1,-1,69,8,nil,Items,nil,DlgProc)==#Items-1 then
for i=2,#Items-3 do ts[i]=tts[i] end
local pBL=ffi.cast("BOOL*",1)
local pc=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).PanelControl
local pin=panel.GetPanelInfo(nil,1)
if bit.band(pin.Flags,F.PFLAGS_SELECTEDFIRST)>0 then Keys("ShiftF12") end
pc(PANEL_ACTIVE,"FCTL_SETNUMERICSORT",0,nil)
pc(PANEL_ACTIVE,"FCTL_SETCASESENSITIVESORT",ts[4] and 0 or 1,nil)
if pin.SortMode~=F.SM_NAME then panel.SetSortMode(nil,1,F.SM_NAME) end
local sid,sel,j,fn0,fn1,st0,ln0,st1,ln1,t0 = 0,{},0,"","",0,0,0,0,far.FarClock()
local function Proc(i)
if i>j then
pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-2,pBL)
table.insert(sel,{fn0,1})
sid=1
end
pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-1,pBL)
j,sid=i+1,sid+1
sel[#sel][2]=sid
end
pc(PANEL_ACTIVE,"FCTL_BEGINSELECTION",0,nil)
for i=1,pin.ItemsNumber do
fn0=fn1
st1,ln1=StartAndLen(panel.GetPanelItem(nil,1,i).FileName)
fn1=ffi.string(st1,ln1)
if (not ts[2] and not ts[4]) and (not(ts[5] and C.strcmp(fn1,fn0)==0) and C.strcmp(fn1,fn0)==0) then Proc(i)
elseif (ts[2] and ts[4]) and (not(ts[5] and C._stricmp(fn1,fn0)==0) and C._strnicmp(fn1,fn0,ts[3])==0) then Proc(i)
elseif (ts[2] and not ts[4]) and (not(ts[5] and C.strcmp(fn1,fn0)==0) and C.strncmp(fn1,fn0,ts[3])==0) then Proc(i)
elseif (not ts[2] and ts[4]) and (not(ts[5] and C._stricmp(fn1,fn0)==0) and C._stricmp(fn1,fn0)==0) then Proc(i)
end
end
pc(PANEL_ACTIVE,"FCTL_ENDSELECTION",0,nil)
pc(PANEL_ACTIVE,"FCTL_REDRAWPANEL",0,nil)
Keys("ShiftF12")
if ts[6] then
table.sort(sel,function(a,b) return a[2]>b[2] end)
local s="Execution time: "..far.FarClock()-t0.." mcs\nNumber of symbols: "..(ts[2] and ts[3] or "all").."\nIgnore case: "..tostring(ts[4]).."\nIgnore full duplicates: "..tostring(ts[5]).."\n\n"
for i=1,#sel do s=s..sel[i][2].."\t"..sel[i][1].."\n" end
fwrite(s,freport)
far.Message("mcs: "..far.FarClock()-t0,"SDFN")
end
end
end;
}

Macro {
description = "SDFN - Help"; area = "Dialog"; key = "F1";
condition=function() return Area.Dialog and Dlg.Id==guid end;
action=function()
if Dlg.CurPos<=3 then far.Message("The number of first symbols to compare","Help: Number of symbols")
elseif Dlg.CurPos==4 then far.Message("Case of letters in FileName will be ignored","Help: Ignore case")
elseif Dlg.CurPos==5 then far.Message("Full duplicates of FileName will be ignored","Help: Ignore full duplicates")
elseif Dlg.CurPos==6 then far.Message("mcs - total time of execution in mcs\nReport will be saved to:\n"..freport,"Help: Report",nil,"l")
end
end;
}
Автор: VictorVG4
Дата сообщения: 06.05.2016 12:02
Angel_Ka

У меня так же, но это не повод их разбазаривать.
Автор: Angel_Ka
Дата сообщения: 06.05.2016 12:04
Alexyz21

Цитата:
10-я

Восхитительно! На малом тесте (просто большого на данный момент нет под рукой, но это пока не существенно) нашёл все пары без маркера/с маркером и ничего лишнего.

А для чего крыжик [ ] у опции Number of symbols?

И ещё: а нельзя ли попробовать в поле опции Number of symbols также и отрицательное значение, чтобы сопоставлять по концам для тех случаев когда начала имён изменены. Например, когда префикс-нумерация хаотично сдвинута.

Добавлено:
Обнаружил шикарный побочный эффект макроса — он прекрасно отсортировывает файлы с похожими именами не только в бранче, но и в обычной панели. Это очень хорошо!

VictorVG4

Цитата:
это не повод их разбазаривать

Значит Вы умудрённее, предусмотрительнее, компетентнее.
Автор: VictorVG4
Дата сообщения: 06.05.2016 12:47
Alexyz21

В "10-й", строка 8 забита local freport = "Z:\\Temp\\Report.txt" . А коли в машине тома Z нет? Не надёжнее ли что-то типа так - local freport =win.GetEnv("TMP")..\\Report.txt ?
Автор: Angel_Ka
Дата сообщения: 06.05.2016 13:08
VictorVG4
У меня при попытке вставить переменную среды макрос выдаёт ошибку, поэтому я делаю "C:\\temp\\Report.txt".
Автор: VictorVG4
Дата сообщения: 06.05.2016 13:14
Angel_Ka

Лады, надо посмотреть причину, но по идее если у нас нет слайса adz ОС должна ругаться что точка монтирования не существует. Потому я думаю стоит это обойти и решение с "C:\\temp\\Report.txt" или лучше просто C:\\report.txt надёжнее - удалить ставший ненужным файл в корне C: не сложно, да и ошибки с несуществующим томом гарантировано избежим. Давай так оставим эту строку local freport ="C:\\Report.txt" . Разумно?
Автор: Angel_Ka
Дата сообщения: 06.05.2016 13:35


Цитата:
ОС должна ругаться что точка монтирования не существует


Цитата:
Давай так оставим эту строку local freport ="C:\\Report.txt" . Разумно?

У меня система не ругается и на изначальную запись. Поэтому мне, в принципе, и это подходит тоже. Вот только если работать с флешки, то нет ли где запретов на запись в корень системного диска?
Автор: VictorVG4
Дата сообщения: 06.05.2016 13:49
Angel_Ka

Цитата:
Вот только если работать с флешки, то нет ли где запретов на запись в корень системного диска?

Потому я и предлагал вариант с $TMP - спокойнее, ну если машинка не DEC Alpha SERVER или DEC Alpha STATION где загрузочный том аппаратно защищён по записи (расположен в NVRAM) то надеюсь такая вероятность мала. Или сделать относительный путь расположенный по дереву выше скрипта в месте где есть запись.
Автор: Angel_Ka
Дата сообщения: 06.05.2016 14:54
Alexyz21
Наконец то удалось посмотреть десятку на реальной базе несколько большей 600 тыс. файлов. С выставленной опцией [x] Ignore full duplicates она проходит её примерно за 8 секунд.

Но проявилась и ложка дёгтя — со сброшенным крестиком в [ ] Ignore full duplicates новая версия макроса вызывает ошибку:
Код: LuaMacro

not enough memory
Stack Traceback
Автор: Alexyz21
Дата сообщения: 06.05.2016 17:41
10.1 [more]
Код: local F = far.Flags
local ffi = require'ffi'
local C = ffi.C

local guid = "FE9B8874-9651-434C-8182-72329F2371A5"
local uGuid = win.Uuid(guid)
local BS,ts = string.byte("\\"),{nil,true,9999,true,true,false}
local freport = win.GetEnv("Temp").."\\Report.txt"

ffi.cdef[[
int strcmp(const char*, const char*);
int _stricmp(const char*, const char*);
int _strnicmp(const char*, const char*, size_t);
int strncmp(const char*, const char*, size_t);
char* strrchr(const char*, int);
size_t strlen(const char*);
int memcmp(const void*, const void*, size_t);
]]

local function StartAndLen(name)
local ptr = C.strrchr(name,BS)
name = ptr==nil and name or ptr+1
local len = tonumber(C.strlen(name))
return name,len
end

local Items = {
--[[01]] {F.DI_DOUBLEBOX, 3,1, 65,6, 0, 0,0, 0, "Select duplicates of FileName. Help: F1"},
--[[02]] {F.DI_CHECKBOX, 5,2, 26,2, 0, 0,0, 0, "Num&ber of symbols"},
--[[03]] {F.DI_EDIT, 27,2, 31,2, 0, 0,0, 0, ""},
--[[04]] {F.DI_CHECKBOX, 5,3, 20,3, 0, 0,0, 0, "Ignore &case"},
--[[05]] {F.DI_CHECKBOX, 37,3, 56,3, 0, 0,0, 0, "Ignore &full duplicates"},
--[[06]] {F.DI_CHECKBOX, 5,5, 15,5, 0, 0,0, 0, "Re&port"},
--[[07]] {F.DI_TEXT, -1,4, 0,0, 0, 0,0, F.DIF_SEPARATOR,""},
--[[08]] {F.DI_BUTTON, 0,5, 0,0, 0, 0,0, F.DIF_DEFAULTBUTTON+F.DIF_CENTERGROUP,"&Ok"},
--[[09]] {F.DI_BUTTON, 0,5, 0,0, 0, 0,0, F.DIF_CENTERGROUP,"Ca&ncel"}
}

local tts={}

local function DlgProc(hDlg,Msg,Param1,Param2)
if Msg==F.DN_INITDIALOG then
for i=2,#Items-3 do tts[i]=ts[i] end
hDlg:send(F.DM_SETTEXT,3,tts[3])
hDlg:send(F.DM_SETCHECK,2,tts[2] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
hDlg:send(F.DM_SETCHECK,4,tts[4] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
hDlg:send(F.DM_SETCHECK,5,tts[5] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
hDlg:send(F.DM_SETCHECK,6,tts[6] and F.BSTATE_CHECKED or F.BSTATE_UNCHECKED)
elseif Msg==F.DN_BTNCLICK and (Param1==2 or Param1>=4 and Param1<=6) then
tts[Param1] = Param2~=0
elseif Msg==F.DN_EDITCHANGE and Param1==3 then -- Number symbols
tts[3] = tonumber(hDlg:send(F.DM_GETTEXT,3)) or tts[3]
else
return
end
return true
end

Macro {
description="* Select Duplicates FileName in Branch panel"; name="SDFN"; area="Shell";
action=function()
if far.Dialog(uGuid,-1,-1,69,8,nil,Items,nil,DlgProc)==#Items-1 then
for i=2,#Items-3 do ts[i]=tts[i] end
local pBL=ffi.cast("BOOL*",1)
local pc=ffi.cast("struct PluginStartupInfo*",far.CPluginStartupInfo()).PanelControl
local pin=panel.GetPanelInfo(nil,1)
if bit.band(pin.Flags,F.PFLAGS_SELECTEDFIRST)>0 then Keys("ShiftF12") end
pc(PANEL_ACTIVE,"FCTL_SETNUMERICSORT",0,nil)
pc(PANEL_ACTIVE,"FCTL_SETCASESENSITIVESORT",ts[4] and 0 or 1,nil)
if pin.SortMode~=F.SM_NAME then panel.SetSortMode(nil,1,F.SM_NAME) end
local sid,sel,j,fn0,fn1,st0,ln0,st1,ln1,t0 = 0,{},0,"","",0,0,0,0,far.FarClock()
local function Proc(i)
if i>j then
pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-2,pBL)
table.insert(sel,{fn0,1})
sid=1
end
pc(PANEL_ACTIVE,"FCTL_SETSELECTION",i-1,pBL)
j,sid=i+1,sid+1
sel[#sel][2]=sid
end
pc(PANEL_ACTIVE,"FCTL_BEGINSELECTION",0,nil)
for i=1,pin.ItemsNumber do
fn0=fn1
st1,ln1=StartAndLen(panel.GetPanelItem(nil,1,i).FileName)
fn1=ffi.string(st1,ln1)
if (not ts[2] and not ts[4]) and (not(ts[5] and C.strcmp(fn1,fn0)==0) and C.strcmp(fn1,fn0)==0) then Proc(i)
elseif (ts[2] and ts[4]) and (not(ts[5] and C._stricmp(fn1,fn0)==0) and C._strnicmp(fn1,fn0,ts[3])==0) then Proc(i)
elseif (ts[2] and not ts[4]) and (not(ts[5] and C.strcmp(fn1,fn0)==0) and C.strncmp(fn1,fn0,ts[3])==0) then Proc(i)
elseif (not ts[2] and ts[4]) and (not(ts[5] and C._stricmp(fn1,fn0)==0) and C._stricmp(fn1,fn0)==0) then Proc(i)
end
end
pc(PANEL_ACTIVE,"FCTL_ENDSELECTION",0,nil)
pc(PANEL_ACTIVE,"FCTL_REDRAWPANEL",0,nil)
Keys("ShiftF12")
if ts[6] then
table.sort(sel,function(a,b) return a[2]<b[2] end)
local h = io.open(freport,"wb")
io.close(h)
h = io.open(freport,"ab")
h:write("Items: "..#sel.."\nExecution time: "..far.FarClock()-t0.." mcs\nNumber of symbols: "..(ts[2] and ts[3] or "all").."\nIgnore case: "..tostring(ts[4]).."\nIgnore full duplicates: "..tostring(ts[5]).."\n\n")
for i=#sel,1,-1 do h:write(sel[i][2].."\t"..sel[i][1].."\n") sel[i]=nil end
io.close(h)
far.Message("mcs: "..far.FarClock()-t0,"SDFN")
end
end
end;
}

Macro {
description = "SDFN - Help"; area = "Dialog"; key = "F1";
condition=function() return Area.Dialog and Dlg.Id==guid end;
action=function()
if Dlg.CurPos<=3 then far.Message("The number of first symbols to compare","Help: Number of symbols")
elseif Dlg.CurPos==4 then far.Message("Case of letters in FileName will be ignored","Help: Ignore case")
elseif Dlg.CurPos==5 then far.Message("Full duplicates of FileName will be ignored","Help: Ignore full duplicates")
elseif Dlg.CurPos==6 then far.Message("mcs - total time of execution in mcs\nReport will be saved to:\n"..freport,"Help: Report",nil,"l")
end
end;
}
Автор: Angel_Ka
Дата сообщения: 06.05.2016 17:47
База 546 807 файлов

Код: [x] Number of symbols 37
[x] Ignore case [x] Ignore full duplicates

mcs: 3283471 3232326 3205766
Автор: Alexyz21
Дата сообщения: 06.05.2016 17:50
Перезапустите фар
Автор: Angel_Ka
Дата сообщения: 06.05.2016 17:52
Alexyz21

Цитата:
Потом, когда-нибудь.

Спасибо!

Сейчас буду смотреть 10.1.

По 10-ке интересное наблюдение на мониторе программы System Explorer: когда макрос работает в режиме игнорирования полных дубликатов, то показатель доступной памяти остаётся на отметке 66%, а когда полные дубликаты присовокупляются к частичным, то этот показатель снижается до 48%.

Добавлено:
10.1, база та же.

Код: [x] Ignore full duplicates
mcs: 2550732 2470565 2590071

[ ] Ignore full duplicates
mcs: 3332416 3415036 3260298
Автор: Alexyz21
Дата сообщения: 06.05.2016 18:42
Angel_Ka
Обращаю ваше внимание на то, что:
full duplicates при Ignore case != full duplicates без Ignore case, так как в первом случае FileName=fIlEnaMe, а во втором только FileName=FileName, в остальных случаях они != !
Автор: Angel_Ka
Дата сообщения: 06.05.2016 19:01
Alexyz21

Цитата:
Обращаю ваше внимание ...

Да, это я понял как только увидел, что Вы добавили эту полезную опцию. А до этого как то мелькала мысль, но не сосредотачивался на ней. А ведь это бранч, и там может быть разнообразие в регистре. БОЛЬШОЕ СПАСИБО Вам за это новшество в макросе!

Добавлено:
В т.ч. чаще всего мне целесообразно игнорировать регистр в маркерах. Пусть себе маркировщики комбинируют его как хотят. Лишь бы последовательность знаков соблюдали. Это как в именах досовских программ.
Автор: abelenki2
Дата сообщения: 06.05.2016 19:42
в последний месяц данный топик превратился в чат двух человек - Angel_Ka и Alexyz21.

может отдельный топик создадите или будете чатиться через PM? а то надоело ЭТО каждые 2 минуты читать...
Автор: abelenki2
Дата сообщения: 06.05.2016 20:05
*facepalm*
Автор: Alexyz21
Дата сообщения: 06.05.2016 21:16
abelenki2
Вы читаете чтобы помочь? Или так, просто?
Автор: VictorVG4
Дата сообщения: 06.05.2016 21:45
Alexyz21
Angel_Ka

По просьбе Angel_Ka создал в Тестировании тему Far Manager - специальные вопросы. Давайте промежуточную стадию разработки отселим туда, а сюда поместим только краткую постановку задачи и результат уместив всё это в несколько строк текста.
Автор: Angel_Ka
Дата сообщения: 06.05.2016 21:55
VictorVG4
Целиком полагаюсь на Ваш опыт. Переместите, пожалуйста, мои любые посты, по Вашему усмотрению. А какие посчитаете уже лишними и неактуальными — спокойно удаляйте. И Бог Вам в помощь!. Благодарю Вас за понимание и поддержку!
Автор: VictorVG4
Дата сообщения: 06.05.2016 22:01
Angel_Ka

Редактировать/перемещать чужие посты может только batva или их автор.
Автор: Angel_Ka
Дата сообщения: 06.05.2016 22:17
VictorVG4
Свой последний по времени пост я для почина в тему Far Manager - скрипты и плагины поместил.
По поводу предыдущих же постов, то, по зрелому размышлению, полагаю, что овчинка не стоит выделки (то бишь, затрат времени), и если Вы не возражаете, то теперь хотел бы оставить как есть.
Автор: VictorVG4
Дата сообщения: 07.05.2016 00:46
Angel_Ka

Там я временное явно неудачное название поправил на Far Manager - скрипты и плагины.

Добавлено:
Angel_Ka

А насчёт возражений - сиё не ко мне, да и Правила есть, а там есть гл. VIII. правило 2.20 накладывающее ограничения на допустимость редактирования.

Добавлено:
Кстати, по поводу корректности вывода процента удаления - интересно, а кто нибудь в Настройках интерфейса крыжик [] Показывать общий индикатор удаления включал? У меня он сброшен чтобы не терять время на подсчёт числа и объёма удаляемых файлов на NFS где полно симлинков. Если этот крыжик пометить, то машина может считать объём работы дольше чем выполнять собственно операцию удаления. Ну и понятно что я его давно снял, а при необходимости примерный объём каталогов можно и по F3 оценить.
Автор: Angel_Ka
Дата сообщения: 07.05.2016 01:39
VictorVG4
Спасибо за информацию! Название темы поправил.

Добавлено:
shmuz2
Обновил плагин LuaFAR Search до версии 3.25.2 и тут же попробовал создать бранч на базе 1,8 млн файлов. На завершающем этапе, когда уже обновлялась временная панель, выскочила ошибка:

Код:
Неизвестное исключение (0xE24C4A04)
0x00007FF9273EA1C8 RaiseException
GetOpenPanelInfoW
W:\Far\Plugins\lfsearch\lfsearch_e-x64.dll
Автор: shmuz2
Дата сообщения: 07.05.2016 10:47
Angel_Ka

Цитата:
бранч на базе 1,8 млн файлов. На завершающем этапе, когда уже обновлялась временная панель, выскочила ошибка:

Весьма вероятно, что эта ошибка есть также следствие нехватки памяти.
Ну допустим, я что-то оптимизирую, и будет 1.8 млн файлов обрабатывать. Так вы завтра попробуете на 5 млн, и опять памяти не хватит.
Тем не менее, спасибо за репорт, репорты очень важны для развития программ.
Автор: VictorVG4
Дата сообщения: 07.05.2016 12:52
Angel_Ka

У любой ОС есть предельный объём доступной задачам памяти, и он зависит только от её архитектуры а не от физической памяти установленной в ЭВМ. На DEC Alpha Server 10000 AXP (в этой машине стояло до 12 ЦП DEC Alpha AXP 21064A 275 MHz а для подключения периферии было 108 слотов шины PCI 64-66 MHz) ставилось до 13 ГБ ОЗУ и до 14 Тб HDD, но несмотря на то, что сам процессор DEC Alpha AXP 21х64 адресует до 256= 64 ПБайт ОЗУ байт физического ОЗУ, ОС DEC OSF/1 и DEC OpenVMS не позволяли прикладным задачам использовать все 64 ПБайт доступных адресов ОЗУ (для сравнения Intel Xeon E7-8880 v3 адресует до 246=8 Тб ОЗУ) адресуемых ЦП. Специально спроектированная экспериментальная задача теоретически могла использовать всю установленную в машине память за вычетом 64 Гб используемых для нужд ОС, да и то коли кроме неё все остальные задачи были приостановлены, но размер выделяемых ей блоков памяти определялся распределением памяти ЭВМ в момент времени когда она выдавала запрос ОС на выделение памяти, а у вас используется ОС с заведомо меньшим пределом адресации - до 2 Гб для 32-х битной версии, и до 8/16 Гб для 64-х битной версии (зависит от реализации ядра ОС и объёма доступного физического ОЗУ).

Отсюда и считайте - грубо говоря объём БД в записях умножьте на двойной средний размер записи и получите примерный размер буфера в ОЗУ куда надо поместить БД, и если у вас окажется объём больший чем ограничение ОС это в любом случае вызовет сбой прикладной задачи

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566

Предыдущая тема: оффтоп


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.