Строковый редактор текста

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    9,16 kb
  • Опубликовано:
    2011-11-26
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Строковый редактор текста

Чувашский государственный университет имени И.Н. Ульянова

Кафедра Вычислительной техники









КУРСОВАЯ РАБОТА

по дисциплине

«Программирование на языке высокого уровня»

на тему: «Строковый редактор текста»


Выполнил: студент гр. ИВТ-42-09

Васильев Владимир Александрович

Проверил: Симаков Александр Леонидович






Чебоксары, 2010

Задание

Разработать программу для редактирования в оперативной памяти текстовых ASCII-файлов размером не более 40 килобайт.

Программа должна читать текстовый файл в оперативную память; отображать название проекта, автора, язык управления, имя редактируемого файла; точно моделировать структуры данных и выполнять функциональность строкового редактора текста в объёме описания [1]; записывать отредактированный файл на диск.

Программа должна быть организована в соответствии с идеологией структурного программирования: разбитой на модули, процедуры, функции; текст должен быть структурирован.

Дополнительные по отношению к [1] функциональные возможности:

. Наличие справки о назначении и использовании редактора, вызываемой по ключу "/?" и пустой командной строке.

. Имя редактируемого файла должно передаваться в командной строке.

. Программа должна проверять наличие файла.

. Директивы "Прочитать" и "Записать" должны запрашивать имя файла.

. Минимальный набор модулей проекта "Строковый редактор текста":

главный модуль: справка, проверка наличия файлов, инициализация, чтение файла для редактирования, вызов монитора редактора текста;

глобальные данные;

служебные подпрограммы для организации интерфейса;

монитор редактора текста;

подпрограммы реализации каждой директивы.

Описание процесса разработки

Для решения поставленной задачи был выбран язык Pascal и среда разработки Turbo Pascal 6.0.

Интерфейс программы был разработан в соответствии с описанием [1]: использован алгоритм монитора редактора текста. Директивам пользователя в соответствие поставлены соответствующие процедуры обработки текста. Адреса процедур хранятся в массиве, так как это упрощает сопоставление директив и подпрограмм: для вычисления адреса процедуры нужно указать в индексе массива его номер, получаемый выделением пяти младших битов символа, который представляет команду пользователя.

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

) Список указателей на строки, ограниченные нулём. Данная структура позволила бы увеличить максимальный размер редактируемого файла, избежать пересылки в памяти больших объемов данных при вставке и удалении строк. Например, для вставки строк можно выделить область памяти B (1), на эту область создать указатель (2), разместить этот указатель в списке указателей за указателем, который указывает на область памяти A, в которой хранится последняя выведенная строка (3), в выделенную память переместить ту часть строк из области A, которая следует за последней выведенной (4), и, сдвигая содержимое В (5), размещать в B строки вводимые пользователем (6), причем при нехватке места в B, снова переходим к пункту (1). Для реализации этого метода потребовалось бы разработать процедуры, устраняющие фрагментацию памяти. Очевидно, что сложность реализации этой структуры высока.

) Массив из слов. Эта структура данных позволяет осуществлять прямой доступ к своим компонентам, что обуславливает простоту алгоритмов работы с ней и надёжностью реализации и расширения программы, а также простотой моделирования структуры данных из описания [1], потому была выбрана именно эта структура данных.

Описание программы

) Общие сведения.

Наименование программы: "Строковый редактор текста".

Программное обеспечение: для функционирования программы необходима операционная система Microsoft DOS.

Программа написана на языке программирования Pascal в среде разработки Turbo Pascal 6.0.

) Функциональное назначение: редактирование текстовых ASCII-файлов, организованных в виде строк, размером не более 40 килобайт. Максимальный размер вставляемых строк и буфера поиска - 78 символов.

) Описание логической структуры.

Программа состоит из следующих частей.

Главная программа, которая вызывает процедуры получения параметров из командной строки, выдачи справки и чтения файла. После выполнения этих процедур она вызывает монитор редактора текста.

Монитор редактора текста последовательно принимает директивы пользователя и параметры выполнения этих команд и контролирует правильность их задания, и запускает соответствующие модули редактирования текста. Он прекращает свою работу, получая от пользователя команду выхода.

Модули, вызываемые монитором можно разделить на несколько категорий по роду выполняемых ими задач.

Модули установки адресов задают адреса начала и конца области текста, доступного для дальнейшего редактирования.

Модули вставки и удаления строк пересылают части массивов и изменяют указатели границ текста.

Модуль перемещения перемещает указатель на заданное пользователем число строк.

Модуль вывода строк выводит заданное число строк, просматривая массив и подсчитывая число символов возврата каретки, и изменяет указатель последней выведенной строки.

Модуль поиска строк последовательно сравнивает начало заданной пользователем строки со всеми строками текста и выводит первую соответствующую запросу строку.

) Используемые технические средства: ЭВМ, совместимые с IBM PC.

) Вызов и загрузка: программа вызывается с указанием в качестве необязательного параметра имени файла для редактирования.

) Входные данные: текстовые файлы в соответствии со стандартом кодирования ASCII, символы, получаемые через стандартный поток входных данных DOS; предварительная подготовка: обеспечить соответствие ограничениям, указанным в пункте 2).

) Выходные данные: текстовые файлы в соответствии со стандартом кодирования ASCII, символы, передаваемые через стандартный поток выходных данных DOS.

) Выводы.

Достоинства: благодаря использованию структур данных с прямым доступом, программа позволяет с большой скоростью обрабатывать текстовые файлы, есть возможность ее расширения.

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

Предложения по модернизации и расширению.

Предлагается в дополнение к монитору команд осуществить режим управления, в котором будет возможно передавать на выполнение сразу множество команд в виде строки, которая также допускает некоторые расширения, например, задание цикла из последовательности директив, выполняющихся пока не достигнут конец текста. Это позволит создать систему автоматической обработки текстовых строк и сэкономить время на разработке программ, решающих частные задачи.

Литература

1. Строковый редактор текста. Метод. указания к лабораторным работам /Сост. А.Л.Симаков, А.В.Аникин. Чебоксары: Изд. Чуваш. ун-та. 1987. - 38 с.

. Работа в интегрированной среде программирования Turbo Pascal: Мутод. указания к лабораторным работам/ сост. А.Л.Симаков, Чебоксары: Изд. Чуваш. ун-та, 1993, 60с.

. Алгоритмические языки и программирование: Метод. указания к курсовой работе / Сост. А.Л.Симаков. Чебоксары: Изд. Чуваш. ун-та, 1995. - 36 с.

Приложение

Инструкция для пользователя (файл readme.txt).

======== Строковый редактор текста =========

Редактор текста предназначен для создания редактирования массивов символьной информации. Редактирование выполняется в режиме диалога пользователя с ЭВМ, ауправление редактированием осуществляется с помощью команд редактора текста.

Формат команды: [-][N][Буква] Enter

- Управление к началу редактируемого массива(по умолчанию знака минус нет)- целое число в восьмеричной системе счисления, указывает количество редактируемых строк текста

Буква - команда

Команды

----------------------------------------------------

Символ | Действие| переход в начало текста| вывод числа строк в редактируемом файле| удаление строк| переход в конец| вставка строк| перемещение| вывод строк| чтение файла| поиск строки с заданным началом| запись текста в файл| установка НОТ - начало области текста| установка КТ - адрес признака конца файла| установка КОТ - конец области текстаВасильев Владимир ИВТ-42-09

1)Входной файл:

The Persian orange, grown widely in southern Europe after its introduction to Italy in the 11th century, was bitter.oranges broughtto Europe in the 15th century from India by Portuguese traders quickly displaced the bitter,are now the most common variety of orange cultivated. The sweet orange will grow to different sizes andaccording to local conditions, most commonly with ten carpels,or segments, inside.

Директивы:(запись файла).

Результирующий файл:

The Persian orange, grown widely in southern Europe after its introduction to Italy in the 11th century, was bitter.oranges broughtto Europe in the 15th century from India by Portuguese traders quickly displaced the bitter,are now the most common variety of orange cultivated. The sweet orange will grow to different sizes andaccording to local conditions, most commonly with ten carpels,or segments, inside.

Файл прочитан и записан без изменений.

2)Входной файл:

The Persian orange, grown widely in southern Europe after its introduction to Italy in the 11th century, was bitter.oranges broughtto Europe in the 15th century from India by Portuguese traders quickly displaced the bitter,are now the most common variety of orange cultivated. The sweet orange will grow to different sizes andaccording to local conditions, most commonly with ten carpels,or segments, inside.

Директивы:

B (в начало файла)

P (перемещение на 2 строки вперед);(удаление последней выведенной строки);

F (поиск: задана строка "sweet");(удаление последней выведенной строки);(запись файла).

Результирующий файл:

The Persian orange, grown widely in southern Europe after its introduction to Italy in the 11th century, was bitter.according to local conditions, most commonly with ten carpels,or segments, inside.

3)Входной файл:

Директивы:(запись файла).

Результирующий файл:

Пояснение:

Открыт пустой файл и записан без редактирования.

4)Входной файл:

The Persian orange, grown widely in southern Europe after its introduction to Italy in the 11th century, was bitter.oranges broughtto Europe in the 15th century from India by Portuguese traders quickly displaced the bitter,are now the most common variety of orange cultivated. The sweet orange will grow to different sizes andaccording to local conditions, most commonly with ten carpels,or segments, inside.

Директивы:

F (поиск: задана строка "sweet");

D (удаление трех строк);(запись файла).

Результирующий файл:Persian orange, grown widely in southern Europe after its introduction to Italy in the 11th century, was bitter.

Главный модуль:ED_MAIN;Ed_MNT, Ed_Subr, Crt;: text;: boolean;;(F,Paramstr(1));

{$I-} Reset(F); {$I+}:=IOResult=0;(Result) and (Paramstr(1)<>'') then begin(F);(F);;;;;.

Модуль данных:Ed_Data;=array [boolean] of char;=#3;=#81;{Q}: boolean;: text;: array[0..20480] of word;: array[1..39] of word;,EKT : byte;: integer;: Char;, KT, HOT, YCC, YNC : word;.

Модуль Монитор

Unit Ed_MNT;

interfaceMonitor;Modul : char;: integer;Ed_Data, Ed_Subr, Crt;Monitor;:char;:byte;:=3;sost<>25 dosost of

: begin Writeln; EndProc:=True; Znak:='+'; Arg:=1;(11); Writeln('*'); NormVideo;:=6;

: begin:=Readkey;ch='-' then begin:=ch;(ch)else sost:=8;

: if ch=Otmena {const otmena ch=#3} then sost:=3 else sost:=9;

: if ch in ['0'..'9'] then sost:=14 else sost:=10;

: if ch in ['A'..'Z'] then begin:=18; Write(ch);else sost:=11;

: if ch=Vihod then sost:=25sost:=12;

: begin TextColor(11); Writeln('?'); NormVideo; sost:=3 end;

: begin_8chisla(ch);ch=otmena then sost:=3 else sost:=17;;

: if ch in ['A'..'Z'] then begin sost:=18; Write(ch) endbegin sost:=12; Writeln end;

: begin Edit:=Ord(ch) and $1F; Modul:=ch; ch:=Readkey;ch=otmena then sost:=3 else sost:=21;;

: if ch=#13 then begin sost:=22; Writeln endbegin sost:=12; Writeln end;

: if Modul='N' then sost:=24sost:=23;

: if EGR=1 then sost:=24sost:=12;

: begin TAM[Edit]; if EndProc then sost:=3 else sost:=12 end;;_8chisla(HOT);('T');_8chisla(KT);;;

end.

Модуль Подпрограммы

Unit Ed_Subr;

InterfacePustFile;UstZn;Pr_8chisla(var ch : char);V_8chisla(Chislo : word);ReadText(var F : text);A;B;C;D;E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;TAM : array[1..26] of procedure=(A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,,S,T,U,V,W,X,Y,Z);Ed_Data, Crt;PustFile;(Buf[0])[false]:='0';(Buf[0])[true]:=#26;;UstZn;:=1;:=0;:=20480;:=0;:=0;;Pr_8chisla(var ch:char);chislo, cifra : integer;:=0;ch in ['0'..'7'] do begin(ch);:=chislo*8;:=ord(ch)-ord('0');:=cifra and $07;:=chislo+cifra;:=Readkey;;:=chislo;;V_8chisla(Chislo : word);i : shortint;(Chislo and $8000);:=12;((Chislo shr i) and $0007);:=i-3;i=-3;;Outline;ch : char;: byte;: boolean;YNC = KT then Writeln('Љ®Ґж ⥪бв®ў®Ј® д ©« !!!')begin:=false; YCC:=YNC; ch:='0';ch<>#13 do begin:=TArr(Buf[YNC])[j];(ch<>'0') then(ch<>#13) then Write(ch);j=true then YNC:=YNC+1;:=j xor true;;j=true then YNC:=YNC+1;;;;YKV(Adress : word);k : integer;: boolean;: char;:=0;(Adress<>KT) and (k<>ARG) do begin:=false;:='0';ch<>#13 do begin:=TArr(Buf[Adress])[j];j=true then Adress:=Adress+1;:=j xor true;;j=true then Adress:=Adress+1;:=k+1;;:=Adress;;ReadText(var F : text);ch : char;: integer;: boolean;:=HOT; j:=false;not Eof(F) do beginnot Eoln(F) do begin(F,ch);(Buf[i])[j]:=ch;j then Inc(i);:=j xor true;;(F);(Buf[i])[j]:=#13;not j then begin:=j xor true;(Buf[i])[j]:='0';;(i);:=j xor true;;(Buf[i])[j]:='0';:=j xor true;(F,ch);(Buf[i])[j]:=#26;:=i;;ReadScrText(var Mnt : boolean; var AC : word);ch : char;, j : boolean;: byte;:=2; Exit:=false; Mnt:=false;(not Exit) and (not Mnt) dosost of

: begin Write('>'); AC:=1; j:=false; sost:=3 end;

: begin ch:=Readkey;ch=Otmena then begin Writeln; sost:=2 end else sost:=6;;

: if ch=#26 then Mnt:=true else sost:=7;

: if (AC=39) and j and (ch<>#13) then begin;('ЃгдҐа Ї®«®!!! "ENTER" ¤«п ўў®¤ бва®ЄЁ!!!');:=3begin(SmallBuf[AC])[j]:=ch;:=10;;

: if ch=#13 then begin Exit:=true; Writeln endbegin(ch);j then Inc(AC);:=j xor true;:=3;;;not j then begin:=j xor true;(SmallBuf[AC])[j]:='0';;;A;:=false;;B; {GO TO BEGIN}:=HOT;:=HOT;;C;:=false;;D; {DELETE STRING}i : integer;: integer;(YCC);:=YCC;:=YNC;[i]:=Buf[j];:=j+1;:=i+1;j=KT+1;:=YCC;:=i-1;;;E; {GO TO END}:=KT;:=KT;;F; {FOUND}k, i : word;, j : boolean;, ch2 : char;(Endfound, i);:=FALSE;:=YNC;(k<>KT) and (not Endfound) do begin:=1;:=false;:=TArr(Buf[k])[j];(ch1<>#13) and (not Endfound) do begin:=TArr(Buf[k])[j];:=TArr(SmallBuf[i])[j];ch2=#13 then:=truech1=ch2 then beginj then begin Inc(k); Inc(i) end;:=j xor true;beginj then Inc(k);:=j xor true;:=TArr(Buf[k])[j];ch1=#13;;;ch2<>#13 then begin(k);:=k;:=false;:=1;;;;;G;:=false;;H; {OUT HELP FILE}: text;: byte;: string[80];(White);:=0;(ReadmeTxt, 'readme.txt');(ReadmeTxt);NOT Eof(ReadmeTxt) do begin(ReadmeTxt, str);(str);;(ReadmeTxt);;;I; {INPUT STRING}Mnt : boolean;, i : word;('‚ўҐ¤ЁвҐ ўбв ў«пҐ¬лҐ бва®ЄЁ');(Mnt, AC);not Mnt then begin(KT+AC)<KOT then begin:=YNC;:=KT;[i+AC]:=Buf[i];(i)i=YNC-1;:=KT+AC;i:=1 to AC do begin[YNC]:=SmallBuf[i];(YNC);;else begin('ва®Є Ґ ў¬Ґй Ґвбп!!!');:=TRUE;;;Mnt;;J;:=false;;K; {Kt}EKT=1 then EndProc:=falseARG>=HOT then begin EKT:=1; KT:=ARG; endEndProc:=false;;L;:=false;;M;:=false;;N; {NOT}:=1;:=0;:=ARG;:=ARG;:=ARG;:=ARG;:=ARG;;O; {kot}EKT=0 then EndProc:=falseARG>=KT then KOT:=ARGEndProc:=false;P; {GO TO}Adress, k : integer;: char;: boolean;Znak='+' then begin YKV(YNC); YCC:=YNC endbegin:=-1;:=YNC;(Adress<>HOT) and (k<>ARG) do begin:=false;:='0';(ch<>#13) and (Adress<>HOT) do begin:=TArr(Buf[Adress])[j];j=true then Adress:=Adress-1;:=j xor true;;j=true then Adress:=Adress-1;:=k+1;;Adress<>HOT then Adress:=Adress+2Writeln('Ќ з «® ⥪бв®ў®Ј® д ©« !!!');:=Adress;:=YNC;;;;Q;:=false;;R; {READ}ch : char;: boolean;: string[20];: text;('‚ўҐ¤ЁвҐ Ё¬п д ©« ¤«п । ЄвЁа®ў Ёп: ');(FName);(F,FName);

{$I-} Reset(F); {$I+}:=IOResult=0;Result then begin(F);:=HOT;:=HOT;;Result then Close(F)begin(Buf[0])[false]:='0';(Buf[0])[true]:=#26;:=HOT;;;S;:=false;;T;:=false;;U;:=false;;V; {OUTPUT STRING}Povtor : integer;: boolean;:=0;:=false;YNC=KT then KV:=true;;:=Povtor+1;(Povtor=ARG) or KV;;W; { wRITE IN FILE}F : text;: char;: word;: boolean;: string[15];('‚ўҐ¤ЁвҐ Ё¬п § ЇЁблў Ґ¬®Ј® ¤ЁбЄ д ©« : ');(FName);(F,FName);(F);:=HOT; j:=false;i<>KT do begin:=TArr(Buf[i])[j];ch<>'0' then Write(F,ch);ch=#13 then Write(F,#10);j=true then i:=i+1;:=j xor true;;(F);;X; {# STRINGS}i, count : integer;: boolean;: char;:=HOT;:=false;:=0;i<>KT do begin:=TArr(Buf[i])[j];ch=#13 then count:=count+1;j=true then i:=i+1;:=j xor true;;('‚ᥣ® ', count, ' бва®Є(Ё)..');;Y;:=false;;Z;:=false;

end;.

Похожие работы на - Строковый редактор текста

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!