module_02.c 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #define BOLD_GRAY "\033[1;90m"
  6. #define RED "\033[0;31m"
  7. #define WHITE "\033[0;37m"
  8. #define RESET "\033[0m"
  9. // Размер буфера для чтения
  10. #define BUFFER_SIZE 4096
  11. int module_02_run(const char *filename) {
  12. char log_msg[1024];
  13. FILE *file = fopen(filename, "rb");
  14. if (!file) {
  15. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " RED "File type not recognized: %s" RESET, strerror(errno));
  16. printf("%s\n", log_msg);
  17. return 1;
  18. }
  19. unsigned char *buffer = malloc(BUFFER_SIZE);
  20. if (!buffer) {
  21. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " RED "Memory allocation failed" RESET);
  22. printf("%s\n", log_msg);
  23. fclose(file);
  24. return 1;
  25. }
  26. size_t read_bytes = fread(buffer, 1, BUFFER_SIZE, file);
  27. fclose(file);
  28. if (read_bytes == 0) {
  29. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " RED "File type not recognized: Empty file" RESET);
  30. printf("%s\n", log_msg);
  31. free(buffer);
  32. return 1;
  33. }
  34. // Проверяем наличие ANSI-кодов
  35. int has_ansi = 0;
  36. for (size_t i = 0; i < read_bytes - 1; i++) {
  37. if (buffer[i] == '\x1B' && buffer[i + 1] == '[') {
  38. has_ansi = 1;
  39. break;
  40. }
  41. }
  42. // Проверяем JSON
  43. int is_json = 0;
  44. for (size_t i = 0; i < read_bytes; i++) {
  45. if (buffer[i] == ' ' || buffer[i] == '\t' || buffer[i] == '\n' || buffer[i] == '\r') continue;
  46. if (buffer[i] == '{' || buffer[i] == '[') {
  47. is_json = 1;
  48. }
  49. break;
  50. }
  51. // Проверяем CSV
  52. int is_csv = 0;
  53. int comma_count = 0;
  54. for (size_t i = 0; i < read_bytes; i++) {
  55. if (buffer[i] == ',' || buffer[i] == ';') {
  56. comma_count++;
  57. if (comma_count >= 3) {
  58. is_csv = 1;
  59. break;
  60. }
  61. }
  62. }
  63. if (has_ansi) {
  64. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " WHITE "Text file with ANSI escape sequences (likely terminal log)" RESET);
  65. } else if (is_json) {
  66. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " WHITE "Text file, likely JSON format" RESET);
  67. } else if (is_csv) {
  68. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " WHITE "Text file, likely CSV format" RESET);
  69. } else {
  70. snprintf(log_msg, sizeof(log_msg), BOLD_GRAY " Library text_analyzer: " WHITE "Text file, unknown structure (possibly plain text or log)" RESET);
  71. }
  72. printf("%s\n", log_msg);
  73. free(buffer);
  74. return 0;
  75. }