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

Как ускорить работу с файлами? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как поместить в STL-контейнер экземпляры разных классов? http://www.cyberforum.ru/cpp-beginners/thread1800935.html
Как поместить в контейнер экземпляры разных классов(типов) :thank_you:?
C++ Multiple definition: почему компилятор ругается на единственную функцию, используемую в обоих source-файлах? Пихаю хедер в 2 сурсца разных классов. Компилятор ругается на единственную функцию, которую я использую в обоих сурсцах. #ifndef LIB #define LIB void func() {} #endif // LIB Файл: A.cpp http://www.cyberforum.ru/cpp-beginners/thread1800877.html
Почему не работает cout в перегруженной функции? C++
Всем привет. Есть простое заданеие из первых уроков учебника Шитдта о перегрузке функции. Все компелится и работает если бы не одно НО. В функции с аргументами и выходными данными двойнеой точности не работает строка вывода. Я ей вставляю но он никак не реагирует, только возвращает значение. Вот код. #include <iostream> using namespace std; int min(int a,int b); char min(char a,char b);...
C++ Исправить ошибку LNK2019: ссылка на неразрешенный внешний символ (InternetCheckConnection и WinAPI)
Создаю простенькое приложение на winapi с кнопкой и полем edit, по нажатию на которую происходит проверка подключения к интернету и вывод результата в поле: if (InternetCheckConnection("http://ya.ru", FLAG_ICC_FORCE_CONNECTION, 0)) { SendMessage(edit, WM_SETTEXT, NULL, (LPARAM)"Соединение с сетью установлено"); } else { SendMessage(edit, WM_SETTEXT, NULL, (LPARAM)"Нет соединения с...
C++ Скопировать файл xlsx формата, в копию внести изменения и сохранить http://www.cyberforum.ru/cpp-beginners/thread1800777.html
Добрый вечер. У меня есть задача, которая заключается в следующем. Написать консольное приложение, которое скопирует файл xlsx формата, в копию внесет изменения и сохранит. Собственно вот в чем основной вопрос. Как мне это сделать?)) Не прошу сделать за меня. Просто помочь советом и направить. Бесплатных библиотек пока что не смог найти. Если еще короче. Как мне считать данный с файла xlsx...
C++ Найти значение числа Пи по формуле произведения Добрый вечер уважаемые программисты!!! Задача довольно таки не сложная но возникли определенные трудности. Описание задачи: Описать функцию Pi(eps), которая находит значение числа Пи по формуле произведения (т.е. по формуле Валлиса): Пи/2 = 2/1*2/3 x 4/3*4/5 x 6/5*6/7 ... с указанной точностью eps. Обратится к функции со значениями точности 0.01, 0.001, 0.0001. подробнее

Показать сообщение отдельно
Керра
Модератор
 Аватар для Керра
1270 / 438 / 45
Регистрация: 24.08.2011
Сообщений: 2,123
31.08.2016, 23:46  [ТС]     Как ускорить работу с файлами?
Может быть дело в том, что уже почти полночь, но я не понимаю с чего он ругается. Я сделала вот так вот:
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <string>
#include <Windows.h>
#include <vector>
#include <algorithm>
using namespace std;
 
#define DEBUG
 
struct Part {
    char id2[10], name[20];
    bool operator<(char *r) const;
    bool operator>(char *r) const;
    bool operator==(char *r) const;
};
 
bool Part::operator<(char *r) const {
    return (strcmp(id2, r) < 0);
}
 
bool Part::operator>(char *r) const {
    return (strcmp(id2, r) > 0);
}
 
bool Part::operator==(char *r) const {
    return (strcmp(id2, r) == 0);
}
 
struct Line {
    char id1[10];
    vector<Part> vals;
    bool operator<(char *r) const;
    bool operator>(char *r) const;
    bool operator==(char *r) const;
};
 
bool Line::operator<(char *r) const {
    return (strcmp(id1, r) < 0);
}
 
bool Line::operator>(char *r) const {
    return (strcmp(id1, r) > 0);
}
 
bool Line::operator==(char *r) const {
    return (strcmp(id1, r) == 0);
}
 
 
class LineSorter {
public:
    void operator()(Line &l) {
        sort(l.vals.begin(), l.vals.end());
    }
};
 
vector<Line> parse(FILE *f) {
    vector<Line> v;
    char name[20], id1[10], id2[10];
    bool was;
 
    while (!feof(f)) {
        fscanf_s(f, "%s:%s:%s", &name, &id1, &id2);
#ifdef DEBUG
        cout << '[' << name << "] [" << id1 << "] [" << id2 << "]\n";
#endif
        was = false;
        for (vector<Line>::iterator it = v.begin(); it != v.end(); it++)
            if (strcmp(it->id1, id1) == 0) {
                it->vals.push_back(Part());
                strcpy_s(it->vals.back().id2, id2);
                strcpy_s(it->vals.back().name, name);
                was = true;
                break;
            }
        if (!was) {
            v.push_back(Line());
            strcpy_s(v.back().id1, id1);
            v.back().vals.push_back(Part());
            strcpy_s(v.back().vals.back().id2, id2);
            strcpy_s(v.back().vals.back().name, name);
        }
    }
    sort(v.begin(), v.end());
    for_each(v.begin(), v.end(), LineSorter());
#ifdef DEBUG
    system("pause");
#endif
    return v;
}
 
bool find(vector<Line> v, char *id1, char *id2, Line &found) {
    pair<vector<Line>::iterator, vector<Line>::iterator> itPair1 =
        equal_range(v.begin(), v.end(), id1);
    if (itPair1.first != v.end()) {
        pair<vector<Part>::iterator, vector<Part>::iterator> itPair2 =
            equal_range(itPair1.first->vals.begin(), itPair1.first->vals.end(), id2);
        if (itPair2.first != itPair1.first->vals.end()) {
            strcpy_s(found.id1, id1);
            found.vals.clear();
            found.vals.push_back(Part());
            strcpy_s(found.vals.back().id2, id2);
            strcpy_s(found.vals.back().name, itPair2.first->name);
            return true;
        }
    }
    return false;
}
 
void mergeFiles(FILE *f1, FILE *f2, FILE *fRes) {
    /*string one[3], two[3];
    while (!f1.eof() && !f2.eof()) {
        getline(f1, one[0], ';');
        getline(f1, one[1], ';');
        getline(f1, one[2]);
        getline(f2, two[0], ';');
        getline(f2, two[1], ';');
        getline(f2, two[2]);
        if (one[1] == two[0] && one[2] == two[1])
            fRes << one[0] << ';' << two[2] << endl;
    }*/
    vector<Line> v = parse(f1);
    char name[20], id1[10], id2[10];
    Line found;
    while (!feof(f2)) {
        fscanf_s(f2, "%s:%s:%s", &id1, &id2, &name);
        if (find(v, id1, id2, found))
            fprintf(f2, "%s:%s\n", found.vals.back().name, name);
    }
}
 
int main() {
    string file1path, file2path, fileResultPath;
    FILE *file1, *file2, *fileResult;
 
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    cout << "Путь к первому файлу > ";
    getline(cin, file1path);
    cout << "Путь ко второму файлу > ";
    getline(cin, file2path);
    cout << "Путь к файлу для записи результата > ";
    getline(cin, fileResultPath);
 
    file1 = fopen(file1path.c_str(), "rt");
    file2 = fopen(file2path.c_str(), "rt");
    fileResult = fopen(fileResultPath.c_str(), "wt");
 
    if (file1 != NULL && file2 != NULL) {
        mergeFiles(file1, file2, fileResult);
        fclose(file1);
        fclose(file2);
        fclose(fileResult);
        cout << "Готово!\n";
    }
    else
        cout << "Проблема с открытием файлов!\n";
 
    system("pause");
    return 0;
}
А он ругается вот так вот:
Код
1>------ Сборка начата: проект: Work, Конфигурация: Release Win32 ------
1>  main.cpp
1>D:\Programs\Visual Studio 2013 Express\VC\include\algorithm(2618): error C2893: Сбой при специализации функции-шаблона "unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) const"
1>          Со следующими аргументами шаблона:
1>          "_Ty1=char *const &"
1>          "_Ty2=Line &"
1>          D:\Programs\Visual Studio 2013 Express\VC\include\algorithm(2642): см. ссылку на создание экземпляров функции шаблон при компиляции "std::pair<Line *,Line *> std::_Equal_range<Line*,_Ty,__w64 int,_Pr>(_FwdIt,_FwdIt,const _Ty &,_Pr,_Diff *)"
1>          with
1>          [
1>              _Ty=char *
1>  ,            _Pr=std::less<void>
1>  ,            _FwdIt=Line *
1>  ,            _Diff=__w64 int
1>          ]
1>          D:\Programs\Visual Studio 2013 Express\VC\include\algorithm(2655): см. ссылку на создание экземпляров функции шаблон при компиляции "std::pair<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>> std::equal_range<_FwdIt,_Ty,std::less<void>>(_FwdIt,_FwdIt,const _Ty &,_Pr)"
1>          with
1>          [
1>              _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>
1>  ,            _Ty=char *
1>  ,            _Pr=std::less<void>
1>          ]
1>          main.cpp(96): см. ссылку на создание экземпляров функции шаблон при компиляции "std::pair<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>> std::equal_range<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>,char*>(_FwdIt,_FwdIt,const _Ty &)"
1>          with
1>          [
1>              _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>
1>  ,            _Ty=char *
1>          ]
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
В чем дело?..
 
Текущее время: 06:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru