0 / 0 / 0
Регистрация: 08.02.2011
Сообщений: 33
1

Вычислить общее количество строк в файлах с расширениями "pas" и "cpp"

07.03.2011, 12:56. Показов 956. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть задание: Составить программу, которая для заданного начального каталогов файловой системы вычисляет общее количество строк в файлах с расширениями "pas" и "cpp" которые находятся внутри этого каталога и его подкаталогов.
вот решение
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <sys/types.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
 
int lines_count = 0;
 
//проверяет расширение файла
int EndsWith(const char *string, const char *substring) {
  int string_length = strlen(string);
  int substring_length = strlen(substring);
  if (string_length < substring_length) return 0;
  const char *string_symbol = string + string_length - substring_length;
  return ((strcmp(string_symbol, substring) == 0) ? 1 : 0);
}
 
//анализ расширения и подсчёт строк
void ProcessFile(const char *file_name) {
  if (EndsWith(file_name, ".cpp") || EndsWith(file_name, ".pas")) {
    FILE *infile = fopen(file_name, "r");
    if (infile != NULL) {
      // читаем файл блоками по 4 Кб
      int k_buffer_size = 4096;
      char *buffer = (char*)malloc(k_buffer_size);
 
      //int lines_count = 0;
      while (!feof(infile))
    //fgets читает входной файл, делает остановку после каждой строки
        if (fgets(buffer, k_buffer_size, infile))
          ++lines_count;
      free(buffer);
      fclose(infile);
      // отчёт по каждому файлу
      //printf("%s has %d line%s\n", file_name, lines_count,
      //       (lines_count > 1) ? "s" : "");
    } else {
      fprintf(stderr, "Error reading file %s.\n", file_name);
    }
  }
}
 
// рекурсивно обходит каталоги + динамически выделяет память для подкаталогов
void ProcessFolder(const char *folder_name)
{
  DIR *directory;
  struct dirent *directory_entry;
  //проверка успешности чтения каталога
  if ((directory = opendir(folder_name)) == NULL) {
    fprintf(stderr, "Error opening %s.\n", folder_name);
    return;
  }
 
  //основной цикл обхода каталогов
  while ((directory_entry = readdir(directory)) != NULL) {
    if (strcmp(directory_entry->d_name, ".") != 0 &&
        strcmp(directory_entry->d_name, "..") != 0) {
    //динамическое выделение памяти
      char *subentry = (char*)malloc(strlen(folder_name)
                                    + strlen(directory_entry->d_name) + 2);
      strcpy(subentry, folder_name);
      strcat(subentry, "/");
      strcat(subentry, directory_entry->d_name);
      //если нашли подкаталог, то переходим в него (рекурсивно)
      if (directory_entry->d_type & DT_DIR)
        ProcessFolder(subentry);
      else
      //if (directory_entry->d_type & DT_REG) //можно удалить
        ProcessFile(subentry);
      //высвобождаем занятую память
      free(subentry);
    }
  }
  closedir(directory);
}
 
// обрабатываемый каталог должен быть указан в качестве параметра
int main(int argc, char *argv[]) {
  if (argc == 2)
    ProcessFolder(argv[1]);
  else
    ProcessFolder(".");
  printf("Sergey Aleksandrovich, vsego strok %d\n", lines_count);
}

нужно переделать эту прогу под такое задание. тут не много изменять!

Составить программу, которая для заданного начального каталогов файловой системы удаляет все файлы с расширением "bak" которые находятся внутри этого каталога и его подкаталогов.

 Комментарий модератора 
Используйте теги форматирования кода.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.03.2011, 12:56
Ответы с готовыми решениями:

Вычислить общее количество строк в файлах с расширениями "pas" и "cpp"
Составить программу, которая для заданного начального каталогов файловой системы вычисляет общее...

Написать командный файл, который: подсчитывает общее количество строк во всех текстовых файлах текущего каталога
Написать командный файл, который: подсчитывает общее количество строк во всех текстовых файлах...

Сравнить общее количество символов в текстовых файлах
Создайте два текстовых файла primer1.txt и primer2.txt. В каждый из этих файлов введите по одной...

КАК в windows forms VS c++ запустить (выполнить) cpp через button, cpp находится в заголовочных файлах
КАК в windows forms VS c++ запустить (выполнить) cpp через button, cpp находится в заголовочных...

Подсчитать общее количество строк, и количество строк длиной < 10
Пожалуйста. Очень надо. Нужны программы для текстовых файлов у которых входные данные все строки, а...

1
MiThEoN
466 / 323 / 42
Регистрация: 31.10.2009
Сообщений: 546
Записей в блоге: 2
07.03.2011, 18:14 2
Для удаления файла нужно подключить библиотеку WinAPI
C++
1
#include <windows.h>
И применить функцию для примера --->
C++
1
DeleteFileA("c:\\example.txt");
0
07.03.2011, 18:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2011, 18:14
Помогаю со студенческими работами здесь

Матрица, поменять столбцы, найти количество строк. [CPP]
В прямоугольной матрице поменять местами столбец с номером &quot;M&quot; и столбец, содержащий максимальный...

Максимальное количество строк в текстовых файлах
Как-то видел на картинке самую нижнию правую ячейку в таблице Эксель. Типа: &quot;Теперь ты видел всё,...

Посчитать количество строк в файлах папки
Посчитать кол-во строк не в документах отдельных а папках, и содержащихся в них документах echo...

Как подсчитать количество строк в нескольких файлах?
Здравствуйте! Использовал такой код: Dim mString() = IO.File.ReadAllLines(&quot;1.txt&quot;,...

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp
С помощью командной строки &gt;namberstr f1.cpp Определить число строк в файле с именем f1.cpp


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru