Вверх ↑
Этот топик читают: Гость
Ответов: 188
Рейтинг: 2
#1: 2020-02-26 10:20:05 ЛС | профиль | цитата
Ребята подскажите может кто сталкивался.
Нужна софтина которая в себе имеет примерный функционал.Может на просторах интернета лежит готовое решение, но что-то найти не получается, а все хекс редакторы которые нашел могут только различия показывать! А в ручную производить сравнение это очень долго!
Задача такая.
Имеется два файла разного размера до подлинно известно что в них имеется одинаковая информация(например последовательность нескольких байт) так вот нужно чтобы софтина показала где есть одинаковые байты и сколько раз оно повторялось в каждом файле.
логику работы программы вижу таким образом.
берется произвольное число байт(например 4 байта) со второго файла и ищется совпадение с первым файлом при неудачном поиске делает сдвиг на один байт после того как сдвиги закончились и двигаться некуда берется значение со здвигом во втором файле и ищется сравнение в первом файле так же со сдвигами. а найденые комбинации байт заносятся в таблицу и сколько повторений.
вообщем как-то так!
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 4621
Рейтинг: 746
#2: 2020-02-26 12:43:02 ЛС | профиль | цитата
Вероятно, так оно может работать, но ты же понимаешь что тогда на каждый байт одного файла нужно перебрать все байты другого файла. То-есть, когда есть 2 файла по 1 МБ (1048576 байт), то читая 4 байта из 1-го файла и сдвигая на 1 байт, 2-й файл нужно прочитать 1048576 раз. Это объем данных ((1048576 - 3) * 1048576) = 1099508482048 байт, или 1 Гбайт 1 Терабайт. И повторить для другой длины последовательности. Даже если файл загрузить в память, вероятно это займет достаточно много времени.
Можешь попробовать реализовать это в HiAsm с помощью DataToFileEx и 2-х MemoryStream.

Редактировалось 4 раз(а), последний 2020-03-02 14:32:52
карма: 26

0
Ответов: 188
Рейтинг: 2
#3: 2020-02-26 13:07:08 ЛС | профиль | цитата
Я предпологаю что данная операция будет занимать много времени, но польза в данном случае важнее.
Netspirit писал(а):

Можешь поробовать реализовать это в HiAsm с помощью DataToFileEx и 2-х MemoryStream.

Я к сожалению никак не пойму как работать с байтами в HiAsm. И примеры рассматривал и видосы смотрел, не догоняю. Никак не пойму суть или логику и принцип работы! В справке к сожалению для меня недостаточно информации для понимания.
карма: 0

0
Ответов: 1342
Рейтинг: 31
#4: 2020-02-26 14:20:50 ЛС | профиль | цитата
это помоему очень жестоко, длинная будет любая у байт, которые нужно искать во втором файле? или даже 2 байта можно?, есть ли минимум и максимум или же всётаки все надо лопатить ?

нагружать можно весь процессор, 1 длинна байт на 1 поток, и так в несколько потоков, дабы на 100% загрузить процессор

Редактировалось 5 раз(а), последний 2020-02-26 14:55:15
карма: 2

