![]() |
![]() ![]() |
![]() |
sheka |
![]()
Сообщение
#1
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
подскажите, пожалуйста, где можна найти такую программку, которая оформляла бы текст программы, или как такую самому сделать.
например, так: из: begin
a:=1;
end;
в: begin
a:=1;
end;
Даже как называется не знаю:) пробовал что-то сам такое сделать за минут 10, но там столько разных вариантов... Что-то типа такого вышло: unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure into_dop_from_trimmed;
var
fin,fout:textfile;
str:string;
begin
assignfile(fin,Form1.edit1.Text+'(Trimmed).PAS');
reset(fin);
assignfile(fout,'dop.txt');
rewrite(fout);
while not Eof(fin) do
begin
readln(fin,str);
writeln(fout,str);
end;
Closefile(fout);
Closefile(fin);
end;
function min(a,b:byte):byte;
begin
if a<=b then min:=a
else min:=b;
end;
(*После каждой точки с запятой перенос на новую строку*)
procedure into_new_line;
var
fin,fout:textfile;
str:string;
position:byte;
begin
assignfile(fin,Form1.edit1.Text+'.PAS');
reset(fin);
assignfile(fout,Form1.Edit1.Text+'(Trimmed).PAS');
rewrite(fout);
while not Eof(fin) do
begin
readln(fin,str);
repeat
if pos(';',str)=0 then Position:=Length(str)
else Position:=pos(';',str);
writeln(fout,Copy(str,1,Position));
Delete(str,1,Position);
while (0<Length(str))and(str[1]=' ') do Delete(str,1,1);
until str='';
end;
Closefile(fout);
Closefile(fin);
end;
(*Отступы перед каждой строкой*)
procedure otstup;
const Dlina_otstup=2;
var
fin,fout:textfile;
str:string;
i,kol_otstup:byte; (*Количество отступов*)
begin
into_dop_from_trimmed;
kol_otstup:=0;
assignfile(fin,'dop.txt');
reset(fin);
assignfile(fout,Form1.Edit1.Text+'(Trimmed).PAS');
rewrite(fout);
while not Eof(fin) do
begin
readln(fin,str);
if (pos('end',str)<>0)then if kol_otstup>0 then dec(kol_otstup);
for i:=1 to kol_otstup*Dlina_otstup do str:=' '+str;
writeln(fout,str);
if (pos('begin',str)<>0)or (pos('case',str)<>0)then inc(kol_otstup);
end;
Closefile(fout);
Closefile(fin);
Erase(fin);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
into_new_line;
otstup;
halt;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
{edit1.SetFocus;}
end;
end.
Сообщение отредактировано: sheka - 27.08.2009 19:28 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
|
sheka |
![]()
Сообщение
#3
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Да, спасибо, о ней.
Только как этим "форматтером" пользоваться? у меня при запуске ехе она сразу вылетает. Сообщение отредактировано: sheka - 26.08.2009 22:45 |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Ей надо передавать параметры через командную строку. Вот тут есть список настроек: http://www.freepascal.org/tools/ptop.var
Разберешься? |
sheka |
![]()
Сообщение
#5
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Разберешься? Врядли. На сколько я понял надо запустить командную строку, оттуда загрузить ptop.exe и каким то образом передать вот эти настройки( создать чтоли какой-то ptop.cfg?) . Цитата Options -h Writes a short description of these switches. -c read options from configuration file. A configura- tion file is not needed, ptop will revert to inter- nal defaults then. See also -g -i ident Sets the number of indent spaces used for BEGIN END; and other blocks. -b bufsize Sets the buffersize to bufsize. Default 255, 0 is considered non-valid and ignored. -v be verbose. Currently only outputs the number of lines read/written and some error messages. -g ptop.cfg Writes a default configuration file to be edited to the file ptop.cfg В английском не сильно силен ![]() Добавлено через 3 мин. Если не тяжело, объясните пожалуйста что к чему. потому что из всех настроек я понял только зачем нужна эта: Цитата -i ident Sets the number of indent spaces used for BEGIN END; and other blocks. все остальные мне ничего не говорят. Сообщение отредактировано: sheka - 26.08.2009 23:14 |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Взял неформатированный файл (без отступов вообще), PTOP у меня находится в папке с исходниками, запустил cmd.exe, перешел в папку, где лежат исходники и PTOP, и задал команду:
F:\Programs\Pascal>ptop -i 3 __fmt.pp __fmt.pas |
sheka |
![]()
Сообщение
#7
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Класс, супер, то что хотел!
Только один вопрос: как сделать "перешел в папку, где лежат исходники и PTOP"? я такого не умею. там ведь пишется с:\ ... а у меня все находится на е:\ ... ну я воспользовался bat файлом, а как это надо было? |
volvo |
![]()
Сообщение
#8
|
Гость ![]() |
|
sheka |
![]()
Сообщение
#9
|
![]() Я. ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: ![]() ![]() ![]() |
Понял, спасибо. т.е. надо поставить сначала перенаправление на диск, а потом только писать путь.
|
maksimla |
![]()
Сообщение
#10
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
а может есть такае же программа сделана на Дельфи или другом языке чтобы запустил программу указал папку как в винтовсе и выбрал файл и он отредоктировалсябы
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Ну, напиши оболочку на Дельфи, которая будет давать пользователю возможность выбрать имя файла, а потом вызывать ShellExecute-ом эту самую утилиту, в чем проблема-то?
|
maksimla |
![]()
Сообщение
#12
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 324 Пол: Мужской Реальное имя: maksim Репутация: ![]() ![]() ![]() |
Не знаю я Дельфи языка еще вот в этом вся проблема а в cmd.exe как то боязнено лезть могу неправильно наделать там чтото натворить нехочется терять ОС Vista я ведь совсем в досе и в cmd не разу не работал
-------------------- Учусь первый год на программиста в колледже. Учусь на втором курсе в школе программирования при научно-исследовательском институте математики и информатики.
|
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Ну, вот тебе оболочка:
![]() <файл удален...> Сообщение отредактировано: volvo - 1.08.2010 22:28 |
Jabbson |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Арсений Репутация: ![]() ![]() ![]() |
Было бы здорово добавить функцию "убрать форматирование" открытого файла, которая читала бы строку и удаляла пробелы до тех пор, пока не начался текст, а как только начался - идти на след строку и так до конца файла. Таким образом можно было бы автоматизировать чистку "самоформата", а не вручную деформатировать код.
|
volvo |
![]()
Сообщение
#15
|
Гость ![]() |
Цитата Было бы здорово добавить функцию "убрать форматирование" открытого файла <файл удален...> Сообщение отредактировано: volvo - 1.08.2010 22:28 |
Jabbson |
![]() ![]()
Сообщение
#16
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 11 Пол: Мужской Реальное имя: Арсений Репутация: ![]() ![]() ![]() |
Вот так что-ли? Да, класс!!! Теперь это вообще конфетка. Еще бы 866 понимала, но это легко обходится. Спасибо. P.S.> а не, не легко, русский язык не воспринимает, а при попытке форматирования выдает ошибку "Невозможно открыть файл С, err =2" после этого создает в той же папке файл c именем "and" без расширения. ![]() Хотя проблема, наверное, на моей стороне - прошлая версия теперь тоже с эксепшеном вылетает. Хотя сам ptop работает на ура... Но с кодировкой прошлая версия работала стабильнее. Сообщение отредактировано: Jabbson - 18.07.2010 11:42 |
volvo |
![]()
Сообщение
#17
|
Гость ![]() |
Цитата а не, не легко, русский язык не воспринимает, а при попытке форматирования выдает ошибку "Невозможно открыть файл С, err =2" Долго думал, почему такое происходит. Потом сообразил, что имеется в виду файл с кириллическим именем. Да, в этом случае будут сбои, естественно. Ибо утилита ptop - консольная, следовательно, OEM-кодировка, а моя программа - Юникодная... Конвертировать кодировки из одной в другую, да еще и UTF <-> OEM, да еще и не имея возможности это проверить (у меня, понимаешь ли, не русскоязычная Windows, если что. На русскоязычном софте свет клином не сошелся, есть и другие страны в мире) я не буду, муторно это, да и не надо никому. Посему программа из обращения изымается. Пользуйтесь консольной версией дальше, если лень просто напросто перевести имя файла в латиницу. Цитата с кодировкой прошлая версия работала стабильнее. Неправда. Не могла она работать стабильнее по определению. Это был UNICODE-проект "от рождения", с кодировками в имени файла он работал всегда одинаково. Только латиница.Сообщение отредактировано: volvo - 7.09.2010 14:59 |
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
Продолжаем.
Итак, просьба потестировать программку: Графическая оболочка для PtoP Особо не вычищал ее, могут быть кое-где глючки, вот, собственно, для того, чтоб их убрать и была создана тема. |
Федосеев Павел |
![]()
Сообщение
#19
|
Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 298 Пол: Мужской Реальное имя: Федосеев Павел Репутация: ![]() ![]() ![]() |
Недавно, отвечая на вопрос, попытался отформатировать код топикстартера к удобоваримому виду при помощи ptop из FPC 2.6.0 с настройками по-умолчанию. Результат немного огорчил.
Что было ...................
If a=0 then
Begin
If b=0 then
If c=0 then
Writeln('-1')
else
Writeln('0')
Else
Begin
x:=c/b;
...................
Что стало ...................
If a=0 Then
Begin
If b=0 Then
If c=0 Then
Writeln('-1')
Else <---------- что это?
Writeln('0')
Else
Begin
x := c/b;
...................
Тогда я вспомнил о другом форматтере - JCF (JEDI Code Format). "Из коробки" он поступает с ненастроенным форматированием - нужно настроить самостоятельно. Но если поискать в интернете, то можно узнать, что архив с исходниками JCF в папке "Jcf_243_source.zip\Test\TestCases\" содержит три файла с "готовыми" настройками. Один из них "JCFTestSettings.cfg" - настроен согласно рекомендациям от Borland. Его нужно скопировать в папку с распакованным JCF и переименовать в "JCFSettings.cfg". Работать с JCF достаточно удобно - есть GUI, есть консольный вариант, а также имеется GUI утилита "JCFNotepad.exe", в закладках которой можно просматривать как изменяется форматирование при изменении настроек. Вот результат ...................
if a = 0 then
begin
if b = 0 then
if c = 0 then
Writeln('-1')
else
Writeln('0')
else
begin
x := c / b;
...................
Ссылка на официальный сайт JEDI Code Format. На этой страничке есть ссылка к рекомендациям по оформлению кода от Borland. |
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 7:12 |