Курсовой проект. Обработка текстовой информации
![]()
|
set()Назначение: функция, предназначенная для замены строки по индексу pos в массиве editStrung. Входные аргументы: string *editString – исходный массив, в котором будут проходить изменения int pos – индекс строки, которую нужно заменить; string pastLine – строка на которую надо заменить. Тип возвращаемого значения: void - функция ничего не возвращает saveStringInFile()Назначение: функция, предназначенная для сохранения строки в файл. Входные аргументы: string fileName – имя файла, в который нужно сохранить; string loadString – строка, которую нужно сохранить в файл. Тип возвращаемого значения: bool - функция возвращает значение типа bool. Если была ошибка при открытии файла, то вернётся false, иначе вернётся значение true. addStringsWithRequest()Назначение: функция, предназначенная для добавления строк. При этом данная функция запрашивает строки у пользователя. Входные аргументы: string *editString – исходный массив, в котором будут проходить изменения; int& lineCount – ссылка на размер массива. Ссылка нужна для того, чтобы была возможность изменить размер внутри данной функции; int pos – индекс, с которого нужно вставлять строки. Тип возвращаемого значения: void - функция возвращает новый массив с вставленными строчками. Описание интерфейса пользователяПосле запуска программы перед пользователем появится меню, в котором будут следующие пункты: 0 – выход из программы. 1 – Вставить последовательность строк, заданных в команде, после текущей строки. Высвечивается запрос сколько строк вставить и какие. Пользователь вводит строки, они записываются после текущей. затем происходит возврат в меню программы. 2 - Вставить последовательность строк, заданных в команде, перед текущей строкой; Высвечивается запрос сколько строк вставить и какие. Пользователь вводит строки, они записываются перед текущей. затем происходит возврат в меню программы. 3 - Удалить заданное число строк, начиная (заканчивая) текущей строкой; запрос сколько строк удалить. Удаление вместе с текущей. затем происходит возврат в меню программы. 4 - Заменить текущую строку на строку, указанную в команде; пользователь вводит строку, которой надо заменить текущую. затем происходит возврат в меню программы. 5- Перейти на заданное число строк вверх (вниз) относительно текущей строки; пользователь вводит положительные числа, если вниз надо спуститься и отрицательные, если наверх подняться. затем происходит возврат в меню программы. 6 - Вывести на экран заданное число строк, начиная с текущей строки; запрос на количество выводимых на экран строк. затем происходит возврат в меню программы. 7 - Записать текст в файл с именем, указанным в команде. Запрос имени нового файла. затем происходит возврат в меню программы. Меню представлено на рисунке 3. ![]() Рисунок 3 Алгоритм программыТочка входа в программу: функция main. Разберем алгоритм, который реализован данной функцией. Открываем файл для чтения; Проходим весь файл, чтобы получить количество строк, для этого используем функцию getLineCount(); Создаем массив с размером, который получили во втором пункте; С помощью функции read(file, arr) считываем из файла все строки в массив; Закрываем файл; С помощью функции readEditType() получаем значение меню, то есть действия, которые пользователь хочет выполнить со строками; Если пользователь вводит число 1, то вызывается функция addStringWithRequest(), в которую передается нынешнее положение + 1, чтобы последовательность строк была вставлена после текущей; Если пользователь вводит число 2, то вызывается функция addStringWithRequest(), в которую передается нынешнее положение, чтобы последовательность строк была вставлена перед текущей; Если пользователь вводит число 3, то у пользователя запрашивается количество строчек, которое нужно удалить, с помощью функции read(), затем создается новый массив, у которого размер меньше не то количество строк, которое хочет удалить пользователь, далее происходит сохранение в новый массив исходного массива с удалением строк, для этого используется функция deleteStrings(). Затем обновляем общий размер и исходный массив; Если пользователь вводит число 4, то мы запрашиваем строку, на которую пользователь хочет заменить, затем с помощью функции set() меняем значение строки; Если пользователь вводит число 5, то мы запрашиваем количество строк, на которое пользователь хочет перейти и меняем значение переменной pos; Если пользователь вводит число 6, то мы запрашиваем у пользователя число строк, которое он хочет вывести, затем с помощью функции printLines() получаем строку со всеми строками, которые нужно вывести и выводим их на экран; Если пользователь вводит число 7, то мы запрашиваем имя файла для сохранения, затем с помощью функции printLines() получаем все строки и затем с помощью функции saveStringInFile() сохраняем все строки в файл. Если пользователь ввел 0, то происходит выход из прогаммы. Если пользователь ввел любое другое число, то выводиться ошибка, что такой команды не найдено. 1)read(string outputString): ВЫВОД message ПОКА (1) Начало Int n; ЕСЛИ (cin >> n) Return n; Cin.clear(); ВЫВОД «Некорректный ввод. Введите заново:»; Конец. 2)readEditType(): ВЫВОД «Доступные команды:» ВЫВОД «0 - Выйти из программы;» ВЫВОД «1 - Вставить последовательность строк, заданных в команде, после текущей строки;» ВЫВОД «1 - Вставить последовательность строк, заданных в команде, перед текущей строкой;» ВЫВОД «3 - Удалить заданное число строк, начиная (заканчивая) текущей строкой;» ВЫВОД «4 - Заменить текущую строку на строку, указанную в команде;» ВЫВОД «5 - Перейти на заданное число строк вверх (вниз) относительно текущей строки;» ВЫВОД «6 - Вывести на экран заданное число строк, начиная с текущей строки;» ВЫВОД «7 - Записать текст в файл с именем, указанным в команде.» Return read («Введите номер команды, чтобы её выполнить: »). 3)getLineCount(): int I = 0; string line = «»; ПОКА (getline(fin, line)) I++; fin.clear(); fin.seekg(0); return i; 4)read(): string line; int i = 0; ПОКА (getline(fin, line)) Начало *(arr + i) = line; i++; Конец fin.clear(); fin.seekg(0); return arr; 5)printLines(): string stringOut = ""; ЦИКЛ по i от 0 до lineCount, i++ stringOut += *(arr + (lineStart + i)) + "\n"; return stringOut; 6)void addLines(): int edit_array_pos = 0; ЦИКЛ по i от 0 до pos, i++ Начало *(edit_array + edit_array_pos) = *(init_array + i); edit_array_pos += 1; конец ЦИКЛ по i от 0 до past_array_size; i++ Начало *(edit_array + edit_array_pos) = *(paste_array + i); edit_array_pos += 1; Конец ЦИКЛ по i от pos до init_array_size; i++ Начало *(edit_array + edit_array_pos) = *(init_array + i); edit_array_pos += 1; конец. 7)deleteStrings(): int new_array_pos = 0; ЕСЛИ (count_delete < 0) Начало size_t new_count_delete = 0; ЕСЛИ ((pos + count_delete) > 0) new_count_delete = pos + count_delete; ЦИКЛ по i от 0 до pos + count_delete; i++ Начало *(edit_array + new_array_pos) = *(editString + i); new_array_pos++; Конец ЦИКЛ по i от pos до lineCount; i++ Начало *(edit_array + new_array_pos) = *(editString + i); new_array_pos++; Конец Конец ИНАЧЕ Начало ЦИКЛ по i от 0 до pos; i++ Начало *(edit_array + new_array_pos) = *(editString + i); new_array_pos++; Конец ЦИКЛ по i от pos + abs(count_delete) до lineCount; i++ Начало *(edit_array + new_array_pos) = *(editString + i); new_array_pos++; Конец Конец. 8)Set(): *(editString + pos) = pastLines; 9)saveStringInFile(): bool isLoadGood = true; ofstream fout; fout.open(fileName); ЕСЛИ (!fout.is_open()) isLoadGood = false; ИНАЧЕ fout << loadString; fout.close(); return isLoadGood; 10)addStringWithRequest(): int countLines = read("Введите количество строк, которое хотите вставить: "); string* lines = new string[countLines]; ВЫВОД «Введите строчки» ЦИКЛ по i от 0 до countLines; i++ Начало string text; ЦИКЛ getline(cin, text); ПОКА (text == ""); *(lines + i) = text; Конец string* new_arr = new string[lineCount + countLines]; addLines(editString, lineCount, lines, countLines, new_arr, pos); lineCount += countLines; return new_arr. |