0
Ответов: 188
Рейтинг: 2
#5: 2020-02-26 16:39:10 ЛС | профиль | цитата
поробую обьяснить еще раз.
Например первый файл у нас размером 1мб. в нем нужно найти последоватьльность байт взятых со второго файла размером 128кб.
первый цикл.
например выставляем значение 5 байт. программа берет первыые 5 байт со второго файла и ищет последовательность этих байт в первом файле. например результат поиска ничего не дал.
Берет следующие 5 байт во втором файле и также ищет совпадениес первым файлом начиная с первого байта. опять ничего поиск не дал.
потом снова берет следующие 5 байт со втрого файла и снова ищет совпадение с первым файлом.
например в течении первого цикла результата не дало делаем второй цикл
второй цикл
программа берет 5 байт со второго файла и ищет последовательность этих байт в первом файле но только теперь со сдвигом в 1 байт(тоесть берет 5 байт начиная со второго байта) например поиск ничего не дал
Берет следующие 5 байт во втором файле и также ищет совпадениес первым файлом начиная с первого байта. опять ничего поиск не дал.
потом снова берет следующие 5 байт со втрого файла и снова ищет совпадение с первым файлом.
и так делается пока все байты второго файла будут полностью проверены.
например в течении второго цикла результата не дало делаем третий цикл
третий цикл
программа берет 5 байт со второго файла и ищет последовательность этих байт в первом файле но только теперь со сдвигом в 1 байт(тоесть берет 5 байт начиная с третьего байта
Берет следующие 5 байт во втором файле и также ищет совпадениес первым файлом начиная с первого байта. опять ничего поиск не дал.
потом снова берет следующие 5 байт со втрого файла и снова ищет совпадение с первым файлом.
и так делается пока все байты второго файла будут полностью проверены.
найденые последовательности вывести в таблицу которая в себе содержит адрес и последовательность байт
желательно Каждая таблица для своего файла.
итак делается пока все байты второго файла будут полностью проверены.

искомые пять байт могут быть произвольно настраиваемые то есть могут быть и четыре байта и два байта и семь байт вообщем любое количество байт.

--- Добавлено в 2020-02-26 16:44:35

Rysik писал(а):
нагружать можно весь процессор, 1 длинна байт на 1 поток, и так в несколько потоков, дабы на 100% загрузить процессор

загрузка на проц думаю не принципиално.
чаще всего будет случаться поиск и нахождение без сдвига но если вдруг не нашлось то сдвиг нужен.

Редактировалось 2 раз(а), последний 2020-02-26 16:48:36
карма: 0

0
Ответов: 1342
Рейтинг: 31
#6: 2020-02-26 23:47:42 ЛС | профиль | цитата
нууу, что то типо того, делает сравнение 4-х байт довольно быстро

Add(MainForm,2953706,21,105)
{
link(onCreate,2049594:doOpen,[(142,125)(142,216)])
}
Add(FileStream,1979085,231,91)
{
FileName="C:\\SRVDesk.exe"
link(onLoad,11313733:doConvert,[])
}
Add(FileStream,2049594,231,210)
{
FileName="C:\\SRVDesk1.exe"
link(onLoad,14610033:doConvert,[])
}
Add(StreamConvertor,11313733,322,91)
{
link(onResult,3588150:doValue,[])
}
Add(StreamConvertor,14610033,322,210)
{
link(onResult,6468028:doValue,[])
}
Add(Memory,6468028,378,210)
{
link(onData,1979085:doOpen,[(422,216)(422,292)(166,292)(166,97)])
}
Add(Memory,3588150,371,91)
{
link(onData,7066189:doOperation,[(417,97)(417,61)(219,61)(219,167)])
}
Add(Str_Enum,14641875,371,133)
{
Delimiter=""
Step=8
link(onEnum,3426119:doWork1,[(474,139)])
link(String,3588150:Value,[])
}
Add(Position,4845617,497,217)
{
Point(doReset)
link(onSearch,15852028:doCompare,[])
link(Str,6468028:Value,[(503,205)(426,205)(426,254)(384,254)])
}
Add(Thread,2804337,329,133)
{
Delay=0
FastStop=0
link(onExec,14641875:doEnum,[])
}
Add(Math,7066189,238,161)
{
OpType=3
Op2=4
link(onResult,14464804:doEvent1,[])
link(Op1,1979085:Size,[])
}
Add(ProgressBar,4381291,623,63)
{
Left=20
Top=15
Width=350
Point(doMax)
}
Add(Hub,14464804,280,161)
{
OutCount=3
link(onEvent1,2804337:doStart,[(300,167)(300,139)])
link(onEvent2,4381291:doMax,[(447,174)(447,76)])
link(onEvent3,7426037:doTimer,[(306,181)(306,244)(268,244)(268,314)])
}
Add(Timer,14818168,483,105)
{
link(onTimer,6178975:doData,[])
}
Add(DoData,6178975,546,105)
{
link(onEventData,4381291:doPosition,[(604,111)(604,69)])
link(Data,14641875:NumSubStr,[(552,93)(457,93)(457,184)(377,184)])
}
Add(Timer,7426037,280,308)
{
Enable=1
link(onTimer,1015942:doEvent,[])
}
Add(IndexToChanel,1015942,329,308)
{
Point(Index)
link(onEvent1,12544514:doEvent1,[])
link(Index,2804337:Busy,[])
}
Add(Hub,12544514,378,308)
{
link(onEvent1,7426037:doStop,[(448,314)(448,368)(268,368)(268,321)])
link(onEvent2,12847140:doSave,[(669,321)(669,258)])
}
Add(StyleXP,12185580,56,56)
{
}
Add(If_else,15852028,546,217)
{
Type=2
Op2=Integer(0)
link(onTrue,15526765:doData,[])
link(onFalse,4845617:doReset,[(590,230)(590,253)(485,253)(485,230)])
}
Add(FormatStr,8036060,756,217)
{
Mask="%1;%2"
link(onFString,12847140:doAdd,[])
link(Str2,14641875:Part,[(769,191)(384,191)])
}
Add(ChangeMon,15526765,609,217)
{
Point(onNoData)
link(onData,15365019:doCalc,[])
link(onNoData,3426119:doWork3,[(653,230)(653,260)(474,260)])
}
Add(HubEx,3426119,470,217)
{
link(onEvent,4845617:doSearch,[])
}
Add(MathParse,15365019,686,217)
{
DataCount=1
MathStr="( ( %1 + 1 ) / 2 ) - 1"
link(onResult,8036060:doString,[])
}
Add(StrList,12847140,833,217)
{
FileName="rslt.txt"
}

Редактировалось 2 раз(а), последний 2020-02-26 23:48:47
карма: 2

1
Голосовали:zhorik5
Ответов: 188
Рейтинг: 2
#7: 2020-02-28 23:48:51 ЛС | профиль | цитата
опираясь на схему выше я нарисовал свою версию!

Add(ODialog,10674497,238,147)
{
Title="Выберите первый файл из которого будут браться данные (обычно меньшего размера)"
FileName="Smal File"
Point(FileName)
Point(StartDir)
link(onExecute,2572774:doEvent1,[])
}
Add(Button,3689589,154,147)
{
Left=20
Top=15
Caption="открыть"
Data=Integer(2)
link(onClick,10674497:doExecute,[])
}
Add(FileStream,9688510,623,147)
{
Point(doCopyFromStream)
Point(doPosition)
link(onLoad,14359500:doConvert,[])
}
Add(Hub,2572774,294,147)
{
link(onEvent1,10840077:doOpen,[])
link(onEvent2,14513411:doData,[(320,160)(320,183)(191,183)(191,237)])
}
Add(Memory,11703586,490,147)
{
link(onData,12724113:doExecute,[])
}
Add(StreamConvertor,16504213,441,147)
{
link(onResult,11703586:doValue,[])
}
Add(Str_Enum,13111172,546,203)
{
Delimiter=""
Step=4
OnlyDivGroup=1
Point(doStep)
link(onEnum,11910285:doEvent1,[(611,209)(611,195)])
link(onEndEnum,2051083:doMessage,[(586,216)(586,230)])
link(String,11703586:Value,[(552,197)(496,197)])
}
Add(UpDown,2676460,550,44)
{
Left=25
Top=50
Max=10000
Min=1
Position=2
link(onPosition,3001206:doText,[])
}
Add(Edit,3001206,599,44)
{
Left=55
Top=50
Width=55
Text="2"
DataType=2
link(onChange,5136752:doOperation,[(645,50)(645,48)])
}
Add(Button,16338415,471,42)
{
Left=115
Top=50
Caption="Сброс"
Data=Integer(1)
link(onClick,2676460:doPosition,[(533,48)(533,50)])
}
Add(If_else,14449337,770,280)
{
link(onTrue,7222106:doWork1,[])
link(Op1,1355591:Var3,[(776,258)])
link(Op2,3291717:Var2,[])
}
Add(ODialog,12724113,553,147)
{
Title="Выберите файл в котором будет осуществляться поиск (большего размера)"
FileName="big File"
Point(FileName)
Point(StartDir)
link(onExecute,9688510:doOpen,[])
}
Add(FileStream,10840077,364,147)
{
Point(doCopyFromStream)
Point(doPosition)
link(onLoad,16504213:doConvert,[])
}
Add(StreamConvertor,14359500,700,147)
{
link(onResult,13772072:doValue,[])
}
Add(Memory,13772072,770,147)
{
link(onData,13111172:doEnum,[(1058,153)(1058,453)(417,453)(417,209)])
}
Add(Str_Enum,13010220,770,203)
{
Delimiter=""
Step=4
OnlyDivGroup=1
Point(doStep)
Point(onBreak)
link(onEnum,14449337:doCompare,[(814,209)(814,247)(758,247)(758,286)])
link(onEndEnum,10117152:doSave,[(883,216)(883,314)])
link(String,13772072:Value,[])
}
Add(Hub,3222337,707,42)
{
link(onEvent1,12081085:In,[])
link(onEvent2,7255199:In,[])
}
Add(LineBreak,11634685,700,217)
{
Caption="kolbyte"
link(Out,13010220:doStep,[])
Primary=[12081085,35,-175]
}
Add(LineBreak,2663816,469,217)
{
Caption="kolbyte"
link(Out,13111172:doStep,[])
Primary=[7255199,266,-168]
}
Add(ProgressBar,8086589,336,224)
{
Top=725
Width=1166
Align=4
Color=-16777196
ProgressColor=-16777203
Point(doMax)
Point(doAlign)
}
Add(DoData,14513411,203,231)
{
Data=Integer(0)
link(onEventData,8086589:doMax,[])
link(Data,10840077:Size,[(209,190)(377,190)])
}
Add(Memo,10117152,917,280)
{
Left=5
Top=160
Width=574
Height=563
FileName="result.txt"
Point(doSave)
link(Str,12212569:Var2,[])
}
Add(Math,5136752,651,42)
{
OpType=2
Op2=2
link(onResult,3222337:doEvent1,[])
}
Add(Message,2051083,595,224)
{
Message="нет"
link(Caption,2491382:Var,[(608,217)(629,217)])
}
Add(Edit,6708119,672,280)
{
Left=438
Top=61
link(Str,1355591:Var2,[])
}
Add(GetDataEx,1355591,672,253)
{
Angle=3
link(Data,13111172:Part,[(559,258)])
}
Add(Timer,10829687,623,280)
{
Interval=1
link(onTimer,6708119:doText,[])
}
Add(Edit,16631102,994,217)
{
Left=438
Top=100
link(Str,12212569:Var3,[(1000,205)])
}
Add(GetDataEx,3291717,777,252)
{
link(Data,13010220:Part,[])
}
Add(Timer,2903065,938,217)
{
Interval=1
link(onTimer,16631102:doText,[])
}
Add(GetDataEx,12212569,917,200)
{
Angle=3
link(Data,3291717:Var3,[(893,205)(893,257)])
}
Add(MultiElement,7222106,819,280)
{
link(onEvent1,10117152:doAdd,[])
}
BEGIN_SDK
Add(EditMulti,5322272,21,21)
{
EventCount=1
WorkCount=1
Width=839
Height=480
link(doWork1,13476937:doCase,[(75,27)(75,119)])
}
Add(Case,14145324,168,175)
{
Value=Integer(0)
link(onNextCase,12328190:doCase,[(207,181)(207,182)])
}
Add(Case,4945535,263,172)
{
Value=Integer(0)
link(onNextCase,13669208:doCase,[(299,178)(299,179)])
}
Add(Case,2535646,298,113)
{
Value=String(FFFFFFFFFFFF)
link(onNextCase,14441929:doCase,[(337,119)(337,123)])
}
Add(Case,8809833,393,117)
{
Value=String(FFFFFFFFFFFFFFFF)
link(onNextCase,15540060:doCase,[])
}
Add(Case,8214757,123,176)
{
Value=Integer(0)
link(onNextCase,14145324:doCase,[(161,182)(161,181)])
}
Add(Case,4076065,358,173)
{
Value=Integer(0)
link(onNextCase,9508854:doCase,[])
}
Add(Case,3342197,256,113)
{
Value=String(FFFFFFFFFF)
link(onNextCase,2535646:doCase,[])
}
Add(Case,14441929,344,117)
{
Value=String(FFFFFFFFFFFFFF)
link(onNextCase,8809833:doCase,[])
}
Add(Case,8048628,214,113)
{
Value=String(FFFFFFFF)
link(onNextCase,3342197:doCase,[])
}
Add(Case,15540060,435,117)
{
Value=String(FFFFFFFFFFFFFFFFFF)
link(onNextCase,11655530:doCase,[])
}
Add(Case,2581323,172,113)
{
Value=String(FFFFFF)
link(onNextCase,8048628:doCase,[])
}
Add(Case,11655530,477,117)
{
Value=String(FFFFFFFFFFFFFFFFFFFF)
link(onNextCase,8214757:doCase,[(521,123)(521,161)(111,161)(111,182)])
}
Add(Case,13476937,130,113)
{
Value=String(FFFF)
link(onNextCase,2581323:doCase,[])
}
Add(Case,9508854,428,173)
{
Value=Integer(0)
link(onNextCase,9599004:doCase,[(477,179)(477,185)])
}
Add(Case,12328190,214,176)
{
Value=Integer(0)
link(onNextCase,4945535:doCase,[(258,182)(258,178)])
}
Add(Case,13669208,302,173)
{
Value=Integer(0)
link(onNextCase,4076065:doCase,[])
}
Add(Case,1606944,560,175)
{
Value=Integer(0)
link(onNextCase,5322272:onEvent1,[(726,181)(726,27)])
}
Add(Case,9599004,494,179)
{
Value=Integer(0)
link(onNextCase,1606944:doCase,[(543,185)(543,181)])
}
END_SDK
Add(LineBreak,13240121,602,91)
{
Type=1
link(Data,3001206:Text,[(608,83)(605,83)])
Primary=[2491382,21,105]
}
Add(CounterEx,499113,273,196)
{
link(onNext,8086589:doPosition,[(324,202)(324,230)])
}
Add(Hub,11910285,686,189)
{
link(onEvent1,13010220:doEnum,[(756,195)(756,209)])
link(onEvent2,3412102:In,[])
}
Add(LineBreak,15361016,224,196)
{
Caption="Bar"
link(Out,499113:doNext,[])
Primary=[3412102,490,0]
}


отсюда вопрос как сделать чтобы она в реальном времени показывала ход процесса?
и как ускорить процесс? потому что если работать с мегабайтными файлами требуется действительно приличное время ожидания!
если решите попробовать то подсовывайте файлы для начала не больше 10кб. иначе вы на долго ее повесите!
мне кажется что-то в моей схеме не правильно!

Редактировалось 2 раз(а), последний 2020-02-29 00:43:46
карма: 0

0
Ответов: 1342
Рейтинг: 31
#8: 2020-02-29 01:05:57 ЛС | профиль | цитата
думаю работает теперь точно правильно), но вот по поводу прогресс бара.... разве что какую то индикацию работы можно сделать и не больше, потому как позиций может оказаться не известно сколько.., надо же всётаки найти все позиции а не первую попавшуюся

