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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2014, 09:58   #11
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
Как Excel заставить работать с txt
точно так же как и во всех приложениях со встроенным VBA
Код:
Sub qwert() ' генерирую файл на 5 лимонов записей(все строки из примера
'Предварительно скопипастил строки из примера на 1000 строк
    Dim R, C, T
    Dim m()
    T = Time
    m = Range("A1:B1000")
    Open ActiveWorkbook.Path & "\test.txt" For Output As 1
    For R = 1 To 5000
        For C = 1 To 1000
            Print #1, m(C, 1), m(C, 2)
        Next C
    Next R
    Close
    Debug.Print "Генерация  5 000 000 строк ", T, Time
End Sub

Sub qwerty() ' обрабатываю файл переписываю в новый только не совпавшие строки
    Dim T1 As String * 32, T2 As String * 32, C, T, J
    T = Time
    Open ActiveWorkbook.Path & "\test.txt" For Input As 1
    Open ActiveWorkbook.Path & "\testk.txt" For Output As 2
    Do While Not EOF(1)
    Input #1, T1, T2
        If T1 <> T2 Then ' для записи толко совпавших поменять <> на =
        J = J + 1
            Print #2, T1, T2
        End If
    Loop
    Close
    Debug.Print " Обработка 5 000 000 строк", T, Time, "Осталось " & J
End Sub

Sub qwertyu() ' обрабатываю файл загружаю в ексел на Лист2 блоками по 65000 строк
'Считываю по 2 значения
Close
Open ActiveWorkbook.Path & "\testk.txt" For Input As 1
Dim RZ(1 To 65000, 1 To 2), R, T1 As String * 32, T2 As String * 32, C, T, J
    T = Time
With Лист2
.Cells.NumberFormat = "@": .ColumnWidth = 20: .Cells.Font.Size = 11: C = 1
    Do While Not EOF(1)
       J = J + 1
       Input #1, T1, T2
       R = R + 1: RZ(R, 1) = T1: RZ(R, 2) = T2
       If R = 65000 Then
           R = 0: .Cells(1, C).Resize(65000, 2) = RZ: C = C + 3: Erase RZ
       End If
    Loop
End With
Debug.Print " Загружено в ексел строк " & J & " в " & (C - 1) / 3 & " колонки", T, Time
End Sub
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 26.10.2014, 10:05   #12
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Цитата:
так более удобней, больше отсеиваются данных
Ну я не знаю выших условий отсева.
Я так понял, что отсеивать надо только полностью одинаковые строки.
Т.е. все 32 символа одинаковы.
Отсеивать по равенству первой половины или второй половины?
Грубо так 123456 = 123489 У них первые половины равны. Надо отсеивать?
Кстати результат работы процедур

Генерация 5 000 000 строк 8:30:55 8:31:19
Обработка 5 000 000 строк 8:33:58 8:34:23 Осталось 2395000
Загружено в ексел строк 1197500 в 18 колонки 8:48:10 8:48:27
На 5 лимонов 20с это много?
не могу найти пример считывания большими блоками
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 26.10.2014, 10:24   #13
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Я так понял, что отсеивать надо только полностью одинаковые строки.
Грубо так 123456 = 123489
У них первые половины равны. Надо отсеивать?
Кстати результат работы процедур

На 5 лимонов 20с это много?

не могу найти пример считывания большими блоками
Да.
Грубо так 123456 = 123489 не отсеется(123 как не нужны) - 32 символа
а если так
123 = 123 нет - 16 символов
456 = 489 да - 16 символов

По времени просто супер.

Я разделил окрас с отсевом, получил
70 000 строк по 16 символов - отсев, потом окрас ~ 4 мин.

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

Может вам на я/диск сбросить два файла .txt - левая и правая колонка?
Изображения
Тип файла: jpg TT.jpg (88.3 Кб, 119 просмотров)

Последний раз редактировалось valerij; 26.10.2014 в 11:30.
valerij вне форума Ответить с цитированием
Старый 26.10.2014, 10:49   #14
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Если с начала мне было хоть не много понятно, то теперь я совсем потерял суть задачи. Основная задача как звучит-то? надо красить или сеять?
Сеять намного быстрей чем красить. Тем более в таких объёмах. Десятки тысяч строк раскрасить? А зачем? Только не говорите, что потом надо будет фильтровать по цвету.
И потом не понятно какого типа исходные данные. Если они по 32 символа, то почему надо сравнивать только половинки. И если половинки, то какие первые или вторые.
Да и вообще надо ли грузить в ексел? зачем это всё? Что делать потом с результатами?
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 26.10.2014, 11:02   #15
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Если с начала мне было хоть не много понятно, то теперь я совсем потерял суть задачи. Основная задача как звучит-то? надо красить или сеять?
Сеять намного быстрей чем красить. Тем более в таких объёмах. Десятки тысяч строк раскрасить? А зачем? Только не говорите, что потом надо будет фильтровать по цвету.
И потом не понятно какого типа исходные данные. Если они по 32 символа, то почему надо сравнивать только половинки. И если половинки, то какие первые или вторые.
Да и вообще надо ли грузить в ексел? зачем это всё? Что делать потом с результатами?
И сеять и красить.
Ни каких фильтров, все раскрасы сохраняются по ним будут правки..
Конечная задача найти данные в прошивке отвечающие за
Цитата:
Firmware V2.1.0 - Mar 4 2013
1. Add night rec. brightness levels to 5 levels (Level 1 ~ 5)
2. Add daytime color intensity level
1. Добавить уровни яркости rec. ночь до 5 уровня (уровень 1 ~ 5)
2. Добавить дневной уровень интенсивности
Почему 16, а не 32(в принципе - неважно, 16 удобней из - за тотала).
Как в тотале, только в нём прекрасно всё видно, я так битрейт поднял с 8 до 18.
Отсеяв совпадения, получил результат.
Затем этот результат, сравню с последней прошивкой в ней уже есть данные дневной уровень интенсивности, отсеется ещё >> часть из моего готового.
Когда будет окончательные данные, можно править прошивку.

alex77755
Всё сделал, отсеял, подсветил, получил, что хотел.
Далее буду сравнивать, сеять.... )

СПАСИБО!!!!!!!!!

Последний раз редактировалось valerij; 26.10.2014 в 13:17.
valerij вне форума Ответить с цитированием
Старый 30.10.2014, 10:29   #16
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
точно так же как и во всех приложениях со встроенным VBA
alex77755!!
Только увидел, решил пройтись по приведенному
.

1. беру с примера и вставляю в test.txt - 32 символа
2. запуская макрос qwert, файл test.txt, стал 76,2 мб - отлично, но открыв его в Notepad++ там только
количества строк 5 000 001, а данных нет.
3. Запускаю макрос qwerty, создаётся файл testk = 0 мб

Не используя п. 1, свои данные [А1:В530388] вставляю по 16 символов(в макросе меняю 32 на 16 - 4 шт.)

2. файл test.txt - 17,7 мб
3. Запускаю макрос qwerty, создаётся файл testk = 11,3 мб
4. Запускаю макрос qwertyu - исправил.

Изменил так, всё ОК
With Лист2.Columns("A:B")

Не пойму, почему в qwertyu() = 65 000?
Ведь в testk.txt строк 259 508!!

Это не работает
Debug.Print " Загружено в ексел строк " & J & " в " & (C - 1) / 3 & " колонки", T, Time
Так пишет
MsgBox " Загружено в ексел строк " & J & " в " & (C - 1) / 3 & " колонки", T, Time

Цитата:
Загружено в ексел строк 129754 в 1 колонки
а по факту 65 000, что это за демоническое число 129754??

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

Это при работе в 2003 если строк больше 65000, то пишет в колонки со смещением 3
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 30.10.2014, 22:25   #18
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Это при работе в 2003 если строк больше 65000, то пишет в колонки со смещением 3
А-а, понял, всё переделал под 2010, теперь всё ОК!!
Спасибо.
valerij вне форума Ответить с цитированием
Старый 31.10.2014, 19:06   #19
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

alex77755!!
А как бы вы сделали для 2010?
У меня не получается вывести две колонки - А и В
при 65 000 это каша какая-то, значения одной колонки, влазят в другую ....

Если в qwertyu() меняю 65 000 на свои 259 751, то ваще ничего не выводит на Лист2

Пришлось довольствоваться одной, первой колонкой в testk.txt
И макрос такой
Код:
Sub qwertyu() ' обрабатываю файл загружаю в ексел на Лист2 блоками по 65000 строк
'Считываю по 2 значения
Close
Open ActiveWorkbook.Path & "\testk.txt" For Input As 1
Dim RZ(1 To 259751, 1 To 2), R, T1 As String * 16, T2 As String * 16, C, T, J
    T = Time
With Лист2.Columns("A:A")
.Cells.NumberFormat = "@": .ColumnWidth = 25: .Cells.Font.Size = 14: C = 1
    Do While Not EOF(1)
       J = J + 1
       Input #1, T1 ', T2
       R = R + 1: RZ(R, 1) = T1 ': RZ(R, 2) = T2
       If R = 259751 Then
           R = 0: .Cells(1, C).Resize(259751) = RZ: Erase RZ
       End If
    Loop
End With
MsgBox " Загружено в ексел строк " & J & " в " & C & " колонки", T, Time
End Sub
И ещё вопрос, что означает #2?
Print #2, T1, T2

Да, скоростя, мгновенно!!!!!!!!

Спасибо.

Последний раз редактировалось valerij; 31.10.2014 в 19:09.
valerij вне форума Ответить с цитированием
Старый 01.11.2014, 11:11   #20
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Код:
Print #2, T1, T2
Печатать в файл открытый под номером 2 (As 2)
Две переменных Т1 и Т2
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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