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

Хранение и запись файлов - C++

Восстановить пароль Регистрация
 
xZanuDax
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 2
24.06.2015, 13:19     Хранение и запись файлов #1
Здрасте=)
По учебе с одним хорошим знакомым писали прогу по сортировке и обработке файлов с выводом результата в другой файл. Алгоритм мне ясен, но вот с теорией у меня плоховато.
сортировка
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
char temp[60], tempprev[60];
fstream source;
    source.open((fname + ".loc").c_str(),ios::in | ios::out);
    if (!source) {
        cout << "Cannot open file " << fname << ".loc\n";
        return;
    } else {
        cout<<"\n";
        cout << "Sorting file " << fname << ".loc\n";
        cout<<"[                         ] 0%";
        i = 0;
        lines = filesize((fname + ".loc").c_str()) / 56;
        while (i<=lines) {
            source.seekg(56*sizeof(char)*(i));
            source.seekp(56*sizeof(char)*(i));
            source.read(temp, 55);
            std::string str(temp);
            if (temp != "") {
                h = atoi(str.substr(11,2).c_str());
                m = atoi(str.substr(14,2).c_str());
                if (i == 0) {
                    wasm = m;
                    wash = h;
                    i++;
                } else {
                    if ( wasm*60 + wash*60*60 > m*60 + h*60*60) {
                        source.seekg(56*(i-1));
                        source.seekp(56*(i-1));
 
                        source.getline(tempprev,56);
                        source.getline(temp,56);
 
                        source.seekg(56*(i-1));
                        source.seekp(56*(i-1));
 
                        source<<temp;
                        source.seekg(56*(i));
                        source.seekp(56*(i));
                        source<<tempprev;
                        source.seekg(56*(i-1));
                        source.seekp(56*(i-1));
                        source.getline(temp, 56);
                        std::string str(temp);
 
                        h = atoi(str.substr(11,2).c_str());
                        m = atoi(str.substr(14,2).c_str());
                        wash = h;
                        wasm = m;
                        i-=2;

обработка
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
86
87
88
89
90
91
92
93
94
95
fstream  source((fname + ".loc").c_str(), ios::in);
    lines = filesize((fname + ".loc").c_str()) / 56;
    cout << "Parsing file " + fname + ".loc\n";
    cout<<"[                         ] 0%";
    if (!source.is_open())
        cout << "File " + fname + ".loc can't be opened\n";
    else {
        for (x = 0; x < 120; x ++) {
            for (y = 0; y < 60; y++) {
                map[x][y] = 0;
                locations[x][y] = 0;
            }
        }
        i = 0;
        hits = 0;
        while (!source.eof()) {
            i++;
            getline(source,temp);
            if (temp != "") {
                prefix = temp.substr(0,4) + "\t" + temp.substr(5,2) + "\t" + temp.substr(8,2) + "\t";
                h = atoi(temp.substr(11,2).c_str());
                m = atoi(temp.substr(14,2).c_str());
                hours[h][m]++;
                if (i == 1) {
                    wasm = m;
                    wash = h;
                    hits ++;
                    y = (atoi(temp.substr(27,8).c_str()) + 90) / 3;
                    x = (atoi(temp.substr(36,9).c_str()) + 180) / 3;
                    map[x][y]++;
                } else {
                   }
                    if (h != wash || m != wasm ) {
                        hits = 0;
                        for (x = 0; x < 120; x++) {
                        for (y = 0; y < 60; y++) {
                            if (map[x][y] != 0) {
                                cells[x][y].push_back(
                                  prefix
                                    + (wash < 10 ? "0" + NumberToString(wash) : NumberToString(wash))
                                    + "\t"
                                    + (wasm < 10 ? "0" + NumberToString(wasm) : NumberToString(wasm))
                                    + "\t"
                                    + NumberToString(x) + "\t" + NumberToString(y)
                                    + "\t"
                                    + NumberToString(map[x][y]));
                                for (int i = x; i < 120; i++) {
                                for (int j = y; j < 60; j++) {
                                    locations[i][j] ++;
                                }}
                            }
                            map[x][y] = 0;
                        }}
                        wash = h;
                        wasm = m;
                        }
 
                    y = (atoi(temp.substr(27,8).c_str()) + 90) / 3;
                    x = (atoi(temp.substr(36,9).c_str()) + 180) / 3;
                    map[x][y]++;
                    hits++;
                }
            }
        }
 
        for (x = 0; x < 120; x ++) {
        for (y = 0; y < 60; y++) {
            if (map[x][y] != 0) {
                cells[x][y].push_back(
                  prefix
                    + (wash < 10 ? "0" + NumberToString(wash) : NumberToString(wash))
                    + ":"
                    + (wasm < 10 ? "0" + NumberToString(wasm) : NumberToString(wasm))
                    + ";"
                    + NumberToString(y) + ";" + NumberToString(x)
                    + ";"
                    + NumberToString(map[x][y]));
                for (int i = x; i < 120; i++) {
                for (int j = y; j < 60; j++) {
                    locations[i][j] ++;
                }}
            }
        }}
            for (h= 0;h<24; h++) {
        for (m= 0;m<60; m++) {
        filelist
             << (h < 10 ? "0" + NumberToString(h) : NumberToString(h))
             << ":"
             << (m < 10 ? "0" + NumberToString(m) : NumberToString(m))
             << "\t"
             << hours[h][m]
            << "\n";
            }}
 
    }

main
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
void _tmain(int argc, _TCHAR* argv[]) {
    char cCurrentPath[FILENAME_MAX];
    int h,m;
        for (h= 0;h<24; h++) {
        for (m= 0;m<60; m++) {
           hours[h][m]=0;
            }}
    if (!GetCurrentDir(cCurrentPath, sizeof(cCurrentPath))) {
         return;
    }
    //обрезаем наш путь на 1 символ и ставим в конец ноль-теринаторн
    cCurrentPath[sizeof(cCurrentPath) - 1] = '\0';
    cout << "Current working directory: " << cCurrentPath << "\n\n";
    filetable.open("grid.txt",ios::out);
    filelist.open("timeline.txt",ios::out);
    filecounter.open("counter.txt",ios::out);
    DIR *dir;
    struct dirent *ent;
    if ((dir = opendir (cCurrentPath)) != NULL) {
        while ((ent = readdir (dir)) != NULL) {
            std::string str(ent->d_name);
            if (str.find(".loc") != string::npos) {
                str.resize(str.size() - 4);             sort(str);
                parse(str);
            }
        }
        closedir(dir);
        filelist.close();
        filetable << "Year\tMonth\tDay\tHour\tMinute\tx\ty\tNumber\t\n";
        for (int x = 0; x < 120; x++) {
        for (int y = 0; y < 60; y++) {
            filecounter << cells[x][y].size() << "\n";
            for (int i = 0; i < cells[x][y].size(); i++) {
                filetable << cells[x][y][i] << "\n";
            }
        }}
        filetable.close();
        filecounter.close();
    } else {
        cout << "Cannot access current working directory.\n";
        return;
    }
    getch();
}

Поэтому нужна небольшая помощь.
Как я понял все программа работает по файловому потоку. через созданный объект source.
У меня такой вопрос.
После открытие, для чтения и записи, исходного файла идет присвоение объекту source,этот объект сортируется по возрастанию. Затем после сортировки закрывается. Дальше идет обработка и там он снова открывается, но тока для чтения.об обрабатывается по заданным условиям.
А вот дальше мне не понятно. Пока не закончится сортировка и обработка файлов, выходные файлы лежат пустые.
Вот мне и интересно какой алгоритм здесь вообще? и где хранится вся информация во время сортировки и обработки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2015, 13:19     Хранение и запись файлов
Посмотрите здесь:

Чтение\запись файлов C++
C++ Быстрое чтение и запись файлов
C++ вывод и запись файлов
C++ чтение/запись файлов
Запись бинарных файлов C++
C++ Запись и чтение двоичных файлов
C++ Запись, хранение и предоставление информации из файла
Считывание и запись .bmp файлов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xZanuDax
0 / 0 / 0
Регистрация: 24.06.2015
Сообщений: 2
25.06.2015, 15:19  [ТС]     Хранение и запись файлов #2
вопрос снят
Yandex
Объявления
25.06.2015, 15:19     Хранение и запись файлов
Ответ Создать тему
Опции темы

Текущее время: 03:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru