1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
1 | |
Как разбить огромный csv файл30.12.2016, 14:33. Показов 17552. Ответов 51
Добрый день, помогите решить задачу: есть ексель файл на 5000 строк и есть огромный csv файл на 1,16 Гбайт, нужно найти совпадающие значения в этих файлах пробовал через функцию ВПР находится все до 1000000 строк, а больше ексель не показывает так как стоит ограничение в этом пределе, а сам csv файл предположительно на 50000000 строк я хочу его разбить на 50 меньших файлов и по отдельности произвести поиск совпадающих строк, как это можно сделать? Или подскажите пожалуйста другой способ найти совпадающие строки с моим маленьким файлом и этим огромнейшим csv файлом
0
|
30.12.2016, 14:33 | |
Ответы с готовыми решениями:
51
Как разбить файл на две части, разархивировать и изменить вторую часть, а потом собрать файл обратно? Разделить огромный txt файл на куски и поместить в различные книги excel Как сохранить в csv utf8 кодировки файл из exсel? Как сохранить VBA-массив в CSV-файл без Excel |
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
30.12.2016, 15:07 | 4 |
5000 строк в словарь, затем читаете построчно скриптом текстовый файл и ищите совпадение в словаре, думаю за пару тройку минут может отработать.
1
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
30.12.2016, 18:56 | 5 |
aroma4s, приложите часть Excel файла, часть csv и то, что нужно получить с помощью ВПР.
Без этого будут только общие рассуждения. Добавлено через 10 минут Да, вырезать часть гигового файла тоже проблема Можно сделать с помощью hex-редактора, например HxD https://mh-nexus.de/en/hxd/
0
|
es geht mir gut
11270 / 4752 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
|
||||||
30.12.2016, 22:24 | 6 | |||||
Да, скорее всего могут быть проблемы даже если файл читать не полностью, а построчно.
А с небольшими файлами проблем нет. Вот такой код разбивает файл в 1 млн.строк (примерно 27мегабайт) на файлы по 10000 строк за 10 секунд.
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
||||||
31.12.2016, 00:23 | 7 | |||||
SoftIce, я имел в виду - как взять часть огромного файла, чтобы выложить на форум. Ведь Блокнотом его не откроешь, а через Excel долго и при сохранении могут возникнуть искажения.
Вот код, которым можно получить первые 1000 строк большого файла менее чем за секунду:
0
|
1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
31.12.2016, 02:00 [ТС] | 8 |
База данных недействительных паспортов
Понимаете, вы умнее меня и я не понимаю что вы имеете ввиду, можете подробно объяснить как это реализовать Добавлено через 2 минуты SoftIce, База данных недействительных паспортов Понимаете, вы умнее меня и я не понимаю что вы имеете ввиду, можете подробно объяснить как это реализовать? Добавлено через 1 минуту bedvit, Я как то читал что можно загрузить csv в access и потом разбить на подмножества, не подскажите как это можно сделать? Добавлено через 3 минуты Hugo121, Можете подробней рассказать как загрузить в словарь и как считать такое количество строк? Добавлено через 10 минут Казанский, приложить не могу так как на работе нету доступа к интернету и копировать на флешку файлы нельзя, В кратце: я делаю один лист со своими 5000-ми значениями, и второй лист на 1000000 значений с помощью впр искомые значения из 1-го листа ищутся во 2-м листе, если одинаковые значения есть то напротив строки со значением выводится тоже самое значение, если таких значений во 2-м листе нет то пишется Н/Д т.е. недопустимое данное, имеется ввиду что совпадений нет мне нужно разбить 50000000 строчный файл по 1000000, чтобы я мог вставлять во второй лист и тем самым искать совпадающие значения Добавлено через 8 минут SoftIce, Казанский, я думаю VB используется для видимых значений т.е. до 1000000, но никак не те что за границей поэтому я думаю тут либо нужно какой нибудь отдельный скрипт *.vbs написать либо как то с помощью access сделать подмножества cvs файлов моя функция ВПР примерно выглядит так =ВПР(A7;'Лист2'A:A;1;ЛОЖЬ)
0
|
11508 / 3794 / 681
Регистрация: 13.02.2009
Сообщений: 11,197
|
||||||
31.12.2016, 08:39 | 9 | |||||
Слушай Hugo121! Зря не скажет!
Примерно так:
2
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
01.01.2017, 22:21 | 10 |
Как вариант кода Alex77755 - можно массив m делать из одного столбца, а для результатов создать такой же пустой, который в финале выгрузить рядом с исходными данными - так сэкономите память и вероятно чуть скорость - после того, как данные помещены в словарь, этот массив m можно убить, он больше не нужен.
Или как другая вариация - совпавшие (или несовпавшие) номера собирать в коллекцию, которую в финале выгрузить куда-нибудь - так сразу получите только нужные номера.
0
|
1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
03.01.2017, 15:11 [ТС] | 11 |
Alex77755, спасибо что предложили вариант решения, попробую сделать, только вопрос что за зелёный комментарий выглядящий как код, его нужно писать?
Добавлено через 11 минут Hugo121, спасибо что сказали, но на словах можно сколько угодно объяснять но мне все равно не понять как это реализовать
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
03.01.2017, 18:05 | 12 |
- согласен. Это же могу адресовать и Вам
Код Вам уже дали, а файлов никто не видел... Я обычно жду файла, чтоб впустую не работать - судя по теме это верный подход, раз при уже наличии кода возникают вопросы. А зелёный комментарий это и есть комментарий, он только для информации, можете его не копипастить
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
03.01.2017, 20:02 | 13 |
значит, запомните или запишите на бумажку структуру csv файла (не данные!). Надо понять:
- сколько там полей (т.е. столбцов при импорте в Excel); - что является разделителем полей - запятая или точка с запятой; - значения в целевом столбце записаны как числа или как текст (в кавычках). Потом в другом месте, где есть доступ к инету, воссоздайте csv файл из нескольких строк с произвольными данными, воссоздайте Excel файл, убедитесь, что та же формула с ВПР работает правильно (фактически нужна функция ПОИСКПОЗ, но не суть), и выложите это все сюда. Предложение по алгоритму: сначала из Excel файла в словарь (или коллекцию), как в примерах выше, а потом в цикле по значениям из csv удалять из словаря ключи, тем самым уменьшая его и ускоряя процесс. В конце останутся только те ключи, которых не нашлось в csv файле.
0
|
1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
09.01.2017, 10:51 [ТС] | 14 |
Hugo121, Казанский,
Попробую сегодня-завтра пример скинуть, но они думаю особо не помогут В общем я сейчас на работе написал этот код в модуль, пишет invalid outside procedure, написал в лист вроде что то делает но пишет что ексель не отвечает при этом оперативная память на неё постоянно растёт, не знаю сколько ждать нужно но сейчас жду может выведет что, стоит ли ждать больше 20 мин или это бесполезно и в коде что то не так написал? Добавлено через 30 минут Закрыл это файл и vba написал out string space
0
|
1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
10.01.2017, 00:52 [ТС] | 15 |
Hugo121, Казанский,
Вот очень маленькая модель того что я делал, в моём файле объединил серию и номер с запятой, чтоб было также как в csv файле, затем на второй лист в моём файле копировал значения с csv файла и с помощью функции ВПР находил что совпадает, а что не совпадает пишет Н/Д. По сути всё ок, но проблема что если с csv начать импорт с 2000000, то он выдаст только одну под этим номером ячейку остальные импортировать не хочет
0
|
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
|
|
10.01.2017, 00:56 | 16 |
Не нужен "Часть гигантского файла.csv.xlsx", нужен оригинальный файл.csv но не весь, а например пара сотен строк с начала.
0
|
1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
10.01.2017, 01:15 [ТС] | 17 |
Hugo121,
Так это и есть по сути оригинал, он отличается только форматом, сюда csv загрузить нельзя, если переименуете формат тоже самое будет К тому же как вывести только определенные строки из csv файла без использования копирования? Если интересен прям оригинал в поиске пишите база данных недействительных паспортов и сразу в первой ссылке можете ее полностью скачать
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
10.01.2017, 03:13 | 18 |
Правильно, отличается. Сохранив ваш csv.xlsx как csv, вполне можно не получить исходный csv.
Поймите наконец, что предлагаемые Вам решения НЕ БУДУТ вносить данные из csv на лист. Все будет происходить в коде, а для него крайне важны детали того, как "устроен" csv - см. #13. В архиве - можно. Конечно, копирование необходимо. Но без преобразования формата! Лучше всего с помощью HEX-редактора, см. #5. Или простого макроса, см. #7. Бл@... а сразу нельзя было сказать? Это, что ли? http://services.fms.gov.ru/inf... m?sid=2000 И к чему вся секретность, если данные в открытом доступе лежат? Вот кстати уже есть решение по оптимизации поиска в этой базе: https://habrahabr.ru/post/307568/ Я ссылку на файл оттуда взял.
0
|
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
|
|
10.01.2017, 03:27 | 19 |
Ну вот, пока писал пост, файл скачался и распаковался.
Разделителем строк в нем служит vblf, то есть chr(10), так что все коды с Line Input идут лесом Вот часть файла... на сегодня все.
0
|
1 / 1 / 0
Регистрация: 07.05.2013
Сообщений: 34
|
|
10.01.2017, 20:31 [ТС] | 20 |
Казанский,
Я говорил про свой файл, а про эту базу сразу в начале сказал как с помощью метода из статьи хабра можно проверить 5000 наименований? как вы его разделили? ну а вообще я видел информацию про разделения, но они для видимых значений, а больше миллиона он не увидит
0
|
10.01.2017, 20:31 | |
10.01.2017, 20:31 | |
Помогаю со студенческими работами здесь
20
Как разбить большой файл сохранив макросы во всех частях? Как разбить CSV файл на отдельные файлы Запись в CSV-файл из массива. Не является форматом csv! Огромный EXE Файл , Нужна помошь Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |