Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Aspirin
29 / 6 / 2
Регистрация: 05.10.2012
Сообщений: 117
1

Долго считывается информация с файла

22.08.2014, 13:26. Просмотров 395. Ответов 11
Метки нет (Все метки)

У меня такая проблема, программа долго считывает данные с файла, компилю в VS2013. Вот кусок кода:
C++
1
2
3
4
5
6
7
8
9
10
11
    ifstream in("input.txt");
    ofstream out("output.txt");
    
    int a[100000];
    int n = -1;
    while (!in.eof())
    {
        n++;
        in >> a[n];
 
    }
Я засек, 10000 чисел считывает 12 секунд, так и должно быть?
В делфи 1000000 чисел считывает мгновенно. Что за фигня?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.08.2014, 13:26
Ответы с готовыми решениями:

Как считывается информация с файлов?
Объясните кто-нибудь как производить считывание информации с файлов и вообще...

Структуры.не считывается из файла
Всем привет! Ребят,тут такое дело,вобщем задали нам лабу написать.Нужно было...

Не считывается строка из файла
Есть динамический массив символов (поле класса). При считывании из файла выдаёт...

Неправильно считывается структура из файла
Записываю структуру А в файл, затем считываю в структуру В. Символы считываются...

Не выводится информация из файла
не выводится информация с файла! #include <iostream> #include <fstream>...

11
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 13:58 2
Пробовали объявить массив глобально?
0
Aspirin
29 / 6 / 2
Регистрация: 05.10.2012
Сообщений: 117
22.08.2014, 14:00  [ТС] 3
А какой в этом смысл? Попробовал на всякий случай, но ничего не изменилось.
0
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 14:08 4
Так не пойдет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <iostream>
 
using namespace std;
 
int a[100000];
 
int main()
{
    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);
 
    for (int i = 0; i < 100000; i++)
        cin >> a[i];
}
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
22.08.2014, 14:14 5
Скинь файл, который считываешь.
0
Jupiter
22.08.2014, 14:20
  #6

Не по теме:

Цитата Сообщение от Aspirin Посмотреть сообщение
C++
1
2
3
4
5
6
int n = -1;
while (!in.eof())
{
    n++;
    in >> a[n];
}
C++
1
2
3
4
int n = -1;
while (n < 100000 && in >> a[++n])
{
}

0
Aspirin
29 / 6 / 2
Регистрация: 05.10.2012
Сообщений: 117
22.08.2014, 14:39  [ТС] 7
Количество данных заранее неизвестно, так что надо использовать eof.
freopen у меня не работает, пишет функция небезопасна, попробовал через freopen_s, также долго считывает.
Вот файл.
0
Вложения
Тип файла: rar input.rar (264.3 Кб, 6 просмотров)
DieMore
3 / 3 / 2
Регистрация: 21.08.2014
Сообщений: 17
22.08.2014, 14:47 8
Тупанул,простите.
Так пробовали?
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
#include <fstream>
#include <iostream>
 
using namespace std;
 
int a[100000];
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    
 
    int n = 0;
 
    while(!fin.eof()) {
 
        fin >> a[n++];
    }
    fout << n;
 
    fin.close();
    fout.close();
}
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
22.08.2014, 14:48 9
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
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <time.h>
 
int main(void)
{
    std::ifstream in("input2.txt");
 
    int * a = new int [1000000];
    int n = 0;
 
    clock_t time_start = clock();
    while (!in.eof())
    {
        in >> a[n++];
    }
    clock_t time_stop = clock();
 
    delete [] a;
 
    double duration = (double)(time_stop - time_start) / CLOCKS_PER_SEC;
    std::cout << "Loaded " << n - 1 << " numbers in " << duration << " secs." << "\n";
    system("pause");
}
0
Миниатюры
Долго считывается информация с файла  
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
22.08.2014, 14:50 10
Это с твоим файлом. 1 000 000 чисел считывает приблизительно 2.5 секунды.
Может, у тебя какой-нибудь жёсткий антивирус стоит, который твою прогу подозрительной считает и каждое её действие проверяет? Как вариант...
0
Aspirin
29 / 6 / 2
Регистрация: 05.10.2012
Сообщений: 117
22.08.2014, 15:31  [ТС] 11
Вообщем главная проблема была в точке останова. Я поставил условие n==10000 и запускал, чтобы проверить время. Не знал, что она столько времени отнимает.
John Prick, вставил ваш код, время заняло 0.7 на 100000.
3000000 считало за 20 с. Как-то медленно, это может зависеть от компилятора? Я уж думал VS побыстрее Delphi будет, в Delphi те же 3000000 считало за 1.1.
0
John Prick
836 / 767 / 258
Регистрация: 27.07.2012
Сообщений: 2,179
Завершенные тесты: 3
22.08.2014, 15:39 12
Цитата Сообщение от Aspirin Посмотреть сообщение
время заняло 0.7 на 100000
Ну как-то в три раза больше, чем у меня. Так это я ещё debug-версию запускал. Release работает в разы быстрее. 1 000 000 чисел за 1.1 сек считал.
0
Миниатюры
Долго считывается информация с файла  
22.08.2014, 15:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2014, 15:39

Как считывать информация с файла по байтам
У меня есть файл, выглядит как график, hex-вид : 00000001: 80 01 00 02 00 05...

как сделать что бы информация из файла бралась рандомно
как сделать что бы вопросы из файла брались рандомно. #include &quot;stdafx.h&quot;...

Вывод информации с файла на консоль. Не выводится информация с файлов
Написал прогу для вывода информации из файлов, но что-то пошло не так. Все...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru