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

Как сделать счет чисел с конца файла - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.64
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
01.02.2014, 18:16     Как сделать счет чисел с конца файла #1
Hello, world!
Возник такой вопрос, как сделать счет чисел с конца?
Имеется ввод периода.

Заранее Спасибо

Добавлено через 36 минут
Added: С конца файла
До n числа введенного при T
То есть ввожу T = 35;
И он прочитывает .txt файл и с конца выводит с 1 по 35 число
пробовал циклом, выдает чушь 5-6 чисел o_O
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.02.2014, 18:16     Как сделать счет чисел с конца файла
Посмотрите здесь:

C++ Счет чисел в массиве
C++ Перебор файла посимвольно, как организовать цикл, работающий до конца файла.
автоматический счет имени файла C++
C++ std::cin, eof не всегда принимается как признак конца файла
C++ пытаюсь сделать реализацию через считывание из файла кол-ва чисел, i,но незнаю как сделать реализацию из файла в массив и сортировки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
01.02.2014, 18:30     Как сделать счет чисел с конца файла #2
Открыть файл в режиме дозаписи.
Для Сишного ввода это делается так
C++
1
FILE *ff=fopen("filename.txt","at");
Тогда запись будет происходить в конец файла.

А если имелось ввиду вывести 35 последних чисел,
то можно так:
1. читаем весь файл в одну и ту же переменную и считаем,
сколько их прочтется в переменную n.
2. Перематываем файл на начало.
3. Читаем вхолостую n-35 чисел.
4. Заносим в массив оставшиеся 35 чисел.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
01.02.2014, 18:33  [ТС]     Как сделать счет чисел с конца файла #3
внимательно читайте условие!

Добавлено через 2 минуты
Цитата Сообщение от zss Посмотреть сообщение
Открыть файл в режиме дозаписи.
Для Сишного ввода это делается так
C++
1
FILE *ff=fopen("filename.txt","at");
Тогда запись будет происходить в конец файла.

А если имелось ввиду вывести 35 последних чисел,
то можно так:
1. читаем весь файл в одну и ту же переменную и считаем,
сколько их прочтется в переменную n.
2. Перематываем файл на начало.
3. Читаем вхолостую n-35 чисел.
4. Заносим в массив оставшиеся 35 чисел.
У меня 44469 чисел
Тем более мне кажется Ваш случай - не то
ValeryS
Модератор
6375 / 4841 / 443
Регистрация: 14.02.2011
Сообщений: 16,045
01.02.2014, 18:36     Как сделать счет чисел с конца файла #4
Esecman,
тебе fseek нужен?
http://devoid.com.ua/functions-about...ons/fseek.html
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.02.2014, 18:36     Как сделать счет чисел с конца файла #5
Esecman, читать в кольцевой буфер размерности T?
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
01.02.2014, 18:40     Как сделать счет чисел с конца файла #6
Цитата Сообщение от Esecman Посмотреть сообщение
У меня 44469 чисел
Ну, это же не 44 миллиарда.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
01.02.2014, 21:06  [ТС]     Как сделать счет чисел с конца файла #7
сам разобрался )
если что , отпишу

Добавлено через 2 часа 15 минут
C++
1
2
3
4
5
for(int i = 0; i <= NUM_OF_FILE_HIGH - T_1; ++i) {
    input_high >> array_high[i];
    cout << T_1 << endl;
    output << array_high[i] << endl;
    }
Имеется такой код(к примеру)
я из количества чисел - период -> он мне выдал на 300 чисел меньше(ну столько я период вводил);
А теперь как сохранить эти 300 удаленных чисел?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
01.02.2014, 21:09     Как сделать счет чисел с конца файла #8
Логика какая-то инвертированая получается.

Чем кольцевой буфер не устроил?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
01.02.2014, 21:38     Как сделать счет чисел с конца файла #9
Esecman, Получение последней строки из файла
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
02.02.2014, 19:16  [ТС]     Как сделать счет чисел с конца файла #10
мне нужно чтение чисел с конца файла)
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
02.02.2014, 19:20     Как сделать счет чисел с конца файла #11
Механизм чтения файлов не ориентирован на чтение с конца.
Если в случае с бинарными файлами еще можно извратиться и считать последние n байн, а затем уже интерпретировать их как угодно, то в случае с текстовыми прямого решения нет, поскольку каждая операция чтения продвигает текущую позицию курсора вперед. В крайнем случае читать построчно и парсить строки с конца.

Почему-то мое решение выше было тупо проигнорировано.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 14:11  [ТС]     Как сделать счет чисел с конца файла #12
Цитата Сообщение от 0x10 Посмотреть сообщение
Логика какая-то инвертированая получается.

Чем кольцевой буфер не устроил?
А на примере можно?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
03.02.2014, 18:44     Как сделать счет чисел с конца файла #13
Цитата Сообщение от Esecman Посмотреть сообщение
А на примере можно?
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 <boost/circular_buffer.hpp>
 
int main()
{
    boost::circular_buffer<int> cb(3);
 
    // Предположим, что здесь происходит чтение значений из файла
    for (int i = 0; i < 100; ++i)
    {
        cb.push_back(i);
    }
 
    // последние 3 значения в обратном порядке: 99, 98, 97.
    for (boost::circular_buffer<int>::reverse_iterator it = cb.rbegin();
            it != cb.rend(); ++it)
    {
        std::cout << *it << " ";
    }
    std::cout << std::endl;
}
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 19:22  [ТС]     Как сделать счет чисел с конца файла #14
Возможно, Вы используете C++ Builder
Таким не пользуюсь, пример можно типа VS C++ или DEV-C++
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
03.02.2014, 19:26     Как сделать счет чисел с конца файла #15
Цитата Сообщение от Esecman Посмотреть сообщение
Возможно, Вы используете C++ Builder
Не дай б-г.

Цитата Сообщение от Esecman Посмотреть сообщение
можно типа VS C++ или DEV-C++
Буст можно использовать и там, и там.
В крайнем случае, кольцевой буфер можно реализовать самому - он простой. Не так давно я на чистых сях набрасывал, переписать в плюсовом стиле не должно составить труда (Реализация семафоров)
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 19:28  [ТС]     Как сделать счет чисел с конца файла #16
Такой вопрос, а может можно при помощи getline и while как-то решить вопрос?
или хотя бы fscanf'ом
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
03.02.2014, 19:30     Как сделать счет чисел с конца файла #17
Короче, то, что надо было спросить с самого начала: какая задача решается?
Если возникла потребность городить костыли для таких неестественных действий, высока вероятность, что изначально выбран неоптимальный способ решения.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
03.02.2014, 20:10  [ТС]     Как сделать счет чисел с конца файла #18
Цитата Сообщение от 0x10 Посмотреть сообщение
Короче, то, что надо было спросить с самого начала: какая задача решается?
Если возникла потребность городить костыли для таких неестественных действий, высока вероятность, что изначально выбран неоптимальный способ решения.
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
#include <stdio.h>
#include <stdlib.h>
 
#define FILE_NAME "data.txt"
 
int main(void){
    char * buf, * p;
    long len;
    FILE * f;
 
    if ( ( f = fopen(FILE_NAME, "rb") ) == NULL ){
        perror("fopen");
        system("pause");
    }
    if ( fseek(f, 0, SEEK_END) ){
        perror("fseek");
        system("pause");
    }
    if ( ( len = ftell(f)) < 1 ){
        fprintf(stderr, "File can't be readen, or empty.\n");
        system("pause");
    }
    rewind(f);
 
    if ( ( buf = (char*)malloc(len) ) == NULL ){
        perror("malloc");
        if ( fclose(f) )
            perror("fclose");
        system("pause");
    }
 
    if ( fread(buf, 1, len, f) != len ){
        perror("fread");
        if ( fclose(f) )
            perror("fclose");
        system("pause");
    }
    if ( fclose(f) )
        perror("fclose");
 
    for ( p = buf + len - 1; p >= buf; --p )
        putchar(*p);
 
    free(buf);
    
}
Нашел код на форуме, но работает не так как нужно.
У меня числа типа float
Как переделать?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
03.02.2014, 20:14     Как сделать счет чисел с конца файла #19
Чуть выше я уже говорил, что в случае с биранрым файлом свободы чуть больше, поскольку работа выполняется над потоком байтов. С текстовым файлам такое не прокатит.

Я все еще не услышал ни исходной задачи, ни какой-либо информации о файле. Откуда он берется, кто определяет его формат и почему потребовалось читать его с конца.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 13:26     Как сделать счет чисел с конца файла
Еще ссылки по теме:

Чтения структуры из файла (описать структуру с именем "ORDER": "счет плательщика"; "счет получателя"; "сумма, переводится банковской операцией") C++
C++ Как сделать чтобы перебор символов шел до конца строки? Если у меня например в ней есть пробелы?
Чтение файла с несколькими знаками конца файла C++

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

Или воспользуйтесь поиском по форуму:
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 13:26  [ТС]     Как сделать счет чисел с конца файла #20
ios::ate — передвинуться в конец уже открытого файла;
В моем случае поможет данная функция ?
Yandex
Объявления
04.02.2014, 13:26     Как сделать счет чисел с конца файла
Ответ Создать тему
Опции темы

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