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

Дан текстовый файл. Удалить из файла числа, кратные 3 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.88
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
07.03.2013, 00:11     Дан текстовый файл. Удалить из файла числа, кратные 3 #1
Нужен листинг программы: Дан текстовый файл, содержащий целые числа. Удалить из файла числа, кратные 3. Через функцию fopen(). Буду благодарен.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2013, 00:11     Дан текстовый файл. Удалить из файла числа, кратные 3
Посмотрите здесь:

C++ Дан текстовый файл. Удалить из него все пустые строки
C++ Дан текстовый файл.текст. числа, разделённые пробелами. Найти количество положительных чисел. Удалить строку с min количеством чисел (на С)
Дан текстовый файл, содержащий целые числа. В каждой строке этого файла найти сумму наибольшего и наименьшего элементов и записать их в другой C++
C++ Дан текстовый файл. Переписать компоненты файла в другой файл, заменив при этом каждое сочетание букв “no” на “on”
C++ Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла, начинающиеся этой буквой
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
07.03.2013, 07:10     Дан текстовый файл. Удалить из файла числа, кратные 3 #2
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
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, const char* argv[])
{
   if (argc != 2)
   {
      fprintf(stderr, "Usage: program <FILE.txt>\n"
                      "Note:  in the file must be whole numbers only\n");
      system("pause");
      return EXIT_FAILURE;
   }
 
   FILE* f = fopen(argv[1], "r");
 
   if (f == NULL)
   {
      perror(argv[1]);
      return EXIT_FAILURE;
   }
 
   char tmpfname[L_tmpnam];
 
   FILE* ftemp = fopen(tmpnam(tmpfname), "w");
 
   if (ftemp == NULL)
   {
      fclose(f);
      fprintf(stderr, "Can not create a temporary file\n");
      return EXIT_FAILURE;
   }
 
   int value;
   while (!feof(f))
   {
      if ((fscanf(f, "%d", &value) == 1) && (value % 3))
      {
         fprintf(ftemp, "%d ", value);
      }
   }
 
   fclose(ftemp);
   fclose(f);
 
   if (remove(argv[1]))
   {
      perror(argv[1]);
      return EXIT_FAILURE;
   }
 
   if (rename(tmpfname, argv[1]))
   {
      perror(tmpfname);
      return EXIT_FAILURE;
   }
 
   return EXIT_SUCCESS;
}
Вызов:
Код
$ program.exe <FILE.txt>
Бинарник + исходник: program.7z
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
09.03.2013, 17:32  [ТС]     Дан текстовый файл. Удалить из файла числа, кратные 3 #3
anmartex, у вас листинг на два файла, то есть в одном все числа, а в другом уже отсортированные. А надо чтобы в одном файле удалялись элементы кратные 3, второго файла не нужно.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
09.03.2013, 19:14     Дан текстовый файл. Удалить из файла числа, кратные 3 #4
Цитата Сообщение от frank_lampard Посмотреть сообщение
anmartex, у вас листинг на два файла, то есть в одном все числа, а в другом уже отсортированные. А надо чтобы в одном файле удалялись элементы кратные 3, второго файла не нужно.
Вы программу хоть запускали?

Если уж к листингу обращаться, то обратите внимание вот на эти строчки:
C
1
2
3
4
5
6
7
8
9
10
11
   if (remove(argv[1]))
   {
      perror(argv[1]);
      return EXIT_FAILURE;
   }
 
   if (rename(tmpfname, argv[1]))
   {
      perror(tmpfname);
      return EXIT_FAILURE;
   }
Как видите старый удаляется, а новый переименовывается, т.е. происходит подмена.

А если говорить о том, что ещё одним файлом нельзя пользоваться, то тогда, формируйте требование к задачи более детально. Ибо такие претензии неприятны.
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
10.03.2013, 00:30  [ТС]     Дан текстовый файл. Удалить из файла числа, кратные 3 #5
anmartex, можно вопрос? Почему в компиляторе всегда пишет "В файле должны быть только целые числа" (fprintf - это понятно), не понятно - почему так пишет, хотя в файле задаю и так целые числа? Либо я запутался и не то имя файла создаю.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
10.03.2013, 08:06     Дан текстовый файл. Удалить из файла числа, кратные 3 #6
Цитата Сообщение от frank_lampard Посмотреть сообщение
Почему в компиляторе всегда пишет "В файле должны быть только целые числа" (fprintf - это понятно), не понятно - почему так пишет, хотя в файле задаю и так целые числа? Либо я запутался и не то имя файла создаю.
Пожалуйста поясните, именно в какой момент у вас появляется такое сообщение?
Croessmah
10.03.2013, 08:10
  #7

Не по теме:

Цитата Сообщение от anmartex Посмотреть сообщение
Как видите старый удаляется, а новый переименовывается, т.е. происходит подмена.
Не проще просто открыть старый файл для записи?

anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
10.03.2013, 10:05     Дан текстовый файл. Удалить из файла числа, кратные 3 #8
Цитата Сообщение от Croessmah Посмотреть сообщение
Не проще просто открыть старый файл для записи?
Честно говоря не понял, что вы имели в виду. Переписать новую последовательность из временного файла в старый? Или сохранить результаты в память, а потом перезаписать данные? Если вы имели в виду первое, то зачем выполнять лишние телодвижения? Если второе, то необходимо будет выделять память под эти данные, что усложнит понимание алгоритма.

Цитата Сообщение от frank_lampard Посмотреть сообщение
"В файле должны быть только целые числа"
Всё, я по моему понял, в чём у вас проблема. Вы, я как полагаю, просто запускаете программу без параметров Для того, чтобы передать программе файл можно сделать так: либо запустить командную строку и перейдя в директорию с программой написать следующее
Код
d:\> program.exe file.txt
где, file.txt это ваш файл. Либо можно просто зажав правой клавишей мыши файл с числами, перетащить его на вашу программу.
anmartex
...
 Аватар для anmartex
1700 / 1193 / 494
Регистрация: 12.02.2013
Сообщений: 1,978
10.03.2013, 10:11     Дан текстовый файл. Удалить из файла числа, кратные 3 #9
Но если это вас не устраивает, тогда вот:
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
47
48
49
50
51
52
53
#include <stdio.h>
#include <stdlib.h>
 
const char CFileName[] = "file.txt";
 
int main()
{
 
   FILE* f = fopen(CFileName, "r");
 
   if (f == NULL)
   {
      perror(CFileName);
      return EXIT_FAILURE;
   }
 
   char tmpfname[L_tmpnam];
 
   FILE* ftemp = fopen(tmpnam(tmpfname), "w");
 
   if (ftemp == NULL)
   {
      fclose(f);
      fprintf(stderr, "Can not create a temporary file\n");
      return EXIT_FAILURE;
   }
 
   int value;
   while (!feof(f))
   {
      if ((fscanf(f, "%d", &value) == 1) && (value % 3))
      {
         fprintf(ftemp, "%d ", value);
      }
   }
 
   fclose(ftemp);
   fclose(f);
 
   if (remove(CFileName))
   {
      perror(CFileName);
      return EXIT_FAILURE;
   }
 
   if (rename(tmpfname, CFileName))
   {
      perror(tmpfname);
      return EXIT_FAILURE;
   }
 
   return EXIT_SUCCESS;
}
Бинарник + исходник: program.7z
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2013, 13:08     Дан текстовый файл. Удалить из файла числа, кратные 3
Еще ссылки по теме:

Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла C++
Дан текстовый файл, содержащий более трех строк. Удалить из него три последние строки C++
Дан целочисленный файл А. Записать в файл В все кратные трём числа из А C++

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

Или воспользуйтесь поиском по форуму:
frank_lampard
-8 / 2 / 0
Регистрация: 23.09.2012
Сообщений: 145
10.03.2013, 13:08  [ТС]     Дан текстовый файл. Удалить из файла числа, кратные 3 #10
anmartex, огромное вам спасибо. Всё понял.
Yandex
Объявления
10.03.2013, 13:08     Дан текстовый файл. Удалить из файла числа, кратные 3
Ответ Создать тему
Опции темы

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