Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h> //чтение и печать сообщений, циклы
- #include <stdlib.h> //прерывание программы
- #pragma warning(disable : 4996) // строчка для работы scanf и fopen в visual studio, убирает ошибка для успешной компиляции
- int main()
- {
- system("chcp 1251"); //русский язык
- system("cls"); //скрытие кодовой информации
- char command; //переменная отвечающая за выбор задачи программы
- char name1[50]; //имя файла 1 для склейки
- char name2[50]; //имя файла 2 для склейки
- char name3[50]; //имя файла для разделения
- char buff[100]; //буфер для чтения строки
- //создаем указатели на дальнейшие файлы
- FILE* f1;
- FILE* f2;
- FILE* f3;
- FILE* f4;
- FILE* f5;
- int id = 0; //идентификатор для разделения файла( когда равен 0 первых файл, когда 1 второй)
- printf("Привет эта программа склейки и разделения произвольного количества текстовых файлов =)\n\n");
- while (true) // используется цикл на случай неверного ввода, а также для соединение и разделения нескольких файлов
- {
- printf("Выберите задачу (вводите номер):\n 1) Склейка файлов\n 2) Разделение файлов\n 3) Завершить работу\n");
- scanf("%d", &command);
- switch (command) // command определеяет какую задачу выполняем
- {
- case 1: // работа с f1,f2,f3
- while (true) {
- printf("Вы хотите записать в первый файл (код 1), во второй (код 2), в общий пустой (код 3)\n"); //выбор в какой файл записывать
- scanf("%d", &command);
- switch (command)
- {
- case 1://запись в 1 файл
- printf("Введите название файла 1 (не забудьте <<.txt>> в конце)\n");
- while (true)//проверка существует ли файл 1
- {
- scanf("%s", &name1);
- if ((f1 = fopen(name1, "a")) == NULL)// пытаемся открыть файл 1 для записи
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- printf("Введите название файла 2 (не забудьте <<.txt>> в конце)\n");
- while (true)//проверка существует ли файл 2
- {
- scanf("%s", &name2);
- if ((f2 = fopen(name2, "r")) == NULL)// пытаемся открыть файл 2 для чтения
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- fputs("&&&\n", f1); //заглушка для возможности позже разделить
- while (fgets(buff, 100, f2) != NULL)// читаем построчно файл 2 и кладем в файл 1 до тех пор пока не дойдем до конца
- {
- fputs(buff, f1);
- }
- goto M; // используется вместо break по причине необходимости выйти из двух циклов одновременно
- case 2://запись в 2 файл
- printf("Введите название файла 1 (не забудьте <<.txt>> в конце)\n");
- while (true)//проверка существует ли файл 1
- {
- scanf("%s", &name1);
- if ((f1 = fopen(name1, "r")) == NULL)// пытаемся открыть файл 1 для чтения
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- printf("Введите название файла 2 (не забудьте <<.txt>> в конце)\n");
- while (true)//проверка существует ли файл 2
- {
- scanf("%s", &name2);
- if ((f2 = fopen(name2, "a")) == NULL) // пытаемся открыть файл 2 для записи
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- fputs("&&&\n", f2); //заглушка для возможности позже разделить
- while (fgets(buff, 100, f1) != NULL) // читаем построчно файл 1 и кладем в файл 2 до тех пор пока не дойдем до конца
- {
- fputs(buff, f2);
- }
- goto M; // используется вместо break по причине необходимости выйти из двух циклов одновременно
- case 3://запись в пустой файл
- printf("Введите название файла 1 (не забудьте <<.txt>> в конце)\n");
- while (true) //проверка существует ли файл 1
- {
- scanf("%s", &name1);
- if ((f1 = fopen(name1, "r")) == NULL)// пытаемся открыть файл 1 для чтения
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- printf("Введите название файла 2 (не забудьте <<.txt>> в конце)\n");
- while (true)//проверка существует ли файл 2
- {
- scanf("%s", &name2);
- if ((f2 = fopen(name2, "r")) == NULL) // пытаемся открыть файл 2 для чтения
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- f3 = fopen("Результат.txt", "a");// открываем файл для записи
- while (fgets(buff, 100, f1) != NULL)//построчно кладем в файл 3 //построчно кладем в файл 3
- {
- fputs(buff, f3);
- }
- fputs("&&&\n", f3); //заглушка для возможности позже разделить
- while (fgets(buff, 100, f2) != NULL)//построчно кладем в файл 3 пока не дойдем до конца
- {
- fputs(buff, f3);
- }
- fclose(f3);
- goto M; // используется вместо break по причине необходимости выйти из двух циклов одновременно
- default://защитный код, а также утишительные слова
- printf("Похоже я не знаю такого номера. Будьте внимательны. Попробуте ввессти номер от 1 до 3. Удачи.\n");
- break;
- }
- }
- M://точка выхода из двух массивов
- fclose(f1); fclose(f2); //закрываем наши файлы для высвобождения памяти
- break;
- case 2: // работа с f3, f4, f5
- printf("Введите имя файла который необходимо разделить (не забудьте <<.txt>> в конце),\nесли файл был создан не программно не забудьте написать на отдельной строке <<&&&>>\n");//дает доп комментарий что разделяем мы именно по "&&&"
- while (true)// проверка наличия файла
- {
- scanf("%s", &name3);
- if ((f3 = fopen(name3, "r")) == NULL)//открываем файл 3 для чтения
- {
- printf("Не удалось открыть файл\n");
- }
- else
- break;
- }
- f4 = fopen("1_1.txt", "a");//открываем файл для записи первой части
- f5 = fopen("1_2.txt", "a");//открываем файл для записи второй части
- while (fgets(buff, 100, f3) != NULL)//читаем файл до конца
- {
- if (buff[0] == '&' && buff[1] == '&' && buff[2] == '&') // если нашли разделитель меняем файл в который записываем
- {
- id = 1;
- continue;
- }
- if (id == 0)
- fputs(buff, f4);
- else
- fputs(buff, f5);
- }
- fclose(f3); fclose(f4); fclose(f5); //закрываем наши файлы для высвобождения памяти
- break;
- case 3://код выхода из программы
- printf("Пока!");
- exit(1);
- default://защитный код, а также утишительные слова
- printf("Похоже я не знаю такого номера. Будьте внимательны. Попробуте ввессти номер от 1 до 3. Удачи\n");
- break;
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment