|
Модераторы: mihanik |
|
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Добрый день всем!
Стоит следующая задача в текстовый файл сохраняются определенные показатели из программы далее необходимо импортировать каждое значение в отдельную ячейку Экселя . Написал код и алгоритм на отладочном файле все работает . Засунул экселю полный файл - выдает ошибку #9 Начальный код был такой
Буду благодарен всем кто поможет найти решение именно с загрузкой файла в массив так как остальная часть алгоритма уже отлажена и работает С уважением Тимур |
|||
|
||||
kapbepucm |
|
|||
Опытный Профиль Группа: Участник Сообщений: 993 Регистрация: 14.6.2007 Где: Латвия Репутация: 3 Всего: 12 |
У меня работает с файлом, размер которого 27.5MB
-------------------- (С) kapbepucm |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Пожалуйста, процитируйте сообщение об ошибке с точностью до запятой. Попробуйте также вставить перед сбойной строкой нечто вида:
И потом - озаботьтесь к выложенному коду добавить декларации ВСЕХ переменных, которые в нем использованы. С четким указанием где и как именно они определены. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Работает но если вывести Ubound(la) то его значение равно 0 тогда как как вы понимаете оно должно быть отличное от нуля |
|||
|
||||
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Полный код следующий
1.rsm аски файл buf As String использую для загрузки текстового файла в буфер la() As String использую при построковой нарезке файла из буфера в массив la() при обработке файла размером до 4 мегабайт код работатет При попытке обработатать файл размером больше 10 мегабайт в теле цикла For ll = 0 To UBound(la) выдает ошибку с кодом 9 то есть почему то UBound(la)=0 Ошибка же если не ошибаюсь получается из за того что я пытаюсь сослаться на элемент массива UBound(1) который является за пределом начального UBound(0) Вопрос почему код программы при разбиении файла из буфера берет в массив только первую строчку то есть UBound(0) |
|||
|
||||
Akina |
|
||||||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Повторяю:
Да с какой радости сделан именно этот вывод???
Ошибаетесь, ошибаетесь. Я уж и не говорю о том, что изменение итерационной переменной внутри итерационного цикла не является допустимым, поскольку не документирована точка пересчета. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||
|
|||||||
kapbepucm |
|
||||
Опытный Профиль Группа: Участник Сообщений: 993 Регистрация: 14.6.2007 Где: Латвия Репутация: 3 Всего: 12 |
Это сообщение отредактировал(а) kapbepucm - 10.12.2007, 10:12 -------------------- (С) kapbepucm |
||||
|
|||||
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Повторяю:
Может быть я чего то не догоняю но я указал все переменные которые использую массив la() как текстовый buf как текстовый А с такой радости что при загрузке как было написано выше файла меньшего(2М) размера UBound(la)=19516 А при загрузке файла начального размера 16М UBound(la)=0 Если ошибаюсь тогда почему с файлом размером меньше все работатает Вообщем проблема есть помогите разобраться |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Возьмем код последнего постинга. В нем использованы переменные: buf cur la() l fg list2 mmnem ll uu Только первые 4 описаны.
1) Вы проверили, что ноль? Debug.Print, WatchDog или MsgBox выводят именно ноль? 2) Как ведет себя код на файле в 20, 30, 40, 50 тыс. строк? где порог возникновения проблемы? впрочем, сразу проверяйте 32767 и 32768 строк. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
temr |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Я сейчас проверил длину строки элемента массива la(ll) полученного при разделении файла 2М она составляет 131 символ
Длинна строки элемента массива la(ll) полученного при разделении исходного файла 16М составляет 17199180 то есть получается что формируется массив с одним элементом в которому присваивается значение исходного файла Где ошибка ? Как правильно разделить файл ?
Да не описал согласен сорри list2 - рабочий лист куда записываем содержание элементов массива la(ll) mmnem-рабочий лист куда записываем шапки таблиц текстового файла ll uu - переменные типа лонг индексы массива в рамках которого выполняется обработка тескстовых значений
Проверил MsgBox выводит 0
в файле 2М количество строк 19516 он работает соответственно в начальном файле 16 М строк приблизительно 131 000 может быть в этом проблема ? Это сообщение отредактировал(а) temr - 10.12.2007, 14:25 |
||||||
|
|||||||
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Кто нибудь поможет советом?
|
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Вариантов два: 1) не выполняется разделение, если получается более 32к элементов в массиве 2) не выполняется разделение, если длина строки превышает 2М либо 4М Проверить, какой из вариантов правилен, можно только созданием тест-файлов с заданными характеристиками. Выход - в изменении технологии считывания. Скажем, используя string[] System.IO.File.ReadAllLines() -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Akina, спасибо за совет
а не подскажи те как будет выглядеть настоящий код с использованием оператора string[] System.IO.File.ReadAllLines() Тимур |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Нет.
Извольте озаботиться поиском этой информации в МСДН - есть его там. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
temr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Akina, я бы посоветовал будь на вашем месте
Удачи |
|||
|
||||
Правила форума "Программирование, связанное с MS Office" | |
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |