Форум программистов, компьютерный форум, киберфорум
QBasic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 6

Текстовый редактор на QBASIC

14.01.2011, 20:53. Показов 4536. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужен код простого текстового редактора на QBASIC.
Особого практического применения этоа программа (конечно) иметь не будет. Мне нужно понять принци построения этого типа программ. Я занимаюсь программированием как хобби и немного запутался - было много однообразной теории и мало практики. Пожалуйста помогите словом и файлом.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.01.2011, 20:53
Ответы с готовыми решениями:

Графический редактор на qbasic ,не могу сохранить файл
Начал писать графический редактор ,столкнулся с проблемой.Не могу понять как сохранить массив чисел ) в файл ,допустим M(I, G ) чтоб...

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

Текстовый редактор в C++
Приветствую всех!!! На днях решил создать текстовик в Visual Studio 2010 создал графический каркас текстовика а вот дальше засада в MFC я...

14
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
23.01.2011, 08:05
Уважаемый Hunter1, если вы планируете писать текстовый редактор не в DOS, особого толку от советов не будет.

Во-первых, QBasic и весь DOS оперируют однобайтовой кодировкой ASCII, в Windows и Linux совершенно другие кодировки.
Во-вторых, писать многооконные интерфейсы под DOS тяжеловато, т.е. самый простой вариант ограничиться однооконным.
В-третьих, основную сложность представляют команды открытия и сохранения файлов, в системе DOS для этого используются функции системы, вызываемые через прерывания, создать меню file -> open не самая простая задача для QBasic, если в QuickBasic вы сможете накодить функции нахождения первого и последующих файлов через DTA на ассемблере(через *.qlb* библу), то в QBasic для этого вам потребуется написать всё в машинных кодах(стянуть код из отладчика не проблема).
В-четвёртых, текстовый редактор подразумевает работу с мышью(прерывание 33H), в нём должны быть функции выделения, копирования, вырезания, удаления и вставки текста. Функции поиска и модификации также важны.
В-пятых, за всё время существования ПК люди написали столько текстовых редакторов, что придумать что-то более удобное и оригинальное скорее всего нереально.

Как же пишут редактор текста под DOS:
1) Процедуры скана директории в первую очередь.
2) Визуальную оболочку: окошко с курсором, определиться с максимальной шириной и высотой текста, завести память, работать непосредственно с буфером экрана(сегмент B800H).
3) Набить код для перемещения по тексту, вставке текста при печати символа и удаления символа.
4) Накодить функцию открытия файла и сохранения открытого файла.
5) Добить функционал программы (выделение, копирование и т.д.) - это достаточно тупая и рутинная работа.
6) Функцию сохранения в любой файл (save as)

Перемещение по каталогам осуществлять через команду CD(предпочтительнее) или CHDIR.
Также можно осуществить работу с промежуточным буфером в 64Кб, разбить файл на куски по 64 кб и работать с отдельным видимым в текущий момент куском(работа с большими файлами).
Также есть некоторая вероятность, что 64 символов для возврата текущей директории может не хватить и придётся писать прогу для прямого взаимодействия с диском, или функцию обратного сканирования до корня диска(сохранение файла-ключа, команда "CD ..", далее скан директории, открытие директории поиск файла-ключа и т.д. и т.п.).

Касательно кода - вы уж извините показать нечего, накодить такой редактор в QuickBasic для меня легче лёгкого, но тратить почти месяц на эту глупую рутинную работу совершенно влом.
1
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 6
25.01.2011, 21:34  [ТС]
Я понял, что в вопросе допустил противоречие - самый простой редактор - это несколько строк кода, которые позволяют вводить строковые данные или удалять их с помощью кнопки backspace - всё! Грубо говоря на чёрном экране должны появляться белые буквы. Я так понимаю, нужно создать строковый массив и описать реакцию на нажатие управляющих клавиш. Если возможно, то, пожалуйста, покажите такой код.
Прошу прощения за неграмотность формулировок.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
26.01.2011, 12:27
Не знаю насколько продуктивна моя помощь, сейчас люди думают, что покажи им пример и они так же смогут. На деле однако иначе.
Hunter1, задача это простейшая, любой средний кодер выполнит её с легкостью, вся проблема в том что это требует кучу времени, просто кучу. Я хочу сказать о том, что не умея программировать и не зная языка вы не сможете это написать даже по сотне примеров, говорю определённо точно.

Вот вспомнил детство, написал вам небольшой кусок, вкуривайте:
PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
   CONST Strok = 50, Dlina = 80
   DIM Mem(Strok) AS STRING * Dlina
   DIM St(9) AS STRING * 1
 
  ' Стиль окна
 St(1) = "┌": St(2) = "─": St(3) = "┐"
 St(4) = "│": St(5) = " ": St(6) = "│"
 St(7) = "└": St(8) = "─": St(9) = "┘"
  ' Проверка работы
 Mem(1) = " ■  Это гавеный текстовый редактор Ver 0.01  ■"
 Mem(2) = " Сдохнете, пока будете его дописывать"
 Mem(3) = "[ ▒▒ эта строка длиной 80 символов символизирует о правильности отображения ▒▒ ]"
 Mem(5) = "Окошко настроите сами"
  ' Чистим экран
 CLS
  ' Клавиши
 Rg$ = CHR$(0) + CHR$(77)
 Lf$ = CHR$(0) + CHR$(75)
 Up$ = CHR$(0) + CHR$(72)
 Dn$ = CHR$(0) + CHR$(80)
  ' Позиция курсора в тексте
 xp% = 0
 yp% = 0
  ' Отображение окна
 wPx% = 10    ' Позиция x
 wPy% = 10    ' Позиция y
 wDx% = 60    ' Длина x
 wDy% = 5     ' Длина y
 PInWx% = 0   ' Позиция в окне x
 PInWy% = 0   ' Позиция в окне y
 BgColor% = 1 ' Цвет фона
 
  ' Отрисовка
 ReDraw% = 1    ' Триггер для отрисовки
  ' Подготовка стиля(окно не двигается, делаем заранее)
 COLOR 10, 1: LOCATE wPy%, wPx%: PRINT St(1) + STRING$(wDx%, St(2)) + St(3)
  FOR iy% = 1 TO wDy%: LOCATE wPy% + iy%, wPx%: PRINT St(4)
  LOCATE wPy% + iy%, wPx% + wDx% + 1: PRINT St(6): NEXT
 LOCATE wPy% + wDy% + 1, wPx%: PRINT St(7) + STRING$(wDx%, St(8)) + St(9)
 
    ' Основной цикл
DO
  Kb$ = INKEY$
     '  Проверяем клавиатуру и перемещаем курсор
    IF Kb$ = Lf$ AND xp% > 0 THEN ReDraw% = 1: xp% = xp% - 1
    IF Kb$ = Rg$ AND xp% < 79 THEN ReDraw% = 1: xp% = xp% + 1
    IF Kb$ = Up$ AND yp% > 0 THEN ReDraw% = 1: yp% = yp% - 1
    IF Kb$ = Dn$ AND yp% < 22 THEN ReDraw% = 1: yp% = yp% + 1
       '  Вычленение скан-кода
    IF LEN(Kb$) = 1 THEN KeyKod% = ASC(Kb$) ELSE KeyKod% = -1
       '  Все печатаемые символы из кодировки
       IF KeyKod% > 31 THEN
          'тут процедура добавления символа
       END IF
 
       ' Отрисовка окна
   IF ReDraw% = 1 THEN
      ReDraw% = 0
        ' Проверяем границы курсора и окна
      IF xp% >= (PInWx% + wDx%) THEN PInWx% = PInWx% + 1
      IF xp% < PInWx% THEN PInWx% = xp%
      IF yp% >= (PInWy% + wDy%) THEN PInWy% = PInWy% + 1
      IF yp% < PInWy% THEN PInWy% = yp%
 
        ' Печатаем текст из памяти
      FOR iy% = 1 TO wDy%
        COLOR 15, 1
        LOCATE wPy% + iy%, wPx% + 1, 0
        PRINT MID$(Mem(iy% + PInWy%), PInWx% + 1, wDx%)
      NEXT
 
      LOCATE yp% - PInWy% + wPy% + 1, xp% - PInWx% + wPx% + 1, 1
   END IF
LOOP UNTIL Kb$ = CHR$(27)
Вставку символов добавить пара минут, но я и так уже вам много накатал, пишите тренируйтесь, тут за вас кодить никто не будет.
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
26.01.2011, 12:31
Извиняюсь, кодировка ASCII на сайте не пашет. Вот ловите архив:
Вложения
Тип файла: rar TEXRED.rar (1.2 Кб, 69 просмотров)
2
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 6
28.01.2011, 19:42  [ТС]
Ещё раз большое спасибо, но в начале не совсем понял:
для чего в описании типа данных для массива название типа данных перемножается на какое-либо число?
Я вот об этом:

PureBasic
1
2
DIM Mem(Strok) AS STRING * Dlina
DIM St(9) AS STRING * 1
А так да, я согласен, что даже по сотне примеров нельзя научиться чему-либо вООбще не зная теорию и не прикладывая никаних усилий. Однако мне это пример нужен для того, чтобы понять принципы, по которым пишутся ТР и похожие программы. Поэтому для меня были ценными оба сообщения.
0
PB
28.01.2011, 20:05

Не по теме:

Цитата Сообщение от Hunter1 Посмотреть сообщение
А так да, я согласен, что даже по сотне примеров нельзя научиться чему-либо вООбще не зная теорию и не прикладывая никаних усилий. Однако мне это пример нужен для того, чтобы понять принципы, по которым пишутся ТР и похожие программы.
Вам необходимо научится создавать текстовые редакторы, предназначены исключительно для работы в DOS?
Если честно, то я не представляю как эти знания можно применить на практике, создавая программы для Windows.

0
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 6
28.01.2011, 21:56  [ТС]
А зачем тогда вообще есть QBASIC? Согласно Википедии он "довольно популярен для обучения программированию".
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
28.01.2011, 22:09
Для обучения основам программирования, он подходит.

Не по теме:

Но нужно понимать, что программирование под DOS и современные операционные системы (Windows, Linux и т. д.), различается.
Скажем, в Windows есть WinAPI функции, которые существенно облегчают программирование.
Например, создать текстовый редактор для Windows намного проще чем для DOS, потому что в Windows есть готовые компоненты для редактирования текста, просмотра содержимого диска, работы с файлами и нет необходимости изобретать велосипед.

0
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 6
30.01.2011, 21:58  [ТС]
А поясните, пожалуйста, что такое триггер. Из электроники знаю, из программирования - конкретного определения данного понятия (как такового) не нашёл и сам не уловил. В коде, представленном выше он нужен для отрисовки? носит имя ReDraw% и имеет значение 1.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
30.01.2011, 22:39
Если кратко, то это типа сигнала что нужно выполнить что-либо, в данном случае, перерисовать область.
Пока изменений нет, то нет необходимости в перерисовке. Зачем выполнять то, в чем нет необходимости?

Он устанавливается в следующих случаях
PureBasic
1
2
3
4
5
     '  Проверяем клавиатуру и перемещаем курсор
    IF Kb$ = Lf$ AND xp% > 0 THEN ReDraw% = 1: xp% = xp% - 1
    IF Kb$ = Rg$ AND xp% < 79 THEN ReDraw% = 1: xp% = xp% + 1
    IF Kb$ = Up$ AND yp% > 0 THEN ReDraw% = 1: yp% = yp% - 1
    IF Kb$ = Dn$ AND yp% < 22 THEN ReDraw% = 1: yp% = yp% + 1
А проверяется в 57 строке
PureBasic
1
2
   IF ReDraw% = 1 THEN
      ReDraw% = 0
Если он установлен, то тут же сбрасывается, после чего, выполняются требуемые действия, в нашем случае, перерисовка.
1
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
31.01.2011, 23:15
для чего в описании типа данных для массива название типа данных перемножается на какое-либо число?
Если вы внимательно читали справку QBasic, то там написано, что это переменная типа STRING фиксированной длины в n-ное количество байт.
Это единственный способ, для использования памяти с точностью до байт и для хранения строк фиксированной длины(скрин смотрите). Умение шерстить в справке вам в будущем пригодится.

Согласно Википедии он "довольно популярен для обучения программированию".
Во-первых википедия не последняя инстанция и не несёт ответственности за "ложную" информацию, что в ней самой же и написано. Ну а во-вторых Qbasic хорош для начал кодинга, единственное и главное - не допустить такую ошибку как я: углубиться в программирование на ОС MS-DOS, ибо впоследствии всё будет казаться глупым и нелогичным(чем оно собственно и является). Хотя после линукса, что-то более глупое, геморное и нелогичное сложно придумать(Графический интерфейс - а толку ноль, ибо всё ручками-ручками через терминал)

А поясните, пожалуйста, что такое триггер.
Не знаю как передать мысль более точно, но я считаю триггером действие, совершаемое по логическому условию и использующее для этого определённые состояния(собственное или других триггеров). Условием можно считать команду IF, когда код доходит до условия, он проверяет его и выполняет код внутри(действие триггера) если условие правдиво, иначе действие игнорируется.
Не претендую на какую-либо правду, просто я привык так именовать некоторые переменные, выполняющие роль флагов, которые работают по определённому плану и влияющие на определённые события в программе.

мне это пример нужен для того, чтобы понять принципы, по которым пишутся ТР и похожие программы.
Вы так говорите, будто это мелкая вшивая программка.
TurboPascal это интегрированная среда разработки, основанная на диалекте PASCAL, кроме текстового редактора она включает встроенный многофункциональный компилятор, линкер и кучу тулзов. Написать в одиночку ничего подобного вы не сможете за 20 лет жизни, если только вы не Альберт Эйнштейн. Я не занижаю ваши способности, просто пытаюсь намекнуть, что это вам не по силам, если вы вдруг собрались писать компилятор, встроенный в текстовый редактор.
Миниатюры
Текстовый редактор на QBASIC  
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
01.02.2011, 00:25
Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
TurboPascal это интегрированная среда разработки,
Я предполагаю что под ТР подразумевался текстовый редактор, а не TurboPascal.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
01.02.2011, 02:03
Я предполагаю что под ТР подразумевался текстовый редактор, а не TurboPascal.
Походу ты прав. Мда забавные сокращения попадаются, с ходу и не поймёшь.
0
0 / 0 / 0
Регистрация: 14.01.2011
Сообщений: 6
01.02.2011, 19:05  [ТС]
ТР - это текствый редактор
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.02.2011, 19:05
Помогаю со студенческими работами здесь

Текстовый редактор
• Разработать программный код для пункта Файл/ Новый. При выборе этого пункта текстовое окно очищается, если его содержимое было сохранено....

Текстовый редактор
Нужен текстовый редактор, хотя бы самый простенький. Но раньше с его установкой на сайт, никогда не работал... Подскажите: 1) Где его...

Текстовый редактор
Ребят, добрый вечер всем. Надо создать редактируемое поле для занесения в него произвольного текста. Используя средства интерфейса в виде...

Текстовый редактор
Создать простейший текстовый редактор на основе компонента Memo. Ос- новная особенность редактора состоит в том, что в нем предусмотрена...

Текстовый редактор
Я написал свой текстовый редактор. Нужно, чтобы при двойном клике на txt файл в Windows открывался файл в моем текстовом редакторе. Я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru