На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> У меня проблема с записью текстового файла
    Здравствуйте. У меня вопрос по поводу записи
    текстового файла. Сейчас я приведу пример
    простой программы, я понимаю почему она не
    работает как надо, но я не знаю какие и как
    применить процедуры, чтобы файл 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.
    Помогите !
      Создай массив 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;
        Спасибо, идея с матрицей хорошая. Но удале-
        ние строки на файл не влияет. Сейчас буду
        разбираться. Если есть ещё идеи, то подскажите , пожалуйста.
          Сказать по правде, я запутался окончательно.
          Жду совета.
            "хИтрость" в том, что файл - это не экран. Нельзя стереть или вставить - можно только переписать.
            Например, если из содержимого файла:
            Строка №1
            Строка №2
            Строка №3
            Нужно удалить 2-ю Строку, то мы должны поверх строки 2 записать строку 3 и после нее завершить файл или записать новый файл поверх старого со строчками 1 и 3 (именно так и поступают текстовые редакторы).
            Независимо от способа - запись может производиться либо начиная с конца файла, либо с начала (Правда, в большинстве операционных систем есть команда перехода к определенному месту файла[в Borland Pascal есть процедура Seek()] и можно писать, начиная с этого места - но всегда поверх старого).
              Пожалуйста, приведите пример. Я не могу
              успокоиться.
                Добавить строку номер 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] := ' ';
                  Тьфу ты! Глюк!...
                  Добавить строку номер 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] := ' ';
                    Спасибо, я во всём разобрался.
                    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0319 ]   [ 15 queries used ]   [ Generated: 28.04.24, 13:02 GMT ]