Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Считать файл в оперативную память построчно - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Редактирование бинарного файла http://www.cyberforum.ru/cpp-beginners/thread722357.html
Суть программы - создаёт бинарный файл и записывает в него строки с количеством и наименованием товара, поставщиком и ценой. всё работает, но как сделать так, что бы можно было редактировать или...
C++ точку нужно отобразить в виде пикселя. как это сделать /*Реализовать класс Graphic, который позволяет рисовать на экране консоли различные геометрические фигуры. Разнести проект по файлам. Предусмотреть методы для отображения: - точки - прямой линии... http://www.cyberforum.ru/cpp-beginners/thread722354.html
C++ Подскажите пожалуйста, изменение строк в векторе
Задача такая: ввести в вектор строки, а потом преобразовать полученное так, чтобы не было заглавных букв, для строк функция tolower, а в векторе подобной нет..как посимвольно прочитать строки в...
C++ простые числа до миллиарда
помогите написать программу на зачёт программа должна считать все простые числа до миллиарда менее чем за 3 минуты (максимум пять) используя решето Аткина или Эратосфена (не обязательно)
C++ Объясните алгоритм нахождения детерминанта матрицы http://www.cyberforum.ru/cpp-beginners/thread722333.html
Есть алгоритм нахождения детерминанта матрицы. не могу выяснить окончательно как работает алгоритм. заранее спасибо за помощь! #include <iostream> #include <cmath> double determ(int** Arr,...
C++ Работа с итерационными выражениями Не могу разобраться с данной задачей... #include <stdio.h> float f(float x, int i) { return pow(x, i) >0.1 ? 0 : 500*(0.1-pow(x, i)); } int main() подробнее

Показать сообщение отдельно
webber
6 / 6 / 0
Регистрация: 21.10.2012
Сообщений: 101

Считать файл в оперативную память построчно - C++

07.12.2012, 15:38. Просмотров 602. Ответов 1
Метки (Все метки)

Условие задачи звучит так: Дан текстовой файл размером не менее 100 Кбайт, содержащий строки различной длины. Считать этот файл в оперативную память построчно. Операцию повторить 20 раз. Характеристика: максимальный размер строк (диапазон изменения 64-128 байт).

Написал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <iostream>
#include <windows.h>
 
using namespace std;
 
#define FileSize 100*1024      
#define M 20                       
#define _rand(min, max) ( rand() % ((max) - (min) + 1) + (min) )
 
int main(){
    
    __int64 c1, c2, fr; 
    byte  *MemoryArea;
    int i, j, k;
    HANDLE File;                
    DWORD c;
    float t,v;
    char chars[93];                  
    const wchar_t *FileName = TEXT("file.txt");
 
    setlocale(LC_ALL, "Russian");
 
//Открываем файл и заполняем его случайными символами на 100Кб  
 
    File = CreateFile(  FileName, 
                        GENERIC_READ|GENERIC_WRITE, 
                        0, 
                        NULL, 
                        CREATE_ALWAYS, 
                        FILE_ATTRIBUTE_NORMAL, 
                        0);  
 
    if (File == INVALID_HANDLE_VALUE || File == NULL){  
            cout << "Ошибка: " << GetLastError() << endl;
            cin.get();
            return 0;
    }
    for(int i=33, n=1; i<=126; ++i, ++n){
        chars[n] = (char)i; 
    }
    MemoryArea=(byte *)GlobalAlloc(GPTR, FileSize);
 
    for (i=0; i<FileSize; i++){ 
        CopyMemory(MemoryArea+i, &chars[_rand(0, 93)], 1);                                          
    }
    WriteFile(File,MemoryArea,FileSize,&c,0);
    
    if(WriteFile==0){
      cout<< "Ошибка" << GetLastError()<< endl;
      cin.get();
      return 0;
    }
    GlobalFree(MemoryArea); 
 
//Копируем получившийся файл в ОП блоками разной длины
 
    for (i=64; i<=128; i*=2){
        t=0.0;
        MemoryArea=(byte *)GlobalAlloc(GPTR,i); 
 
            for (j=0; j<M; j++){
                SetFilePointer(File,0,NULL,FILE_BEGIN);    
                    
                    for (k=0; k<FileSize/i; k++){
                        QueryPerformanceCounter((LARGE_INTEGER *)&c1);
                        
                        ReadFile(File,MemoryArea,i,&c,0);  
 
                        QueryPerformanceCounter((LARGE_INTEGER *)&c2);
                        QueryPerformanceFrequency((LARGE_INTEGER *)&fr);
 
                        t=t+(c2-c1)/(float)fr; //Итоговое время                       
                    }
            }
        t=t/M; //Среднее время
        v=FileSize/(1024*1024*t);//Скорость MB/s
 
        cout << i << "    | " << v << endl;
        GlobalFree(MemoryArea);                             
    }
 
CloseHandle(File);
cin.get();
return 0;
}
Все работает, но сомневаюсь насчет правильности понимания мной условия,
а именно 'содержащий строки различной длины' и 'Считать этот файл в оперативную память построчно'.
Правильно ли я реализовал условие?

Добавлено через 14 часов 56 минут
ап...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru