Страницы: 1
RSS
Как открыть большой файл БЕЗ потерь
 
Здравствуйте!  
Прошу подсказать, каким образом можно открыть большой файл (около 25 МБ) в формате *.csv таким образом, чтобы не потерять из него никакой информации.  
Если открывать просто в лоб, то эксель выдаёт сообщение, что файл загружен не полностью.
 
{quote}{login=Logan}{date=27.09.2009 07:44}{thema=Как открыть большой файл БЕЗ потерь}{post}...Если открывать просто в лоб, то эксель выдаёт сообщение, что файл загружен не полностью.{/post}{/quote}  
Какой XL - столько строк - 2003 около 65 тыс, 2007 > более мульона. "Разбить" для удобоваримости.
 
У меня в excel 2007 файл есть, которой весить 65 мб в *.xlsx, открывается без проблем.  
Я бы вам посоветовал excel 2007 для открытия больших файлов.
 
Здравствуйте.    
есть excel файл, размер 400мб в нем, приблизительно 8500000 строчек в одном столбце.  
понятно, что открыть его нет возможности без потери данных.  
как можно разбить такой большой файл?  
2 варианта.    
или в одном файле создать много новых листов в каждом будет по 65000.  
или создать много новых файлов эксель.  
 
с уважением. спасибо.
 
Точно файл Экселя?  
 
2007 Excel specifications and limits:  
 
Worksheet size 1,048,576 rows  
 
Думаю, что это текст. Его можно построчно читать куда угодно, разбивая на лету по условиям.
 
Наверное Вы правы. это файл формата CSV.  
можете подсказать, что значит читать куда угодно, разбивая на лету по условиям?  
вопрос чем-то похож на этот  
 http://www.planetaexcel.ru/forum.php?thread_id=26349
 
Погуглите как читать кодом текст построчно (или на сайте EducatedFool примеры кода посмотрите, или вот: http://www.firststeps.ru/vba/excel/r.php?16 )  
Далее считаете строки - пока порог не достигнут, пишите их в одно место, как перевалили - считаете заново и пишите в другое.  
Думаю, вполне приемлемо из одного csv нагенерить десяток других (имя брать родное и дописывать "подномер" - по ссылке firststeps всё в общем есть).
 
Вот, на основе от firststeps (пути поставьте свои, вместо 5 напишите 65000):  
 
Sub Test()  
   Dim s As String, i As Long, ii As Long  
 
   Open "D:\csv\razbitj\пример.csv" For Input As #1  
   ii = 1  
   Open "c:\" & ii & ".txt" For Output As #2  
   While Not EOF(1)  
       i = i + 1  
       Input #1, s  
       If i > 5 Then  
           ii = ii + 1  
           Close #2  
           Open "c:\" & ii & ".txt" For Output As #2  
           i = 0  
       End If  
       Print #2, s  
   Wend  
 
   Close #1  
   Close #2  
End Sub
 
Hugo, спасибо большое. буду пробовать.
 
Ну и если идти дальше - то можно кодом сразу из большого файла читать нужную информацию, его не разбивая. Смотря что нужно получить - допустим подсчитать общие суммы по позициям, или количество повторов уникальных (раз там один столбец) можно сразу сделать, читая построчно.  
Ну и хороший вариант - подключить для анализа csv к Access, как в той теме упоминали.
 
Hugo, все работает.  
спасибо большое.  
только такой вопрос.  
в моем файле данные записанны, в таком виде в одну ячейку  
01.03.2012 00:00:00.144,12,13,1.20,2.25 первая ячейка  
01.03.2012 00:00:00.287,13,15,1.30,2.35 вторая ячейка  
разделитель - запятая.  
после Вашего макроса оно так и записывает.  
01.03.2012 00:00:00.144  
12  
13  
1.20  
2.25  
я вычитал, чтобы он не считал запятую разделителем нужно вставить Line Inpute.  
но пока не получилось.  
 
как сделать, чтобы он так и записывал  в новый файл,в таком же виде, как в исходном?  
с ув.  
 
p.s. есть ли возможность с Вами связаться через скайп или айсикью?
 
Да, с запятыми там была какая-то беда (точно не помню, но сталкивался), я поэтому обычно через FSO текстовые файлы читаю - алгоритм такой же, но механизм немного другой.  
Скайп есть, но тут не дам - пишите к вечеру на почту (в подписи замаскирована), аськи нет.  
Покажите пример своего файла на пару десятков строк - может ещё кто поможет, а я скоро домой (пару часов в сети не буду).
 
Про Line Input это Вы хорошо прочитали (добавил в код слово Line):  
 
Sub Test2()  
Dim s As String, i As Long, ii As Long  
 
Open "D:\csv\razbitj\пример.csv" For Input As #1  
ii = 1  
Open "c:\" & ii & ".txt" For Output As #2  
While Not EOF(1)  
i = i + 1  
Line Input #1, s  
If i > 5 Then  
ii = ii + 1  
Close #2  
Open "c:\" & ii & ".txt" For Output As #2  
i = 0  
End If  
Print #2, s  
Wend  
 
Close #1  
Close #2  
End Sub
 
{quote}{login=Андрей}{date=21.03.2012 02:24}{thema=файл эксель более 400мб}{post}как можно разбить такой большой файл?  
{/post}{/quote}  
В Access его.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Hugo, Вы не получили вчера письмо от меня?  
 
Line вставлял там же, где и Вы в коде.  
но с ним не получается.  
мне кажется, зацикливается и после создания первого фала стоит.  
 
В Access пробовал, спасибо за совет.  
сначала даже обрадовался, но почему-то не получается работать с полученными данными, говорит, что нельзя вносить изменения(
 
Я письма не получал.  
На счёт зацикливания - попробуйте тестово резать файл например по 20 строк и погоняйте код по F8.  
Так сразу будет видно - появляются новые файлы или нет.  
Может быть просто долго процесс идёт.
 
Hugo, не получается понять вашу почту.  
Вам не сложно будет добавить в скайп??  
англ. буквами слово снеговик_  
 
большое спасибо
 
Последнее получил, только там отвечать не на что было :)  
Вечером из дома в скайп  добавлю.
 
Hugo, возникла такая идея  
если учитывать запятые сложно.  
есть ли возможность вставить в ваш код простой счетчик символов?  
01.03.2012 00:00:00.287,13,15,1.30,2.35  
если у нас такой формат...чтобы счетчик посчитал из исходного файла 39 символов, т.е. разделитель четко через 39 символов...  
записал их в одну ячейку и пошел дальше.  
мне кажется, тогда должно получится.  
с ув. спасибо.
 
Вариант Sub Test2() у меня корректно запятые отработал.  
Покажите уже наконец кусок файла строк на 20 - поэксперементируем.
 
EUR/USD,20110901 00:00:00.320,1.43634,1.43649  
EUR/USD,20110901 00:00:00.434,1.43634,1.43648  
EUR/USD,20110901 00:00:01.406,1.43635,1.43647  
EUR/USD,20110901 00:00:02.118,1.43635,1.43646  
EUR/USD,20110901 00:00:02.651,1.43635,1.43646  
EUR/USD,20110901 00:00:03.208,1.43635,1.43645  
EUR/USD,20110901 00:00:03.268,1.43635,1.43646  
EUR/USD,20110901 00:00:03.418,1.43635,1.43645  
EUR/USD,20110901 00:00:09.406,1.43634,1.43645  
EUR/USD,20110901 00:00:09.408,1.43637,1.43645  
EUR/USD,20110901 00:00:09.419,1.43637,1.43647  
EUR/USD,20110901 00:00:09.439,1.43637,1.43648  
EUR/USD,20110901 00:00:09.501,1.43639,1.43647  
EUR/USD,20110901 00:00:09.508,1.43637,1.43648  
EUR/USD,20110901 00:00:09.509,1.43639,1.43648  
EUR/USD,20110901 00:00:09.511,1.43639,1.43647  
EUR/USD,20110901 00:00:09.514,1.43639,1.43648  
EUR/USD,20110901 00:00:09.751,1.4364,1.43648  
EUR/USD,20110901 00:00:09.958,1.43638,1.43648  
EUR/USD,20110901 00:00:09.959,1.43643,1.43648
 
Вполне качественно разбилось.  
Кстати, 39 символов в этом примере не выдерживается. Обычно 45, но не всегда :(
Страницы: 1
Читают тему
Наверх