Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение из *.csv файла по частям (порциями) 
:(
    Опции темы
13th_piligrim
Дата 14.10.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 14.10.2007

Репутация: нет
Всего: нет



Всем, здравствуйте. Нужна помощь.
Есть *.csv файл достаточно большого размера. Нужно организовать чтение из этого файла и отображение его в таблицу. Необходимо осуществлять навиацию (перемещение на одну запись / страницу (Н записей) вверх и вниз, перемещение в начало и конец файла). По условию данные из файла необходимо считывать порциями (частями). Открыл файл - считал Н строк - закрыл файл. Вот в это то и заключается главная проблема - как перейти от начала файла к нужной строке для ее считывания, не считывая промежуточные? Если считать целиком весь файл построчно с распознаванием полей, то проблем нет никаких. А вот как организовать чтение частями?
PM MAIL   Вверх
1stain
Дата 14.10.2007, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 486
Регистрация: 30.7.2007
Где: Киев - Харьков

Репутация: 8
Всего: 40



не гарантирую, что это оптимально
Код

        static Int32 blockLength = 256;
        static Byte[] buffer = new Byte[256];
        static Int32 offset = 0;
        private void readBlockBtn_Click(object sender, EventArgs e)
        {
            using ( BinaryReader reader = new BinaryReader(File.OpenRead(textBox1.Text), Encoding.GetEncoding(1251)))
            {
                if (reader.BaseStream.Length <= offset)
                    return;

                blockLength = System.Math.Min(blockLength, (Int32)reader.BaseStream.Length - offset);
                reader.BaseStream.Position = offset;
                buffer = reader.ReadBytes(blockLength);
                offset += blockLength;
                String blockString = Encoding.GetEncoding(1251).GetString(buffer);
                richTextBox1.Text += blockString;
            }
        }


з.ы. смысл собсно в указании позиции чтения через св-во Position класса Stream

Это сообщение отредактировал(а) 1stain - 14.10.2007, 18:54


--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.3200 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.