угумс.. не хорошо ..
а у нас собирались его в учебный процесс вводить.. с сентября.
а какие еще глюки кроме кодировки?
Модератор: Модераторы разделов
Сейчас все уже в IDE лазарус
Код: Выделить всё
fpc file.pas && ./file
begin2009 писал(а): ↑23.08.2009 17:40Я, в образовании давно не работаю, но лазарус не такой уже и монстр. С кодировками в нем проблем нет. Он поддерживает и консольные программы. А разве оконные программы Вы с учениками не будете делать? Тогда все равно надо будет лазарус. Т.е. вся разница в том когда Вы не нем станете писать: с самого начала или ближе к концу. Я понимаю, что для очень древних машин лазарус просто не завести или работать будет с тормозами. Но вроде бы основной парк машин в школах 3 пни, данные еще по какой-то программе. Или я ошибаюсь? На 3 пентиумах все будет вполне пристойно.
Код: Выделить всё
program wh;
uses crt;
function convert(s:string): string;
var i:integer;
s1: string;
begin
s1:='';
for i:=1 to length(s) do
begin
case s[i] of
#128 : s1:=s1+#208#130;
#129 : s1:=s1+#208#131;
#130 : s1:=s1+#226#128#154;
#131 : s1:=s1+#209#147;
#132 : s1:=s1+#226#128#158;
#133 : s1:=s1+#226#128#166;
#134 : s1:=s1+#226#128#160;
#135 : s1:=s1+#226#128#161;
#136 : s1:=s1+#226#130#172;
#137 : s1:=s1+#226#128#176;
#138 : s1:=s1+#208#137;
#139 : s1:=s1+#226#128#185;
#140 : s1:=s1+#208#138;
#141 : s1:=s1+#208#140;
#142 : s1:=s1+#208#139;
#143 : s1:=s1+#208#143;
#144 : s1:=s1+#209#146;
#145 : s1:=s1+#226#128#152;
#146 : s1:=s1+#226#128#153;
#147 : s1:=s1+#226#128#156;
#148 : s1:=s1+#226#128#157;
#149 : s1:=s1+#226#128#162;
#150 : s1:=s1+#226#128#147;
#151 : s1:=s1+#226#128#148;
#152 : s1:=s1+'';
#153 : s1:=s1+#226#132#162;
#154 : s1:=s1+#209#153;
#155 : s1:=s1+#226#128#186;
#156 : s1:=s1+#209#154;
#157 : s1:=s1+#209#156;
#158 : s1:=s1+#209#155;
#159 : s1:=s1+#209#159;
#160 : s1:=s1+#194#160;
#161 : s1:=s1+#208#142;
#162 : s1:=s1+#209#158;
#163 : s1:=s1+#208#136;
#164 : s1:=s1+#194#164;
#165 : s1:=s1+#210#144;
#166 : s1:=s1+#194#166;
#167 : s1:=s1+#194#167;
#168 : s1:=s1+#208#129;
#169,#171..#174,#176,#177,#181..#183,#187 : s1:=s1+#194+s[i];
#170 : s1:=s1+#208#132;
#175 : s1:=s1+#208#135;
#178 : s1:=s1+#208#134;
#179 : s1:=s1+#209#150;
#180 : s1:=s1+#210#145;
#184 : s1:=s1+#209#145;
#185 : s1:=s1+#226#132#150;
#186 : s1:=s1+#209#148;
#188 : s1:=s1+#209#152;
#189 : s1:=s1+#208#133;
#190 : s1:=s1+#209#149;
#191 : s1:=s1+#209#151;
#192..#239 : s1:=s1+#208+chr(ord(s[i])-48);
#240..#255 : s1:=s1+#209+chr(ord(s[i])-112);
else s1:=s1+s[i];
end;
end;
convert:=s1;
end;
begin
writeln(convert('Привет, Мир!'));
end.
Код: Выделить всё
{$MODE TP}
program Hi;
uses
CRT;
begin
WriteLn('Привет, Мир!');
end.
Код: Выделить всё
{$MODE TP}
program utf8_char_hello;
uses CRT;
var
my_string, substr : UTF8String;
i : byte;
begin
my_string := 'Привет, Мир!';
WriteLn(my_string);
Writeln('Длинна строки = ', Length(my_string));
i := Pos('Мир', my_string);
Writeln('Позиция подстроки "Мир" = ', i);
Writeln('Введите подстроку');
Readln(substr);
substr := substr + ' ';
Writeln('Вставляем подстроку "',substr, '" и пробел');
Insert(substr, my_string, i);
WriteLn(my_string);
end.
./utf8_char_hello.pas (END)
ali@ubuntu:~$ ./utf8_char_hello
Привет, Мир!
Длинна строки = 21
Позиция подстроки "Мир" = 15
Введите подстроку
новый UTF8
Вставляем подстроку "новый UTF8 " и пробел
Привет, новый UTF8 Мир!
Код: Выделить всё
program in_literal;
uses crt;
var l,l1:UTF8string;
i,s: integer;
begin
l:='Мама мыла раму';
l1:='ы';
s:=0;
for i:=1 to length(l) do
begin
if (l[i]=l1[2]) and (l[i-1]=l1[1]) then s:=s+1;
end;
writeln;
writeln('Количество букв "ы" равно=',s);
end.
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
i:=length(Utf8ToCP1251(Edit1.Text));
Edit2.Text:=IntToStr(i);
end;
Но есть другая. Посмотрите в пример Ali1, что там с размером строки и номером вхождения подстроки? Правильно - не то (юникод же). А вот это без сильных телодвижений не исправить.
Ali1 писал(а): ↑25.08.2009 15:42begin2009
Интересно. А если только линковать с lazarus`ом. Можно в fpc.cfg добавить опцию -Fu, которая указывает компилятору, где искать модули. Возможно и -Fi .
Но есть другая. Посмотрите в пример Ali1, что там с размером строки и номером вхождения подстроки? Правильно - не то (юникод же). А вот это без сильных телодвижений не исправить.
Так это и есть основная проблема. Можно пользоваться строковыми функциями, можно мудрить с преобразованиями. Можно подменить простой процедурный паскаль, объект-паскалем ....
Но, я почти уверен, проблемы будут вылезать в самых неожиданных местах. Т.е. гарантировать работу примера из книжки по TP6 нельзя.
Неужели у Вас такие старые машины, что не тянут лазарус даже i386.
begin2009 писал(а): ↑25.08.2009 18:22Документации действительно не очень. То что идет вместе с лазарусом на английском. Но это пол беды. Самое главное, что в этих документах еще надо знать в каком модуле искать что-то. Т.е. это не каждому по плечу.
Но все-таки, если в лазарусе ввод и вывод юникодом, а внутри преобразовать в другую кодировку, и обрабатывать ее, то проблем по-моему не будет. Все проблемы из-за юникода. Сам лазарус вполне зрелая вещь (если не из школьного альта а последний с сайта разработчиков). Я на нем уже небольшую базу под линукс написал которой в организации пользуемся. То есть, коллеги, если Вы будете применять лазарус проблема будет одна - нехватка часов. А у среды проблем уже не очень.
PS лазарус еще и кроссплатформенный. У меня еще стоит и версия под виндовс.
yaleks писал(а): ↑25.08.2009 19:00
до них надо донести, что кроме Unicode и UTF8 ничего использовать нельзя, что 8 битные кодировки ушли в прошлое и не вернутся.
Это не только для fpc важно, но и при web-разработках ("а почему linux выводит закорючки, вместо сделанного дома сайта?"), и прочих вещах.