но может быть надо вообще сравнение байт по 1 позиции, скажем берём первые 2 байта с первого и второго файла, сравниваем, а далее берём вторые 2 байта из обеих файлов.....


Add(MainForm,2953706,91,161)
{
}
Add(ODialog,10674497,322,161)
{
Title="Выберите первый файл из которого будут браться данные (обычно меньшего размера)"
FileName="Smal File"
Point(FileName)
Point(StartDir)
link(onExecute,10840077:doOpen,[])
}
Add(Button,3689589,238,161)
{
Left=20
Top=15
Caption="открыть"
Data=Integer(2)
link(onClick,10674497:doExecute,[])
}
Add(FileStream,9688510,539,161)
{
Point(doCopyFromStream)
Point(doPosition)
link(onLoad,14359500:doConvert,[])
}
Add(Memory,11703586,455,161)
{
link(onData,12724113:doExecute,[])
}
Add(StreamConvertor,16504213,413,161)
{
link(onResult,11703586:doValue,[])
}
Add(UpDown,2676460,371,105)
{
Left=25
Top=50
Max=10000
Min=1
Position=2
link(onPosition,3001206:doText,[])
}
Add(Edit,3001206,420,105)
{
Left=55
Top=50
Width=55
Text="2"
DataType=2
link(onChange,12277706:doOperation,[])
}
Add(Button,16338415,294,105)
{
Left=115
Top=50
Caption="Сброс"
Data=Integer(1)
link(onClick,2676460:doPosition,[])
}
Add(ODialog,12724113,497,161)
{
Title="Выберите файл в котором будет осуществляться поиск (большего размера)"
FileName="big File"
Point(FileName)
Point(StartDir)
link(onExecute,9688510:doOpen,[])
}
Add(FileStream,10840077,371,161)
{
Point(doCopyFromStream)
Point(doPosition)
link(onLoad,16504213:doConvert,[])
}
Add(StreamConvertor,14359500,581,161)
{
link(onResult,13772072:doValue,[])
}
Add(Memory,13772072,623,161)
{
link(onData,8329894:doEvent1,[(690,167)(690,382)(235,382)(235,244)])
}
Add(ProgressBar,8086589,329,231)
{
Top=725
Width=1166
Align=4
Color=-16777196
ProgressColor=-16777203
Point(doMax)
}
Add(Math,3950141,525,329)
{
Op2=2
Default=-1
link(onResult,11005424:doValue,[(576,335)(576,306)(398,306)(398,244)])
link(Op1,3950141:Result,[(531,317)(519,317)(519,373)(531,373)])
}
Add(DoData,3776707,469,329)
{
Data=Integer(1)
link(onEventData,3950141:doOperation,[])
}
Add(Copy,3231131,455,238)
{
Count=4
link(onCopy,8604391:doValue,[])
link(Str,11703586:Value,[])
link(Position,3331562:Var3,[(468,226)(556,226)(556,282)])
link(Count,12277706:Result,[])
}
Add(Memory,11005424,413,238)
{
link(onData,3231131:doCopy,[])
}
Add(Repeat,12904842,371,329)
{
Check=1
link(onRepeat,3776707:doData,[])
link(Op1,4307180:Var2,[])
link(Op2,4482943:Var2,[])
}
Add(GetDataEx,3331562,413,277)
{
link(Data,11005424:Value,[])
}
Add(Position,4845617,588,238)
{
Point(doReset)
link(onSearch,15852028:doCompare,[])
link(Str,13772072:Value,[(594,219)(629,219)])
}
Add(If_else,15852028,637,238)
{
Type=2
Op2=Integer(0)
link(onTrue,15526765:doData,[])
link(onFalse,4845617:doReset,[(681,251)(681,274)(576,274)(576,251)])
}
Add(ChangeMon,15526765,700,238)
{
Point(onNoData)
link(onData,6644101:doString,[])
link(onNoData,14787569:doWork3,[(744,251)(744,287)(565,287)])
}
Add(HubEx,14787569,561,238)
{
link(onEvent,4845617:doSearch,[])
}
Add(StrList,4382274,812,259)
{
FileName="C:\\rslt.txt"
}
Add(FormatStr,6644101,756,238)
{
Mask="%1;%2"
link(onFString,4382274:doAdd,[(800,244)(800,265)])
link(Str2,8604391:Value,[(769,211)(496,211)(496,292)(510,292)])
}
Add(Memory,8604391,504,238)
{
link(onData,14787569:doWork2,[])
}
Add(Thread,10658585,322,329)
{
Delay=0
FastStop=0
link(onExec,12904842:doRepeat,[])
}
Add(Timer,3043051,91,231)
{
Interval=100
link(onTimer,14237795:doEvent1,[])
}
Add(DoData,13935627,182,231)
{
link(onEventData,8086589:doPosition,[])
link(Data,4307180:Var3,[(188,219)(377,219)])
}
Add(DoData,16477164,280,238)
{
link(onEventData,8086589:doMax,[])
link(Data,4482943:Var1,[(286,208)])
}
Add(Hub,8329894,245,238)
{
link(onEvent1,16477164:doData,[])
link(onEvent2,10658585:doStart,[(271,251)(271,335)])
}
Add(GetDataEx,4307180,371,277)
{
Angle=1
link(Data,3331562:Var1,[])
}
Add(GetDataEx,4482943,378,203)
{
link(Data,10840077:Size,[])
}
Add(Hub,14237795,140,231)
{
link(onEvent1,13935627:doData,[])
link(onEvent2,4382274:doSave,[(175,244)(175,300)])
}
Add(Math,12277706,469,105)
{
OpType=2
Op2=2
Default=4
}
карма: 2

0
Ответов: 9906
Рейтинг: 351
#9: 2020-02-29 05:21:20 ЛС | профиль | цитата
Netspirit писал(а):
1099508482048 байт, или 1 Гбайт

О как.....
карма: 9

0
Ответов: 188
Рейтинг: 2
#10: 2020-02-29 09:24:02 ЛС | профиль | цитата
Rysik писал(а):
скажем берём первые 2 байта с первого и второго файла, сравниваем, а далее берём вторые 2 байта из обеих файлов.....

это не годится на случай если один файл меньше другого

--- Добавлено в 2020-02-29 09:27:14

Galkov писал(а):
1099508482048

чтото мне кажется это ближе к теробайтам))) Интересный стресс тест получается.

Редактировалось 1 раз(а), последний 2020-02-29 09:27:14
карма: 0

0
Ответов: 2059
Рейтинг: 131
#11: 2020-02-29 12:34:02 ЛС | профиль | цитата
zhorik5 писал(а):
это не годится на случай если один файл меньше другого

Не факт!


Редактировалось 1 раз(а), последний 2020-02-29 12:34:52
карма: 6

0
Разработчик
Ответов: 26066
Рейтинг: 2120
#12: 2020-02-29 12:44:45 ЛС | профиль | цитата
zhorik5 писал(а):
чтото мне кажется это ближе к теробайтам

Бери выше -- это около 1 петабайта. Приблизительно полный ресурс (не гарантийный) SSD дисков бюджетного класса.
Действительно, 1 Тб, но тоже не мало.

Редактировалось 4 раз(а), последний 2020-03-02 18:02:50
карма: 22

0
Ответов: 188
Рейтинг: 2
#13: 2020-02-29 12:52:37 ЛС | профиль | цитата
flint2 писал(а):

Не факт!

да ну как? побайтовое сравнение начиная спервого в обоих файлах 1мб и 128кб пройдет до конца 128кб и сравнение закончится.
nesco писал(а):
Бери выше -- это 1.099 петабайт.

получается из этих соображений и нет такого готового софта, либо ресурсов на обработку такого количества данных за вменяемый промежуток времени.
в моем случает это обычно один файл до 4мб другой до 512кб в основном это 1мб и 128кб либо того меньше.
есть как бы мощный проц который можно было бы озадачить на выполнение этой операции. пусть даже бы за час решал эту задачу с небольшими файлами. Главное решал!


Add(MainForm,2953706,91,161)
{
}
Add(ODialog,10674497,322,161)
{
Title="Выберите первый файл из которого будут браться данные (обычно меньшего размера)"
FileName="Smal File"
Point(FileName)
Point(StartDir)
link(onExecute,10840077:doOpen,[])
}
Add(Button,3689589,238,161)
{
Left=20
Top=15
Caption="открыть"
Data=Integer(2)
link(onClick,10674497:doExecute,[])
}
Add(FileStream,9688510,539,161)
{
Point(doCopyFromStream)
Point(doPosition)
link(onLoad,14359500:doConvert,[])
}
Add(Memory,11703586,455,161)
{
link(onData,12724113:doExecute,[])
}
Add(StreamConvertor,16504213,413,161)
{
link(onResult,11703586:doValue,[])
}
Add(UpDown,2676460,371,105)
{
Left=25
Top=50
Max=10000
Min=1
Position=2
link(onPosition,3001206:doText,[])
}
Add(Edit,3001206,420,105)
{
Left=55
Top=50
Width=55
Text="2"
DataType=2
link(onChange,12277706:doOperation,[])
}
Add(Button,16338415,294,105)
{
Left=115
Top=50
Caption="Сброс"
Data=Integer(1)
link(onClick,2676460:doPosition,[])
}
Add(ODialog,12724113,497,161)
{
Title="Выберите файл в котором будет осуществляться поиск (большего размера)"
FileName="big File"
Point(FileName)
Point(StartDir)
link(onExecute,9688510:doOpen,[])
}
Add(FileStream,10840077,371,161)
{
Point(doCopyFromStream)
Point(doPosition)
link(onLoad,16504213:doConvert,[])
}
Add(StreamConvertor,14359500,581,161)
{
link(onResult,13772072:doValue,[])
}
Add(Memory,13772072,623,161)
{
link(onData,8329894:doEvent1,[(690,167)(690,382)(235,382)(235,244)])
}
Add(ProgressBar,8086589,329,231)
{
Top=725
Width=1166
Align=4
Color=-16777196
ProgressColor=-16777203
Point(doMax)
}
Add(Math,3950141,525,329)
{
Op2=2
Default=-1
link(onResult,11005424:doValue,[(576,335)(576,306)(398,306)(398,244)])
link(Op1,3950141:Result,[(531,317)(519,317)(519,373)(531,373)])
}
Add(DoData,3776707,469,329)
{
Data=Integer(1)
link(onEventData,3950141:doOperation,[])
}
Add(Copy,3231131,455,238)
{
Count=4
link(onCopy,8604391:doValue,[])
link(Str,11703586:Value,[])
link(Position,3331562:Var3,[(468,226)(556,226)(556,282)])
link(Count,12277706:Result,[])
}
Add(Memory,11005424,413,238)
{
link(onData,3231131:doCopy,[])
}
Add(Repeat,12904842,371,329)
{
Check=1
link(onRepeat,3776707:doData,[])
link(Op1,4307180:Var2,[])
link(Op2,4482943:Var2,[])
}
Add(GetDataEx,3331562,413,277)
{
link(Data,11005424:Value,[])
}
Add(Position,4845617,588,238)
{
Point(doReset)
link(onSearch,15852028:doCompare,[])
link(Str,13772072:Value,[(594,219)(629,219)])
}
Add(If_else,15852028,637,238)
{
Type=2
Op2=Integer(0)
link(onTrue,15526765:doData,[])
link(onFalse,4845617:doReset,[(681,251)(681,274)(576,274)(576,251)])
}
Add(ChangeMon,15526765,700,238)
{
Point(onNoData)
link(onData,6644101:doString,[])
link(onNoData,14787569:doWork3,[(744,251)(744,287)(565,287)])
}
Add(HubEx,14787569,561,238)
{
link(onEvent,4845617:doSearch,[])
}
Add(StrList,4382274,812,259)
{
FileName="C:\\rslt.txt"
}
Add(FormatStr,6644101,756,238)
{
Mask="%1;%2"
link(onFString,4382274:doAdd,[(800,244)(800,265)])
link(Str2,8604391:Value,[(769,211)(496,211)(496,292)(510,292)])
}
Add(Memory,8604391,504,238)
{
link(onData,14787569:doWork2,[])
}
Add(Thread,10658585,322,329)
{
Delay=0
FastStop=0
link(onExec,12904842:doRepeat,[])
}
Add(Timer,3043051,91,231)
{
Interval=100
link(onTimer,14237795:doEvent1,[])
}
Add(DoData,13935627,182,231)
{
link(onEventData,8086589:doPosition,[])
link(Data,4307180:Var3,[(188,219)(377,219)])
}
Add(DoData,16477164,280,238)
{
link(onEventData,8086589:doMax,[])
link(Data,4482943:Var1,[(286,208)])
}
Add(Hub,8329894,245,238)
{
link(onEvent1,16477164:doData,[])
link(onEvent2,10658585:doStart,[(271,251)(271,335)])
}
Add(GetDataEx,4307180,371,277)
{
Angle=1
link(Data,3331562:Var1,[])
}
Add(GetDataEx,4482943,378,203)
{
link(Data,10840077:Size,[])
}
Add(Hub,14237795,140,231)
{
link(onEvent1,13935627:doData,[])
link(onEvent2,4382274:doSave,[(175,244)(175,300)])
}
Add(Math,12277706,469,105)
{
OpType=2
Op2=2
Default=4
}

этот пример работает быстрее моего, но мне кажется мы получаем разные данные
https://cloud.mail.ru/public/5mSG/3NxdwmECD
файлы для оперирования

Я тут подумал а что если файлы делить на 4 части и одновременно запускать 4 потока это явно бы прибавило скорости! Как это сделать?

--- Добавлено в 2020-02-29 13:13:05

хочется чтото универсальное.
с помощью которого можно будет даже пароль на роутер подобрать имея словарь пароллей например переведенный в хекс и атаку по дампу роутера!!! возможно идея бред но мне кажется приминение нашлось бы.

Редактировалось 6 раз(а), последний 2020-03-24 15:10:38
карма: 0

0
Ответов: 1342
Рейтинг: 31
#14: 2020-02-29 13:54:52 ЛС | профиль | цитата
zhorik5 писал(а):
да ну как? побайтовое сравнение начиная спервого в обоих файлах 1мб и 128кб пройдет до конца 128кб и сравнение закончится.


Мой последний пример работает на перебор всего второго файла и не важно какой размер у него, хоть 10КБ хоть 10МБ.

Так же не важно какой обьем у первого файла.
карма: 2

0
Ответов: 2059
Рейтинг: 131
#15: 2020-02-29 14:20:00 ЛС | профиль | цитата
Тут может быть два подхода:
Например, если найти все совпадающие слова принадлежащие двум разным словарям разного размера, то это задачка из учебника.
Т.е. зная каким образом дискретизируется информация, пусть даже переменной длины, то она решается, как два пальца об асфальт.
А вот если признаки деления не известны, то потребуется очень большое множество переборов, чтобы найти все наибольшие совпадающие цепочки.
Задача тоже решаема, но если именно такой подход в решении общей задачи, то «неладно что-то в Датском государстве».
карма: 6

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)