![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу. Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста". Название темы слишком короткое или не отражает сути вашего вопроса. Тема исчерпала себя, помните, один вопрос - одна тема Прочитайте правила и заново правильно создайте тему. |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 26.12.2008
Сообщений: 73
|
![]()
Задача:
1. В результате вычислений получаю массивы данных типа Ar(1 to 10) необходимо этот массив добавлять в конец csv-файла 2. Затем по ходу работы макроса необходимо вытянуть эти данные из csv-файла, обращаясь к определенному массиву, т.е. вытягивать построчно. Подскажите как реализовать задачу, т.к. с внешними файлами пока не приходилось сталкиваться.
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах ![]() |
![]() |
![]() |
#2 |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]()
Примерно так:
Код:
Также существуют другие способы работы с файлами. |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 26.12.2008
Сообщений: 73
|
![]()
Вот пытаясь разобраться, разбил код на 2 части: экспорт в csv и импорт .
Попытался подкорректировать для теста под свою задачу, чтоб убедиться в работоспособности и правильности результата и наткнулся на ошибку. Все пересмотрел, не могу понять почему выдает ошибку "Type mismastch"? Код:
После генерирования заполняется массив на 10 чисел. А затем на этапе объединения данных в переменную ArrText получаю ошибку. ![]() В догонку... решил все таки проверить Ваш код в чистом виде тоже получил ошибку, но уже другого типа "Input past end of file" в строке Код:
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах ![]() Последний раз редактировалось cent; 26.12.2008 в 17:35. |
![]() |
![]() |
#4 |
Пользователь
Регистрация: 26.12.2008
Сообщений: 73
|
![]()
Разобрался в своей ошибке:
Вместо этой части: Код:
Код:
У кого-нибудь есть еще предложения?
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах ![]() |
![]() |
![]() |
#5 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Если файл используется лишь для временного хранения данных, и осуществлять чтение/запись данных будут только Ваши макросы, - то можно использовать какие-нибудь другие форматы файлов. Я, к примеру, для сохранения в виде файла экземпляров классов использую ini - файлы (чтение и запись произвожу через API-функции) То есть файл выглядит примерно так: Цитата:
|
||
![]() |
![]() |
#6 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Так если выполнение макроса не прекращается, зачем скидывать информацию в файл? Пусть она хранится в памяти... такие массивы, если, конечно, их не миллионы, занимают совсем немного места. Другой вопрос, что может понадобиться пересмотреть структуру хранения данных (например, в некоторых случаях вместо массивов сподручнее использовать коллекции или экземпляры классов). Ну а если наличие файла обязательно, я бы поступил так: 1) при запуске макроса считал бы всё содержимое файла в память 2) во время выполнения макроса работал бы только с массивом данных в памяти (чтение и изменение значений) 3) при завершении макроса выгрузил бы весь массив (частично обновлённый) обратно в файл (с полной перезаписью содержимого файла) |
|
![]() |
![]() |
#7 | ||||
Пользователь
Регистрация: 26.12.2008
Сообщений: 73
|
![]() Цитата:
![]() Поэтому необходимо выгружать "построчно" эти данные во внешний файл. Затем же необходимо так же построчно выдергивать их оттуда для дальшнейших вычислений. Цитата:
![]() Цитата:
Цитата:
![]() Я с удовольствием применю любой вариант, лишь бы он помог решить задачу.
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах ![]() |
||||
![]() |
![]() |
#8 | |
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
![]() Это всего-то 1 847 560 значений. Чтобы набралось 32 Гб, надо, чтобы каждый элемент массива "весил" по 18 кБ... Что такое ужасное Вы храните в этом массиве? Ну а если в массиве хранятся значения ячеек Excel, то смею заметить, что на листе Excel 2003 находится в 9 раз больше ячеек, чем у Вас элементов в массиве. (не говоря уж про Excel 2007) Как в таком случае мой комп с 256 Мб оперативки работает с файлами Excel - не понимаю ![]() А организовать работу с ini-файлами - совсем несложно. У меня есть все наработки. Например: Объявляем WinAPI-функции: Код:
Код:
Код:
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 28.12.2008 в 18:56. |
|
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 26.12.2008
Сообщений: 73
|
![]() Цитата:
![]() но ведь количество строк в листе 65536, а данных в массиве - 184756 строк... на 3 листа хватит. Тем более что это временная информация. Именно поэтому хочется не замыкаться на расположении этих данных внутри листа, а просто вынести их во внешний файл.
Четко сформулированная задача - половина решения!
<= Спасибо оставляем в отзывах ![]() |
|
![]() |
![]() |
#10 | ||
Программист VBA
СуперМодератор
Регистрация: 13.07.2008
Сообщений: 6,858
|
![]() Цитата:
Я поначалу (когда плохо знал Excel и VBA) тоже использовал огромные 3-мерные массивы для хранения информации (отъедавшие по 200 метров памяти)... Как выяснилось позже, при правильной организации хранения информации можно ограничиться 5 - 10 мегабайтами... Так что подробно опишите, чего Вы пытаетесь добиться, прикрепите файл, - а там уж и посмотрим, что можно сделать. Цитата:
Вынос такого количества данных во внешний файл может занять кучу времени. Зачем что-то изобретать, когда Excel как раз и предназначен для хранения информации? Проще во время выполнения макроса создать новый лист (можно невидимый), и скинуть в него все данные. И обращаться к ним будет проще, и посмотреть легко, и сохранится всё вместе с файлом. Только не забудьте один важный момент - запись данных на лист надо производить, не перебирая ячейки в цикле (иначе это будет длиться очень долго), а, сначала сформировав массив, одной командой записать целиком весь массив на лист. Скорость чтения/записи в этом случае будет вполне приемлемой.
__Полезные надстройки для Excel. Парсинг сайтов и файлов.
![]() Последний раз редактировалось EducatedFool; 28.12.2008 в 19:10. |
||
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Формат .csv. | Rashanea | Microsoft Office Excel | 8 | 27.11.2008 15:57 |
Разделители в csv | Aimo | Microsoft Office Excel | 13 | 09.10.2008 17:20 |
Импорт данных из *csv-файлов в БД | bober | Общие вопросы .NET | 3 | 19.08.2008 17:20 |
Поиск *.csv и *.xls файлов | Len@ | Microsoft Office Excel | 18 | 28.07.2008 22:31 |
Из TXT в CSV | CodeName47 | Помощь студентам | 17 | 22.01.2008 09:14 |