hurmawe

coursework1

Apr 27th, 2022 (edited)
1,214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 8.91 KB | None | 0 0
  1. #include <stdio.h>  //чтение и печать сообщений, циклы
  2. #include <stdlib.h> //прерывание программы
  3.  
  4. #pragma warning(disable : 4996) // строчка для работы scanf и fopen в visual studio, убирает ошибка для успешной компиляции
  5.  
  6. int main()
  7. {
  8.     system("chcp 1251"); //русский язык
  9.     system("cls"); //скрытие кодовой информации
  10.  
  11.     char command; //переменная отвечающая за выбор задачи программы
  12.  
  13.     char name1[50]; //имя файла 1 для склейки
  14.     char name2[50]; //имя файла 2 для склейки
  15.     char name3[50]; //имя файла для разделения
  16.  
  17.     char buff[100]; //буфер для чтения строки
  18.  
  19.     //создаем указатели на дальнейшие файлы
  20.     FILE* f1;
  21.     FILE* f2;
  22.     FILE* f3;
  23.     FILE* f4;
  24.     FILE* f5;
  25.  
  26.     int id = 0; //идентификатор для разделения файла( когда равен 0 первых файл, когда 1 второй)
  27.  
  28.     printf("Привет эта программа склейки и разделения произвольного количества текстовых файлов  =)\n\n");
  29.     while (true) // используется цикл на случай неверного ввода, а также для соединение и разделения нескольких файлов
  30.     {
  31.         printf("Выберите задачу (вводите номер):\n 1) Склейка файлов\n 2) Разделение файлов\n 3) Завершить работу\n");
  32.         scanf("%d", &command);
  33.  
  34.         switch (command) // command  определеяет какую задачу выполняем
  35.         {
  36.         case 1: // работа с f1,f2,f3
  37.  
  38.             while (true) {
  39.             printf("Вы хотите записать в первый файл (код 1), во второй (код 2), в общий пустой (код 3)\n"); //выбор в какой файл записывать
  40.             scanf("%d", &command);
  41.  
  42.                 switch (command)
  43.                 {
  44.                 case 1://запись в 1 файл
  45.  
  46.                     printf("Введите название файла 1 (не забудьте <<.txt>> в конце)\n");
  47.                     while (true)//проверка существует ли файл 1
  48.                     {
  49.                         scanf("%s", &name1);
  50.                         if ((f1 = fopen(name1, "a")) == NULL)// пытаемся открыть файл 1 для записи
  51.                         {
  52.                             printf("Не удалось открыть файл\n");
  53.                         }
  54.                         else
  55.                             break;
  56.                     }
  57.  
  58.                     printf("Введите название файла 2 (не забудьте <<.txt>> в конце)\n");
  59.                     while (true)//проверка существует ли файл 2
  60.                     {
  61.                         scanf("%s", &name2);
  62.                         if ((f2 = fopen(name2, "r")) == NULL)// пытаемся открыть файл 2 для чтения
  63.                         {
  64.                             printf("Не удалось открыть файл\n");
  65.                         }
  66.                         else
  67.                             break;
  68.                     }
  69.  
  70.                     fputs("&&&\n", f1); //заглушка для возможности позже разделить
  71.                     while (fgets(buff, 100, f2) != NULL)// читаем построчно файл 2 и кладем в файл 1 до тех пор пока не дойдем до конца
  72.                     {
  73.                         fputs(buff, f1);
  74.                     }
  75.                     goto M; // используется вместо break по причине необходимости выйти из двух циклов одновременно
  76.                
  77.                 case 2://запись в 2 файл
  78.  
  79.                     printf("Введите название файла 1 (не забудьте <<.txt>> в конце)\n");
  80.                     while (true)//проверка существует ли файл 1
  81.                     {
  82.                         scanf("%s", &name1);
  83.                         if ((f1 = fopen(name1, "r")) == NULL)// пытаемся открыть файл 1 для чтения
  84.                         {
  85.                             printf("Не удалось открыть файл\n");
  86.                         }
  87.                         else
  88.                             break;
  89.                     }
  90.  
  91.                     printf("Введите название файла 2 (не забудьте <<.txt>> в конце)\n");
  92.                     while (true)//проверка существует ли файл 2
  93.                     {
  94.                         scanf("%s", &name2);
  95.                         if ((f2 = fopen(name2, "a")) == NULL)  // пытаемся открыть файл 2 для записи
  96.                         {
  97.                             printf("Не удалось открыть файл\n");
  98.                         }
  99.                         else
  100.                             break;
  101.                     }
  102.                     fputs("&&&\n", f2); //заглушка для возможности позже разделить
  103.                     while (fgets(buff, 100, f1) != NULL) // читаем построчно файл 1 и кладем в файл 2 до тех пор пока не дойдем до конца
  104.                     {
  105.                         fputs(buff, f2);
  106.                     }
  107.                     goto M; // используется вместо break по причине необходимости выйти из двух циклов одновременно
  108.  
  109.                 case 3://запись в пустой файл
  110.  
  111.                     printf("Введите название файла 1 (не забудьте <<.txt>> в конце)\n");
  112.                     while (true) //проверка существует ли файл 1
  113.                     {
  114.                         scanf("%s", &name1);
  115.                         if ((f1 = fopen(name1, "r")) == NULL)// пытаемся открыть файл 1 для чтения
  116.                         {
  117.                             printf("Не удалось открыть файл\n");
  118.                         }
  119.                         else
  120.                             break;
  121.                     }
  122.  
  123.                     printf("Введите название файла 2 (не забудьте <<.txt>> в конце)\n");
  124.                     while (true)//проверка существует ли файл 2
  125.                     {
  126.                         scanf("%s", &name2);
  127.                         if ((f2 = fopen(name2, "r")) == NULL) // пытаемся открыть файл 2 для чтения
  128.                         {
  129.                             printf("Не удалось открыть файл\n");
  130.                         }
  131.                         else
  132.                             break;
  133.                     }
  134.                     f3 = fopen("Результат.txt", "a");// открываем файл для записи
  135.                     while (fgets(buff, 100, f1) != NULL)//построчно кладем в файл 3 //построчно кладем в файл 3
  136.                     {
  137.                         fputs(buff, f3);
  138.                     }
  139.                     fputs("&&&\n", f3); //заглушка для возможности позже разделить
  140.                     while (fgets(buff, 100, f2) != NULL)//построчно кладем в файл 3 пока не дойдем до конца
  141.                     {
  142.                         fputs(buff, f3);
  143.                     }
  144.                     fclose(f3);
  145.                     goto M; // используется вместо break по причине необходимости выйти из двух циклов одновременно
  146.                 default://защитный код, а также утишительные слова
  147.                     printf("Похоже я не знаю такого номера. Будьте внимательны. Попробуте ввессти номер от 1 до 3. Удачи.\n");
  148.                     break;
  149.                 }
  150.                
  151.             }
  152.             M://точка выхода из двух массивов
  153.             fclose(f1); fclose(f2); //закрываем наши файлы для высвобождения памяти
  154.             break;
  155.  
  156.         case 2: // работа с f3, f4, f5
  157.  
  158.             printf("Введите имя файла который необходимо разделить (не забудьте <<.txt>> в конце),\nесли файл был создан не программно не забудьте написать на отдельной строке <<&&&>>\n");//дает доп комментарий что разделяем мы именно по "&&&"
  159.             while (true)// проверка наличия файла
  160.             {
  161.                 scanf("%s", &name3);
  162.                 if ((f3 = fopen(name3, "r")) == NULL)//открываем файл 3 для чтения
  163.                 {
  164.                     printf("Не удалось открыть файл\n");
  165.                 }
  166.                 else
  167.                     break;
  168.             }
  169.            
  170.             f4 = fopen("1_1.txt", "a");//открываем файл для записи первой части
  171.             f5 = fopen("1_2.txt", "a");//открываем файл для записи второй части
  172.  
  173.             while (fgets(buff, 100, f3) != NULL)//читаем файл до конца
  174.             {
  175.                 if (buff[0] == '&' && buff[1] == '&' && buff[2] == '&') // если нашли разделитель меняем файл в который записываем
  176.                 {
  177.                     id = 1;
  178.                     continue;
  179.                 }
  180.                 if (id == 0)
  181.                     fputs(buff, f4);
  182.                 else
  183.                     fputs(buff, f5);
  184.             }
  185.  
  186.             fclose(f3); fclose(f4); fclose(f5); //закрываем наши файлы для высвобождения памяти
  187.             break;
  188.  
  189.         case 3://код выхода из программы
  190.  
  191.             printf("Пока!");
  192.             exit(1);
  193.  
  194.         default://защитный код, а также утишительные слова
  195.  
  196.             printf("Похоже я не знаю такого номера. Будьте внимательны. Попробуте ввессти номер от 1 до 3. Удачи\n");
  197.             break;
  198.         }
  199.     }
  200.     return 0;
  201. }
Add Comment
Please, Sign In to add comment