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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Sick2
14 / 14 / 1
Регистрация: 26.11.2010
Сообщений: 235
#1

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

06.08.2011, 15:49. Просмотров 1147. Ответов 10
Метки нет (Все метки)

Здравствуйте. Подскажите, пожалуйста, как прочитать файл с конца? Т.е. у меня записаны числа в файле 1 2 3 и т.д., а вывод 3 2 1.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2011, 15:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение файла (C++):

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение из файла. Повторное чтение файла - C++
Добрый день. Необходимо реализовать в программе функцию повторного чтения данных из файла, в случае некорректного ввода их в оный. Вот...

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. - C++
#include<iostream> #include<fstream> #include<locale.h> #include<iomanip> #include <cstdlib> using namespace std; struct...

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется - C++
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении, просьба посмотреть его. У меня возникла...

как может корректно выполняющийся оператор >> (чтение из текстового файла) негативно влиять на открытие другого файла? - C++
Друзья! Создадим два текстовых файла, f_0.txt и f_1.txt и что-нибудь в них запизаем, например в первый запихаем 1234 а во второй 5678 и...

Чтение файла с несколькими знаками конца файла - C++
В файле несколько раз встречается ноль, и ни как не получается прочитать его полностью. Как можно решить данную проблему ?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
06.08.2011, 15:54 #2
Открыть для чтения с конца. Потом использовать seekq()
1
diagon
Higher
1929 / 1195 / 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");
}
1
ValeryLaptev
Эксперт С++
1041 / 820 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
06.08.2011, 19:58 #4
diagon, подобный способ остроумен. Я его написал в Экспересс-курсе. Но не сработает для большого файла. Упрешься в размер стека.
0
Сыроежка
Заблокирован
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");
}
Помимо того, что делать такие функции рекурсивными крайне опасно, ваша функция вообще является функцией одноразового использования, так как параметр с именем файла будет просто игнорироваться при последующих вызовах, если пользователь захочет работать с другим файлом.
0
-=ЮрА=-
Заблокирован
Автор 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;
}
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.08.2011, 11:16 #7
Цитата Сообщение от -=ЮрА=-
C++
1
s[sLen] = '\0';//Отсекаем мусор вконце строки s
запись за пределы выделенной памяти
0
kazak
3035 / 2356 / 155
Регистрация: 11.03.2009
Сообщений: 5,402
Завершенные тесты: 1
07.08.2011, 13:35 #8
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Открыть для чтения с конца. Потом использовать seekq()
Допустим для бинарного файла такой способ подойдет, а если файл будет текстовый, и числа будут разной разрядности?
0
-=ЮрА=-
Заблокирован
Автор FAQ
07.08.2011, 15:24 #9
Цитата Сообщение от accept Посмотреть сообщение
запись за пределы выделенной памяти
-очень эффективно работает, если не cделать - всегда цепляется мусор вконце строки, много раз проверял - работает, притом кто мне заприщает обнулять блок памяти по адресу &s[sLen] - ???
0
diagon
Higher
1929 / 1195 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.08.2011, 15:27 #10
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
-очень эффективно работает, если не cделать - всегда цепляется мусор вконце строки, много раз проверял - работает, притом кто мне заприщает обнулять блок памяти по адресу &s[sLen] - ???
s[sLen] - sLen + 1ый элемент массива, а память выделили всего под sLen штук.
0
easybudda
Модератор
Эксперт CЭксперт С++
9625 / 5573 / 947
Регистрация: 25.07.2009
Сообщений: 10,708
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2011, 16:15
Привет! Вот еще темы с ответами:

чтение из файла - C++
Здравствуйте, уважаемые программисты. Есть файл с записями (объектами), у каждой записи 3 параметра (переменные). Я считываю запись,...

Чтение файла - C++
Доброго времени суток. Пишу программу которая может читать каждый символ файла. #include&lt;iostream&gt; #include&lt;fstream&gt; ...

чтение из файла - C++
файл текст... чтение... ... char font_name = {0}; int font_size = 0;

Чтение из файла - C++
Помогите дописать код чтения из файла. За ранее спасибо. void MyList::save() { Sotrydnik sSotrydnik; ofstream F; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.08.2011, 16:15
Ответ Создать тему
Опции темы

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