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

Чтение файла - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
06.08.2011, 15:49     Чтение файла #1
Здравствуйте. Подскажите, пожалуйста, как прочитать файл с конца? Т.е. у меня записаны числа в файле 1 2 3 и т.д., а вывод 3 2 1.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2011, 15:49     Чтение файла
Посмотрите здесь:

C++ чтение из файла
Чтение из файла C++
Чтение из файла C++
чтение из файла C++
C++ Чтение из файла. СИ++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
06.08.2011, 15:54     Чтение файла #2
Открыть для чтения с конца. Потом использовать seekq()
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.08.2011, 16:30     Чтение файла #3
Как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
void reverse_print(const char * filename = ""){
    static std::ifstream in(filename);
    int x;
    in >> x;
    if (!in)
        return;
    reverse_print();
    std::cout << x << ' ';
}
int main(){
    reverse_print("input.txt");
}
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
06.08.2011, 19:58     Чтение файла #4
diagon, подобный способ остроумен. Я его написал в Экспересс-курсе. Но не сработает для большого файла. Упрешься в размер стека.
Сыроежка
Заблокирован
06.08.2011, 20:08     Чтение файла #5
Цитата Сообщение от diagon Посмотреть сообщение
Как вариант
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <fstream>
void reverse_print(const char * filename = ""){
    static std::ifstream in(filename);
    int x;
    in >> x;
    if (!in)
        return;
    reverse_print();
    std::cout << x << ' ';
}
int main(){
    reverse_print("input.txt");
}
Помимо того, что делать такие функции рекурсивными крайне опасно, ваша функция вообще является функцией одноразового использования, так как параметр с именем файла будет просто игнорироваться при последующих вызовах, если пользователь захочет работать с другим файлом.
-=ЮрА=-
Заблокирован
Автор FAQ
07.08.2011, 10:51     Чтение файла #6
Как вариант
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
#include <stdio.h>
#include <string.h>
#include <conio.h>
 
int main()
{
    int sLen;
    char * s;
    char * buf;
    FILE * f;
    if(!(f = fopen("input.txt","rb+")))
        printf("EROR ACCES TO input.txt\r\n");
    else
    {
        fseek(f,0,SEEK_END);//Позиционируем курсор вконец файла, чтобы узнать его размер
        sLen = ftell(f);//Получаем текущую позицию курсора, т.к. он вконце - это и будет его длиной файла 
        fseek(f,0,SEEK_SET);////Позиционируем курсор вначало файла, чтобы узнать начать чтение
 
        s = new char[sLen];
        fread(s,1,sLen,f);
        fclose(f);
        s[sLen] = '\0';//Отсекаем мусор вконце строки s
        buf = strrchr(s,' ');
        while(buf)
        {
            printf("%s",buf);
            s[sLen - strlen(buf)] = '\0';//обрезаем строку на величину выведенных символов
            buf = strrchr(s,' ');
            sLen = strlen(s);
        }
        if(s)
            printf(" %s\r\n",s);
    }
    printf("Press any key to continue");
    getch();
    return 0;
}
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.08.2011, 11:16     Чтение файла #7
Цитата Сообщение от -=ЮрА=-
C++
1
s[sLen] = '\0';//Отсекаем мусор вконце строки s
запись за пределы выделенной памяти
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
07.08.2011, 13:35     Чтение файла #8
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Открыть для чтения с конца. Потом использовать seekq()
Допустим для бинарного файла такой способ подойдет, а если файл будет текстовый, и числа будут разной разрядности?
-=ЮрА=-
Заблокирован
Автор FAQ
07.08.2011, 15:24     Чтение файла #9
Цитата Сообщение от accept Посмотреть сообщение
запись за пределы выделенной памяти
-очень эффективно работает, если не cделать - всегда цепляется мусор вконце строки, много раз проверял - работает, притом кто мне заприщает обнулять блок памяти по адресу &s[sLen] - ???
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.08.2011, 15:27     Чтение файла #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
-очень эффективно работает, если не cделать - всегда цепляется мусор вконце строки, много раз проверял - работает, притом кто мне заприщает обнулять блок памяти по адресу &s[sLen] - ???
s[sLen] - sLen + 1ый элемент массива, а память выделили всего под sLen штук.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 16:15     Чтение файла
Еще ссылки по теме:

Чтение из файла. C++
C++ Чтение из файла
Чтение из файла!) C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
07.08.2011, 16:15     Чтение файла #11
Sick2, так, или иначе, а какой-то контейнер использовать прийдётся...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main(){
    std::ifstream ifs("numbers.txt");
    if ( ! ifs.is_open() ){
        std::cerr << "Can't open input file!" << std::endl;
        return 1;
    }
    
    std::vector<int> vec;
    std::copy(std::istream_iterator<int>(ifs), std::istream_iterator<int>(), std::back_inserter(vec));
    ifs.close();
    std::copy(vec.rbegin(), vec.rend(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    
    return 0;
}
Yandex
Объявления
07.08.2011, 16:15     Чтение файла
Ответ Создать тему
Опции темы

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