Форум программистов, компьютерный форум 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,но незнаю как сделать реализацию из файла в массив и сортировки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 13:38     Как сделать счет чисел с конца файла #21
Цитата Сообщение от Esecman Посмотреть сообщение
В моем случае поможет данная функция ?
Это не функция, а одно из значений openmode. Указание этого флага эквивалентно открытию файла и перемещению текущей позиции в конец.
Нет, в данном случае не поможет, и я дважды объяснил почему.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
04.02.2014, 13:39     Как сделать счет чисел с конца файла #22
Если подумать немного то можно прийти к следующей мысли. Для открытия файла создается входной поток (объект класса) итератор которого однонаправленный отсюда вывод читать файлы в обратном порядке через потоки нельзя, только поместив его (файл) в буфер(контейнер) и использовать реверсные итераторы.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 13:40  [ТС]     Как сделать счет чисел с конца файла #23
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
#include <iostream>
#include <fstream>
using namespace std;
 
int main () {
  int length;
  char * buffer;
 
  ifstream is;
  is.open ("test.txt", ios::binary );
 
  // get length of file:
  is.seekg (0, ios::end);
  length = is.tellg();
  is.seekg (0, ios::beg);
 
  // allocate memory:
  buffer = new char [length];
 
  // read data as a block:
  is.read (buffer,length);
 
  is.close();
 
  cout.write (buffer,length);
 
  delete[] buffer;
  return 0;
}
Нашел на форуме
Можно использовать этот код в качестве read'a с конца?
Проверил отпутом, все равно сначала читает Эх...
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 13:43     Как сделать счет чисел с конца файла #24
Ilot, было бы желание, а извратиться можно по-разному.
Только автор не дает постановки исходной задачи. В начале как-то невнятно было сказано, что чтение файла целиком вроде как не устраивает. Какой формат файла, какого он происхождения и зачем это все надо - информации нет. Подозреваю, что подход к решению задачи изначально был выбран неверный.
Но это я уже говорил, больше добавить нечего.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 13:51  [ТС]     Как сделать счет чисел с конца файла #25
Формат файла .txt
Нужно для написания кое-чего
В ней имеется ввод T(период) и input data
Поэтому, мне нужна программа, которая по периоду(например я ввел 35), чтобы он дошел до 35 строки и делает output в другой .txt
З.Ы. Пока он доходит до 35 строки, нужно чтобы каждое число копировалось, а не 35...
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
04.02.2014, 13:52     Как сделать счет чисел с конца файла #26
C++
1
  is.seekg (-T, ios::end);
Переносит указатель на T байт от конца файла. Ну и вперед читать в прямом порядке до завершения файла
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 13:57  [ТС]     Как сделать счет чисел с конца файла #27
Цитата Сообщение от Ilot Посмотреть сообщение
C++
1
  is.seekg (-T, ios::end);
Переносит указатель на T байт от конца файла. Ну и вперед читать в прямом порядке до завершения файла
Спасибо, добрый дядя.
А я то думал, что не будет работать O-O
Засунул в цикл - не работало
Сейчас кое-куда закинул в другое место - работает
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 13:57     Как сделать счет чисел с конца файла #28
Что ни пост, то новая постановка задачи.
Цитата Сообщение от Esecman Посмотреть сообщение
Формат файла .txt
Это не формат, а расширение. Может быть любым и на функционал никак не влияет.
Важнее как располагаются данные в файле. Все числа разделены пробельным символом или по одному числу на строку.
Цитата Сообщение от Esecman Посмотреть сообщение
Поэтому, мне нужна программа, которая по периоду(например я ввел 35), чтобы он дошел до 35 строки и делает output в другой .txt
При такой постановке нужно сделать 35 холостых getline, а после этого последующие строки копировать в выходной файл.
Цитата Сообщение от Esecman Посмотреть сообщение
З.Ы. Пока он доходит до 35 строки, нужно чтобы каждое число копировалось, а не 35
Куда копировалось, какое каждое число... Только что было сказано, что первые 35 строк нужно пропустить.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 14:04  [ТС]     Как сделать счет чисел с конца файла #29
Цитата Сообщение от 0x10 Посмотреть сообщение
Что ни пост, то новая постановка задачи.

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

При такой постановке нужно сделать 35 холостых getline, а после этого последующие строки копировать в выходной файл.

Куда копировалось, какое каждое число... Только что было сказано, что первые 35 строк нужно пропустить.
Извините, но я не могу все подробно расписать.
Так как программа приватная
Простите, если что)

Добавлено через 4 минуты
O-O-O-P-S.
Ввел немного больше периода стало вылезать вот так:
output.txt
5
1.32532
1.32553
1.32549
1.32553
1.32549
1.32542
1.32561
1.32593
1.32582
1.32567
1.3256
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0


Числа естественно типа float;
Ошибка состоит в том, что вместо реальных чисел выходят нули
Начиная с 2 по 12 строки числа правильны
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
04.02.2014, 14:07     Как сделать счет чисел с конца файла #30
Esecman, вы не поверите, но на этом форуме нет людей которые исправят ваши ошибки не видя вашего кода.
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 14:08     Как сделать счет чисел с конца файла #31
Я не задал ни одного вопроса, который затрагивал бы предметную область или приватную информацию.
Если есть вопрос, как получить какие-то данные из файла, то нужно как минимум описать формат входных данных. Вывод непонятно чего - не предоставляет никакой полезной информации.
Нужен самодостаточный пример: как выглядит входной файл и что хочется получить на выходе.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 14:09  [ТС]     Как сделать счет чисел с конца файла #32
C++
1
2
3
4
5
input_high.seekg (-T_1, ios::end); // пробовал и в цикле. :)
    for(int i = 0; i < T_1;++i) {
    input_high >> array_high[i];
    output << array_high[i] << endl;
    }
Вот, кусок
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 14:19     Как сделать счет чисел с конца файла #33
Смешение на N байтов != смещению на N чисел.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:03  [ТС]     Как сделать счет чисел с конца файла #34
Цитата Сообщение от 0x10 Посмотреть сообщение
Смешение на N байтов != смещению на N чисел.
И что на данный момент можно сделать?
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 19:08     Как сделать счет чисел с конца файла #35
Цитата Сообщение от Esecman Посмотреть сообщение
И что на данный момент можно сделать?
В этой теме я уже неоднократно отписывался что можно сделать:
1. Пересмотреть подход к решению задачи, поскольку, как я уже говорил раза 4, решение выбрано неоптимальное и нелогичное.
2. Использовать заранее подготовленную структуру, о которой я уже писал. Взять можно самописную или библиотечну. Пример самописной я тоже приводил.

Могу точно сказать чего делать НЕ надо.
Не надо пытаться угадывать. Пока я вижу только подход в духе "взяли какой-то кусок кода, попробовали в одном месте - не работает, приложили к другому - о, заработало" - хотя на самом деле не заработало, а в лучшем случае совпало. С такой угадайкой не продвинетесь ни на шаг. Мб что-нибудь и напишите, только все равно будет глючить.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:14  [ТС]     Как сделать счет чисел с конца файла #36
Цитата Сообщение от 0x10 Посмотреть сообщение
В этой теме я уже неоднократно отписывался что можно сделать:
1. Пересмотреть подход к решению задачи, поскольку, как я уже говорил раза 4, решение выбрано неоптимальное и нелогичное.
2. Использовать заранее подготовленную структуру, о которой я уже писал. Взять можно самописную или библиотечну. Пример самописной я тоже приводил.

Могу точно сказать чего делать НЕ надо.
Не надо пытаться угадывать. Пока я вижу только подход в духе "взяли какой-то кусок кода, попробовали в одном месте - не работает, приложили к другому - о, заработало" - хотя на самом деле не заработало, а в лучшем случае совпало. С такой угадайкой не продвинетесь ни на шаг. Мб что-нибудь и напишите, только все равно будет глючить.
С чтением с конца встречаюсь впервые
Знаю то, что обязательно нужно использовать ios::end ну и цикл естественно

Числа типа float;
1 строка == 1 число(1.313133)
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 19:19     Как сделать счет чисел с конца файла #37
С буфером решается за один проход файла.
За два прохода можно сначала почитать количество строк в файле (холостые getline), потом вернуться к началу и вхолостую пропустить энное количество строк до нужной позиции. Где-то тут, кажется, уже предлагали такое.

Преимущество превого способа - всего один проход по файлу.
Для второго не нужно использовать доп библиотеки или писать свой буфер.
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:27  [ТС]     Как сделать счет чисел с конца файла #38
Цитата Сообщение от 0x10 Посмотреть сообщение
С буфером решается за один проход файла.
За два прохода можно сначала почитать количество строк в файле (холостые getline), потом вернуться к началу и вхолостую пропустить энное количество строк до нужной позиции. Где-то тут, кажется, уже предлагали такое.

Преимущество превого способа - всего один проход по файлу.
Для второго не нужно использовать доп библиотеки или писать свой буфер.
А Вы понимаете, что мне данную строку нужно найти с конца?
Помимо getline можно воспользоваться fscanf ну или еще много чем

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main() {
float n = 0;
int NUM_OF_FILE = 0;
FILE* file;
file = fopen("data.txt", "r");
while(!feof(file)) {
fscanf(file, "%f", &n);
NUM_OF_FILE++;
}
return 0;
}
0x10
2426 / 1598 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
04.02.2014, 19:31     Как сделать счет чисел с конца файла #39
Esecman,
Пусть нужно N сток с конца.
1. Прочитать все строки вхолостую - почитать их количество - K
2. Вернуться к началу файла. Пропустить (K - N) строк.
3. Читаем в массив оставшиеся N строк, что и требовалось. Инвертировать порядок можно уже в памяти.

Добавлено через 13 секунд

Не по теме:

Самому тошно советовать такие глупости.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 19:45     Как сделать счет чисел с конца файла
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Esecman
38 / 26 / 6
Регистрация: 31.12.2013
Сообщений: 329
04.02.2014, 19:45  [ТС]     Как сделать счет чисел с конца файла #40
Спасибо, попробую

Добавлено через 8 минут
Цитата Сообщение от 0x10 Посмотреть сообщение
Esecman,
Пусть нужно N сток с конца.
1. Прочитать все строки вхолостую - почитать их количество - K
2. Вернуться к началу файла. Пропустить (K - N) строк.
3. Читаем в массив оставшиеся N строк, что и требовалось. Инвертировать порядок можно уже в памяти.

Добавлено через 13 секунд

Не по теме:

Самому тошно советовать такие глупости.

З.Ы.
Так если я так сделаю, то получится у меня вот что(не проверял):
K = 44469
N = 35
44469-35 = 44434
for(int i = 0; i < NUM_OF_FILE - T_1; ++i) {
input >> array[i];
output << array[i] << endl;
}
// И что мне это даст? Он же мне не выведет число(-а) до окончания периода

Добавлено через 3 минуты
Или какими-то средствами сайвануть в буфер эти удаленные строки с файла что ли, а потом оутпутом
Даже и не знаю с чего начинать o-O
Yandex
Объявления
04.02.2014, 19:45     Как сделать счет чисел с конца файла
Ответ Создать тему
Опции темы

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