Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.13.113] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте. У меня вопрос по поводу записи
текстового файла. Сейчас я приведу пример простой программы, я понимаю почему она не работает как надо, но я не знаю какие и как применить процедуры, чтобы файл docum.txt записался полноценно, т.е. если я нажимаю ENTER, то запись должна производиться на сле- дующей строке, если я удаляю строку, то в за- писи она должна удаляться и т.д. В общем файл должен сохраняться по всем правилам. Какие процедуры надо применить и как дополнить прог рамму ? uses crt; var FiText:Text; x,y,dx,dy,MyMode:word; Ch:char; s:string; BEGIN Assign(FiText,'C:\docum.txt'); Rewrite(FiText); { сейчас пойдёт описание простейшего в мире текстового редактора,можно не читать} MyMode:=LastMode; TextMode(co80+Font8x8); window(1,1,80,2);TextBackGround(white);TextColor(black);clrscr; gotoxy(whereX+27,whereY);write('Текстовый редактор'); window(1,2,80,50); TextBackGround(blue);TextColor(red); clrscr; repeat Ch:=ReadKey; case Ch of #13: WriteLn; #0: begin Ch:=ReadKey; case Ch of #72: gotoxy(WhereX,WhereY-1); #75: gotoxy(whereX-1,WhereY); #77: gotoxy(WhereX+1,WhereY); #80: gotoxy(WhereX,WhereY+1); #82: InsLine; #83: DelLine;end;end; else Write(Ch); { А здесь начинается мой вопрос } S:=Ch+S; end; until Ch=#27; TextMode(MyMode); Write(FiText,S); Close(FiText); END. Помогите ! |
Сообщ.
#2
,
|
|
|
Создай массив S из 25 строчек по 80 символов.
Сделай For i := 1 to 25 do Begin S[i,0] := #80; For j := 1 to 80 do S[i,j] := ' ' End; Потом при вводе символа просто будешь писать... S[WhereY,WhereX] := Ch; Write(Ch); А в конце (после Until)... For i := 1 to 25 do Begin For j := 80 downto 1 do If S[i,j] <> ' ' then Begin S[i,0] := Chr(j); Break End; WriteLn(FiText, S[i]) End; |
Сообщ.
#3
,
|
|
|
Спасибо, идея с матрицей хорошая. Но удале-
ние строки на файл не влияет. Сейчас буду разбираться. Если есть ещё идеи, то подскажите , пожалуйста. |
Сообщ.
#4
,
|
|
|
Сказать по правде, я запутался окончательно.
Жду совета. |
Сообщ.
#5
,
|
|
|
"хИтрость" в том, что файл - это не экран. Нельзя стереть или вставить - можно только переписать.
Например, если из содержимого файла: Строка №1 Строка №2 Строка №3 Нужно удалить 2-ю Строку, то мы должны поверх строки 2 записать строку 3 и после нее завершить файл или записать новый файл поверх старого со строчками 1 и 3 (именно так и поступают текстовые редакторы). Независимо от способа - запись может производиться либо начиная с конца файла, либо с начала (Правда, в большинстве операционных систем есть команда перехода к определенному месту файла[в Borland Pascal есть процедура Seek()] и можно писать, начиная с этого места - но всегда поверх старого). |
Сообщ.
#6
,
|
|
|
Пожалуйста, приведите пример. Я не могу
успокоиться. |
Сообщ.
#7
,
|
|
|
Добавить строку номер N:
For i := N+1 to 25 do S[i] := S[i-1]; S[N] := ' '; Удалить строку номер N: For i := N to 24 do S[i] := S[i+1]; S[25] := ' '; |
Сообщ.
#8
,
|
|
|
Тьфу ты! Глюк!...
Добавить строку номер N: For i := 24 downto N do S[i+1] := S[i]; For i := 1 to 80 do S[N,i] := ' '; Удалить строку номер N: For i := N to 24 do S[i] := S[i+1]; For i := 1 to 80 do S[25,i] := ' '; |
Сообщ.
#9
,
|
|
|
Спасибо, я во всём разобрался.
|