Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скорая обработка данных 
:(
    Опции темы
Lazin
Дата 24.6.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(W4FhLF @  24.6.2009,  06:16 Найти цитируемый пост)
А если файлы огромные(по несколько сотен мегабайт) и размещать их в памяти проблематично, то можно завести буфер и читать туда файл кусками. Короче задача минимизировать количество обращений к HDD.

можно использовать обычный std::ifstream, он буферизует чтение
PM MAIL Skype GTalk   Вверх
W4FhLF
Дата 24.6.2009, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



У автора исходник на Си.


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
xvr
Дата 24.6.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Данные нужно грузить целиком, ну или хотя бы подряд. Многочисленные fseek в коде очищают буфер чтения файла, следующий fscanf закачивает буфер (что гораздо больше, чем ему удасться прочесть до следующего fseek)
В результате всякая буферизация отсуствует, а файл читается С библиотекой МНОГОКРАТНО.

PM MAIL   Вверх
gordmiand
Дата 25.6.2009, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



подскажите пож-та как конкретно загружать файл блоками (какими именно) и главное как потом работать с данным массивом посимвольно...

я делал так:
Код

FILE *potdan;
char mas[100000][17];
potdan=fopen("c:\\f1.reg","rb");
fseek(potdan,512, SEEK_SET);
for (int i=1; i<=100000 (??? не знаю № конечной строки файла); i++)
 for (int j=1; j<=16; j++)
   fscanf(potdan,"%c",&mas[i][j]); 
fclose(potdan);

большой разницы с пред. вариантом (с fseek-ами) по скорости нет...
PM MAIL   Вверх
xvr
Дата 25.6.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Про fscanf забудьте (и про все семейство scanf)
Читать надо с помощью fread, обрабатывать строковыми функциями (str* и/или mem*)

PM MAIL   Вверх
gordmiand
Дата 26.6.2009, 05:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



хотелось бы конкретный пример, позволяющий в дальнейшем оперировать с каждым символов файла...
PM MAIL   Вверх
gordmiand
Дата 26.6.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

int I=0;
FILE *p;
char mas[150000][16];

p=fopen(“c:\1.reg”,"rb");
fseek(p,512, SEEK_SET); 

// fread(mas, 1, 40000, p); // вариант 1

while(!(feof(p))) // вариант 2
{
I++;
for (int J=1; J<=16; J++)
fscanf(potdan,"%c",&mas[I][J]);
}


fclose(p);

for (int i=0; i<40000; i++)                                        //8
s1->Cells[0][i]=IntToHex((int)(unsigned char)mas[i][9] ,2);


почему при варианте №2 9-ый столбец считанных из файла данных получается верным, а при варианте №1 тот же столбец (но под №8, так как данные записываются с [0][0] …– а как сделать запись с использованием fread, начиная с произвольного № элемента массива (mas)???) записывается неверно…. Мне надо скачать из бинарного файла и записать в массив 40000(например) строк по 16 байт (символов) в каждой строке…










Это сообщение отредактировал(а) gordmiand - 26.6.2009, 19:11
PM MAIL   Вверх
xvr
Дата 27.6.2009, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(gordmiand @ 26.6.2009,  19:11)
почему при варианте №2 9-ый столбец считанных из файла данных получается верным, а при варианте №1 тот же столбец (но под №8, так как данные записываются с [0][0]

Потому что в С (и в С++) массивы индексируются с 0. Вариант 2 у вас в принципе неправильный - происходит переполнение по 2му индексу массива (индекса 16 быть не может - максимум 15)
Цитата

 …– а как сделать запись с использованием fread, начиная с произвольного № элемента массива (mas)???) записывается неверно….

Код

fread(&mas[10], 1, 40000, p); 

Цитата

 Мне надо скачать из бинарного файла и записать в массив 40000(например) строк по 16 байт (символов) в каждой строке…
У вас это и написано, но к массиву надо потом правильно обращаться (это не Pascal!)

PM MAIL   Вверх
gordmiand
Дата 1.7.2009, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



понятно...а что значит "к массиву надо потом правильно обращаться (это не Pascal!)"?
чем мой вывод значений массива из примера выше неверен?
PM MAIL   Вверх
xvr
Дата 1.7.2009, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(gordmiand @ 1.7.2009,  15:54)
понятно...а что значит "к массиву надо потом правильно обращаться (это не Pascal!)"?

Индексы начинаются с 0, в Pascal с 1 (по умолчанию)
Цитата

чем мой вывод значений массива из примера выше неверен?
Вывод верен, а ввод - нет

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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