Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 97
1

Поменять порядок строк в файле на обратный

04.09.2019, 06:41. Показов 1674. Ответов 21
Метки нет (Все метки)

Как из
gggggggg
wwwwww
ppppppp

Сделать?
ppppppp
wwwwww
gggggggg

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
int main()
    {
    /*file = fopen("test.txt", "w");
    if (file)
    {
        fputs("gggggggg\n", file);
        fputs("wwwwww\n", file);
        fputs("pppppppp\n", file);
        fclose(file);
    }*/
    file = fopen("test.txt", "r");
    file2 = fopen("text.txt", "w");
    if (file&&file2)
    {
        char buf[1028];
        while (!feof(file))
        {
            fgets(buf, 1028, file);
            fputs(buf, file2);
            *buf = 0;
        }
        fclose(file);
        fclose(file2);
    }
    system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2019, 06:41
Ответы с готовыми решениями:

Поменять порядок слов в строках на обратный в текстовом файле
Была задача поменять порядок строк изначально(прикладываю реализацию). Теперь преподаватель просит...

Изменить порядок строк в файле на обратный
Имеется текстовый файл, содержащий произвольное количество строк.Длина каждой строки не превосходит...

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

Изменить порядок следования строк в файле на обратный
Помогите, пожалуйста, решить данную задачу в паскале: Дан текстовый файл, состоящий из нескольких...

21
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
04.09.2019, 09:09 2
Лучший ответ Сообщение было отмечено Nuril как решение

Решение

Цитата Сообщение от Nuril Посмотреть сообщение
Как из
gggggggg
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 <list>
#include <string>
int main()
{
    /*file = fopen("test.txt", "w");
    if (file)
    {
        fputs("gggggggg\n", file);
        fputs("wwwwww\n", file);
        fputs("pppppppp\n", file);
        fclose(file);
    }*/
    file = fopen("test.txt", "r");
    if (file)
    {
        std::list<std::string> lines;
        char buf[1028];
        while (!feof(file))
        {
            fgets(buf, 1028, file);
            lines.emplace_front(buf);
            
            *buf = 0;
        }
        fclose(file);
        file2 = fopen("text.txt", "w");
        if (file2)
        {
            for (auto &line: lines)
                fputs(line.c_str(), file2);
 
            fclose(file2);
        }
    }
    system("pause");
    return 0;
}
1
Эксперт C
25936 / 16153 / 3465
Регистрация: 24.12.2010
Сообщений: 35,329
04.09.2019, 09:48 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FILE *file = fopen("test.txt, "r+b");
fseek(file, 0, 2);
int L = ftell(file);
for(int i=0; i<L/2; i++) {
  char a, b;
  fseek(file, i, 0);
  fread(&a, 1, 1, file);
  fseek(file, L-i, 0);
  fread(&b, 1, 1, file);
  fseek(file, L-i, 0);
  fwrite(&a, 1, 1, file);
  fseek(file, i, 0);
  fwrite(&b, 1, 1, file);
}
fclose(file);
1
3313 / 1893 / 365
Регистрация: 09.09.2017
Сообщений: 7,715
04.09.2019, 10:08 4
system("tac test.txt");
Кликните здесь для просмотра всего текста
Использует стандартную утилиту tac, которая делает именно это: выводит файл в обратном порядке
0
Эксперт C
25936 / 16153 / 3465
Регистрация: 24.12.2010
Сообщений: 35,329
04.09.2019, 10:13 5
Ошибся, как часто бывает. Пропустил кавычку.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FILE *file = fopen("test.txt", "r+b");  // Вот тут
fseek(file, 0, 2);
int L = ftell(file);
for(int i=0; i<L/2; i++) {
  char a, b;
  fseek(file, i, 0);
  fread(&a, 1, 1, file);
  fseek(file, L-i, 0);
  fread(&b, 1, 1, file);
  fseek(file, L-i, 0);
  fwrite(&a, 1, 1, file);
  fseek(file, i, 0);
  fwrite(&b, 1, 1, file);
}
fclose(file);
Спасибо подсветке кода!
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 97
04.09.2019, 20:42  [ТС] 6
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
#include <list>
Я хочу понять как сделать при помощи обычного iostream без доп массива.
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
system("tac test.txt");
"tac" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
Цитата Сообщение от Байт Посмотреть сообщение
Ошибся, как часто бывает. Пропустил кавычку.
У меня из:
gggggggg
wwwwww
ppppppp
Получилось:
М

pppppppp

ppppwwww

gggggggg
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
04.09.2019, 21:34 7
Цитата Сообщение от Nuril Посмотреть сообщение
Я хочу понять как сделать при помощи обычного iostream без доп массива.
Один и тот же файл ты не перевернёшь без дополнительного буфера. Да и с двумя запаришься.
0
Эксперт C
25936 / 16153 / 3465
Регистрация: 24.12.2010
Сообщений: 35,329
04.09.2019, 21:35 8
Цитата Сообщение от Nuril Посмотреть сообщение
У меня
Странненько... Возможно, что и я где-то еще раз ошибся... Но по логике все должно быть нормальною Покажь СВОЙ код. И какой транслятор. Кстати, у mingw по поводу реализации парочки ftell-fseek есть плюха. Она меня изрядно помучила в свое время...
Но если файл не очень велик, и есть возможность его целиком считать в память, то все можно сделать много проще...
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 97
04.09.2019, 21:55  [ТС] 9
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Один и тот же файл ты не перевернёшь без дополнительного буфера. Да и с двумя запаришься.
Мне показали несколько функций для работы с текстовыми файлами и дали несколько заданий и вот одно из них:
Дан текстовый файл. Необходимо переписать его строки в другой
файл. Порядок строк во втором файле должен быть обратным по
отношению к порядку строк в заданном файле.

А на счёт доп массива на уроке говорили что-то про то что когда программы архиваторы что-то перемещают они не делают копию файла внутри себя (озу) вот и я думаю что массив строк не правильно но если другие варианты сложны для меня на данный момент сделаю с массивом.

Цитата Сообщение от Байт Посмотреть сообщение
Покажь СВОЙ код.
Прикрепил скрин у меня VS19.
Цитата Сообщение от Байт Посмотреть сообщение
Но если файл не очень велик, и есть возможность его целиком считать в память, то все можно сделать много проще...
Да вот это я и хочу понять что делать если файл большой или на данный момент можно обойтись без этого?
А с маленькими и массивом и так понятно).
0
Миниатюры
Поменять порядок строк в файле на обратный  
303 / 215 / 74
Регистрация: 23.05.2011
Сообщений: 970
04.09.2019, 21:58 10
Nuril, в теории ты можешь запомнить все начала строк в оригинальном файле и копировать через iostream.
1
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
04.09.2019, 22:04 11
Цитата Сообщение от Nuril Посмотреть сообщение
Да вот это я и хочу понять что делать если файл большой или на данный момент можно обойтись без этого?
А с маленькими и массивом и так понятно).
Ну вот как-то так
Цитата Сообщение от New man Посмотреть сообщение
Nuril, в теории ты можешь запомнить все начала строк в оригинальном файле и копировать через iostream.
Пробежаться по файлу, сохранить в массиве начало-конец строк, потом пробежаться по этому массиву и, соответственно, файлу в обратном порядке и сохранить их в другой файл.
0
С чаем беда...
Эксперт CЭксперт С++
9066 / 4599 / 1249
Регистрация: 18.10.2014
Сообщений: 10,293
04.09.2019, 22:11 12
Цитата Сообщение от Байт Посмотреть сообщение
fseek(file, 0, 2);
2? Что за 2?
0
607 / 412 / 151
Регистрация: 11.01.2019
Сообщений: 1,731
04.09.2019, 22:14 13
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что за 2?
Видимо, seek_end
0
С чаем беда...
Эксперт CЭксперт С++
9066 / 4599 / 1249
Регистрация: 18.10.2014
Сообщений: 10,293
04.09.2019, 22:16 14
Цитата Сообщение от jugu Посмотреть сообщение
Видимо, seek_end
Но с чего бы это вдруг кто-то избегать SEEK_END и заменять его на 2? И чего бы это вдруг именно на 2?
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 97
04.09.2019, 22:18  [ТС] 15
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Но с чего бы это вдруг кто-то станет заменять SEEK_END на 2? И чего бы это вдруг именно на 2?
Если навести на SEEK_END там
C++
1
#define SEEK_END 2
0
С чаем беда...
Эксперт CЭксперт С++
9066 / 4599 / 1249
Регистрация: 18.10.2014
Сообщений: 10,293
04.09.2019, 22:20 16
Цитата Сообщение от Nuril Посмотреть сообщение
Если навести на SEEK_END там
Это где это "там"?
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 97
04.09.2019, 22:21  [ТС] 17
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Это где "там"?
Вот скриншот.

И вот ещё с описания функции.
Аргумент origin может принимать значения 0, 1 или 2, причем 0 означает начало файла, 1 — текущую позицию, а 2 — конец файла.
0
Изображения
 
С чаем беда...
Эксперт CЭксперт С++
9066 / 4599 / 1249
Регистрация: 18.10.2014
Сообщений: 10,293
04.09.2019, 22:23 18
Цитата Сообщение от Nuril Посмотреть сообщение
Вот
И? Вы нам показываете какие-то уютные особенности вашей любимой среды разработки. К языкам С и С++ эти особенности никакого отношения не имеют.
0
2 / 2 / 0
Регистрация: 07.11.2018
Сообщений: 97
04.09.2019, 22:24  [ТС] 19
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
И?
Я просто сказал что такое 2 я это не использую.
0
Эксперт C
25936 / 16153 / 3465
Регистрация: 24.12.2010
Сообщений: 35,329
05.09.2019, 09:02 20
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
с чего бы это вдруг кто-то избегать SEEK_END и заменять его на 2
Просто Двойку помню, а SEEK_END - нет. Такие вот особенности памяти. А копать было в лом.
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Один и тот же файл ты не перевернёшь без дополнительного буфера.
Ерунда.
Цитата Сообщение от Nuril Посмотреть сообщение
Прикрепил скрин
Скринов обычно не смотрю. Впрочем, похоже, это и неважно. Код мой в посте 5 не точен. Символ перевода строки надо обрабатывать по особому.
И все рассчитано на то, что строки состоят из одинаковых букв. Если буквы разные - перевернет и строки.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.09.2019, 09:02

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Дан файл из целых чисел. Поменять порядок компонентов в файле на обратный
1) Дан файл из целых чисел. Поменять порядок компонентов в файле на обратный. 2) Заменить в...

Дан файл из целых чисел. Поменять порядок компонентов в файле на обратный.
Дан файл из целых чисел. Поменять порядок компонентов в файле на обратный. (указ.:ввод и вывод...

Поменять порядок слов на обратный
Нужно считать с консоли символы. Выделить слова и поменять порядок слов на обратный. Можно ли...

Поменять порядок цифр на обратный
Дано целое число X. Поменять порядок цифр числа на обратный. в c++ не бум бум Х__х


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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