Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
14 / 14 / 6
Регистрация: 26.11.2010
Сообщений: 235

Чтение файла

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

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите, пожалуйста, как прочитать файл с конца? Т.е. у меня записаны числа в файле 1 2 3 и т.д., а вывод 3 2 1.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.08.2011, 15:49
Ответы с готовыми решениями:

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

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

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

10
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.08.2011, 15:54
Открыть для чтения с конца. Потом использовать seekq()
1
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.08.2011, 16:30
Как вариант
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
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
06.08.2011, 19:58
diagon, подобный способ остроумен. Я его написал в Экспересс-курсе. Но не сработает для большого файла. Упрешься в размер стека.
0
Заблокирован
06.08.2011, 20:08
Цитата Сообщение от 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
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.08.2011, 10:51
Как вариант
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
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
07.08.2011, 11:16
Цитата Сообщение от -=ЮрА=-
C++
1
s[sLen] = '\0';//Отсекаем мусор вконце строки s
запись за пределы выделенной памяти
0
 Аватар для kazak
3604 / 2744 / 356
Регистрация: 11.03.2009
Сообщений: 6,307
07.08.2011, 13:35
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Открыть для чтения с конца. Потом использовать seekq()
Допустим для бинарного файла такой способ подойдет, а если файл будет текстовый, и числа будут разной разрядности?
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
07.08.2011, 15:24
Цитата Сообщение от accept Посмотреть сообщение
запись за пределы выделенной памяти
-очень эффективно работает, если не cделать - всегда цепляется мусор вконце строки, много раз проверял - работает, притом кто мне заприщает обнулять блок памяти по адресу &s[sLen] - ???
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.08.2011, 15:27
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
-очень эффективно работает, если не cделать - всегда цепляется мусор вконце строки, много раз проверял - работает, притом кто мне заприщает обнулять блок памяти по адресу &s[sLen] - ???
s[sLen] - sLen + 1ый элемент массива, а память выделили всего под sLen штук.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,977
07.08.2011, 16:15
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.08.2011, 16:15
Помогаю со студенческими работами здесь

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

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

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

Чтение файла с n строки и до конца файла
как сделать так чтобы писало не с начала файла а например с середины и до конца? fstream fin;//создаем файловый поток ...

Чтение текстового файла специфического файла
Добрый день! Есть один текстовый файл определенного формата. Заголовок по столбцам такой: год месяц день а1 флаг1 а2 а3 а4 а5 флаг2 а6...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru