Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2014, 18:09   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Сравнить по содержимому HEX значения

Всем привет, на связи опять Я.
Есть задача, разобью её на две.
Первая
Нужно сравнить по содержимому и удалить одинаковые значения по строкам.
Есть данные в столбцах А и В.
Если в строке одинаковые значения по символам - удалить эту строку, а если отличаются,
то подсветить красным эти различия, только в столбце В, причём, если возможно, то пару, пара - всегда два символа от любого конца.
Например
608B47C0FC8147C0E88247C0BC8347C0
это по парам так
60 8B 47 C0 FC 81 47 C0 E8 82 47 C0 BC 83 47 C0


Код:
           [А-A]                               [B-B]
00000000000000000000000000000000 00000000000000000000000000000000 - удалить
00000000000000000000000000000000 00С00000000000000000000000000001 - подсветить
Во вложении всего 23 строки, а по факту строк 4 243 107 штук.

Вторая задача, определится от первой.
Спасибо.
Вложения
Тип файла: rar 1.rar (14.5 Кб, 11 просмотров)

Последний раз редактировалось valerij; 25.10.2014 в 18:22.
valerij вне форума Ответить с цитированием
Старый 25.10.2014, 18:46   #2
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Универсальная процедура QWERT
Код:
Sub QWERT()
Dim M(), R, C, T1, T2
    With Лист1
        Cells.Characters.Font.ColorIndex = 0
        Cells.Characters.Font.Bold = 0
        M = .Range("A1").Resize(.Cells(.Rows.Count, 1).End(xlUp).Row, 2)
        For R = UBound(M) To 1 Step -1
            If M(R, 1) = M(R, 2) Then
                Rows(R).Delete
            Else
                For C = 1 To Len(M(R, 2)) Step 2
                    T1 = Mid(M(R, 1), C, 2): T2 = Mid(M(R, 2), C, 2)
                    Debug.Print R, C, T1, T2
                    If T1 <> T2 Then Cells(R, 2).Characters(Start:=C, Length:=2).Font.ColorIndex = 41
                    If T1 <> T2 Then Cells(R, 2).Characters(Start:=C, Length:=2).Font.Bold = 1
                Next C
            End If
        Next R
    End With
End Sub
Вложения
Тип файла: rar сравнить3.rar (10.9 Кб, 9 просмотров)
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru

Последний раз редактировалось alex77755; 25.10.2014 в 18:58.
alex77755 вне форума Ответить с цитированием
Старый 25.10.2014, 18:54   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Универсальная процедура QWERT
Подсвечивает отлично, но не удаляет одинаковые строки. а - самое главное.
valerij вне форума Ответить с цитированием
Старый 25.10.2014, 18:56   #4
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Уже удаляет. поправил код
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 25.10.2014, 19:06   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Уже удаляет. поправил код
Супер!!!!

Теперь я отсею из 4 243 107 строк одинаковые, определюсь со второй частью задачи, ~ там будет нужно удалять не совпадающие строки, оставлять только совпавшие.
(возможно и сам разберусь, опираясь на ваш макрос )

Если чяво, потревожу!!

---------------
| ^^пиво^^ \\|""\\_,_
|___________||___|__|)
(@)(@)""*|(@)(@)**(@)
valerij вне форума Ответить с цитированием
Старый 25.10.2014, 19:40   #6
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Строки в екселе?
Если в текстовике, то, по идее, можно сделать быстрее обработку
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 25.10.2014, 20:24   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Строки в екселе?
Если в текстовике, то, по идее, можно сделать быстрее обработку
Я частями делаю по 1023(больше не влазает) * 3 = 3069 строк - [A-A] и столько же в [B-B], после отсева осталось 215 строк.
Мгновенно делает.

Конечно столько строк делить по 1023 за раз - хлопотно...


А в текстовике - только Notepad++ открывает, стандартный виснет.
Notepad с HEX редактора копирует в одну строчку, потом мне надо преобразовать в таблицу по 32 символу.

Как Excel заставить работать с txt, я не в курсе, как Word -ом делать я знаю.
Как то так.
Или, что вы имели ввиду?

Сделал через макрос ворда в txt, потом в Эксель, получилось по 265194 строки
Запускаю макрос QWERT виснет Эксель наглухо.
Чё так??
проц 4 ядерный, ОЗУ 8 гб, скоростные диски....

А если в макросе QWERT сделать что бы он брал рабочую область по выделению, выделил кусок - сделал и т. д. ?

Вордовский макрос и через эксель работает, даже быстрее.
Код:
Sub W140529_1209()
Dim S1, S2, J1, J1K, J2, jp
jp = 32
Reset
Open "C:\RAB\16_HEX.TXT" For Input As #1
Open "C:\RAB\32_HEX.txt" For Output As #2
Line Input #1, S1
    J1K = Len(S1)
        J1 = 1
            J2 = 0
        Do While J1 < J1K
            S2 = Mid(S1, J1, jp)
        Print #2, S2
            J2 = J2 + 1
        J1 = J1 + jp
Loop
Close #1
Close #2
Debug.Print Now, J2, J1K
End Sub

Последний раз редактировалось valerij; 25.10.2014 в 22:56.
valerij вне форума Ответить с цитированием
Старый 25.10.2014, 23:12   #8
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Читать можно построчно
Довольно бысрый вариант через CreateObject("Scripting.FileSystemO bject")
есть ещё более быстрый вариант. Читать большими блоками.
Именно в данном случае, думаю, он подойдёт. Надо порыться в кирпичах и иметь образец файла.
Вопрос обсуждался. Были хорошие быстрые решения
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 25.10.2014, 23:14   #9
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Line Input #1, S1 , насколко я помню, был медленный вариант
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 26.10.2014, 09:19   #10
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Читать можно построчно
Довольно бысрый вариант через CreateObject("Scripting.FileSystemO bject")
есть ещё более быстрый вариант. Читать большими блоками.
Именно в данном случае, думаю, он подойдёт. Надо порыться в кирпичах и иметь образец файла.
Вопрос обсуждался. Были хорошие быстрые решения
Для меня это не понятно
alex77755
Если я поменял не 32 символа в строке - как в HEX редакторе, а 16 - как в Total Commander при сравнении файлов, так более удобней, больше отсеиваются данных, то в вашем макросе ничего не надо менять?
Проверил, всё работает, оптимально по 30 000 строк, терпимо обрабатывает.
valerij вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить два ассоциативных массива и вывести одинаковые значения. livesport PHP 1 20.10.2012 15:10
Выдать кол-во суммируемых элементов,сравнить значения(Pascal) reprain Помощь студентам 0 07.10.2012 21:51
Выдать кол-во суммируемых элементов,сравнить значения(Pascal) reprain Помощь студентам 14 07.10.2012 20:59
поиск hex значения в бинарном файле (большого объема) witia03 Общие вопросы Delphi 10 23.05.2012 20:25
ADoQuery inputbox сравнить значения detalik Помощь студентам 2 18.05.2011 08:31