Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Редактирование строки

Автор: guf 8.04.2008 21:12

Прошу помочь разобраться. Текст задан как массив строк. Над каждой строкой нужно провести следующие действия:
- удалить символ в любом месте строки
- вставить символ в любом месте строки
Также добавление/удаление строки в массиве строк.
Эти действия нужно выполнять с помощью управляющих клавиш- влево, вправо, вниз, вверх, Del, Ins, Backspace

program Text_Editor;
uses Crt;

Const N_Max=256;

Var
str:array[0..N_Max] of string[80];
ch:char;
f,f1:text;
S,S1,S2:string;



Procedure Edit_Text;
Var l,m:byte;q:integer;
Begin
clrscr;
Write('Vxod '); Readln(S1);
Write('Vihod '); Readln(S2);
Assign(f,s1);
Assign(f1,s2);
Reset(f);
Rewrite(f1);
While not EOf(f) Do
Begin
clrscr;
l:=0;
Repeat
l:=l+1;
ReadLn(f,str[l]);
Until (l=N_Max) or EOf(f);
For m:=1 To l Do
repeat
writeln(str[m]);
Ch:=readkey;
Case Ch Of
#8:... {backspace}

#82:... {Ins}

#83:... {Del}

#72:... {up}

#75:... {left}

#77:... {right}

#80:... {down}
end;
until ch=#13;
end;
close(f);
close(f1);
End;

begin
Edit_Text
end.

.

Автор: guf 10.04.2008 20:39

Ладно раз уж никто не может это сделать, то как оргаизовать "пробежку" по строке с помощью стрелок

Автор: klem4 10.04.2008 21:28

фактически тебе нужен простейший текстовый редактор, на форуме были реализации поищи, сейчас времени писать нету, вот пример как по строке вправо-влево бегать:

uses crt;

type
MyString = object
data: String;
crPos: Byte;

constructor Create(s: String);
destructor Done;

procedure ReShow;
procedure Run;
end;

constructor MyString.Create(s: String);
begin
data := s;
crPos := 1;
end;

destructor MyString.Done;
begin
end;

procedure MyString.ReShow;
var
i: Byte;
begin
ClrScr;
for i := 1 to length(data) do begin
if i = crPos then
TextColor(Green)
else
TextColor(White);
write(data[i]);
end;
GotoXY(crPos, 1);
end;

procedure MyString.Run;
var
ch: Char;
begin
ReShow;

repeat
ch := readkey;

case ch of
#0: begin
ch := readkey;
case ch of
#75: if crPos > 1 then dec(crPos);
#77: if crPos < length(data) then inc(crPos);
end;
end;
end;

if ch in [#75, #77] then
ReShow;
until ch = #27;
end;

var
ms: MyString;
begin
clrscr;
ms.Create('Borland Pascal');
ms.Run;
ms.Done;
end.

Автор: guf 11.04.2008 4:00

klem4, спасибо за ответ, но к такому программированию я не склонен, т.к. паскаль изучаю сравнительно недавно.
кто-нибудь может показать пример пробежки по строке, желательно для моего случая, а то не смог найти..?