Фильтрация строк

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Vadim писал(а):VirtUX
С UTF8 надо вот енту штукенцию - function UTF8UpperCase(const s: String): String; из lclprocs.pas.

В данной функции сделано так как я и говорил :wink:

Код: Выделить всё

function UTF8UpperCase(const s: String): String;
begin
  Result := UTF8Encode(WideUpperCase(UTF8Decode(s)));
end;
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Mr.Smart
Да вроде как-то буковок меньше писать... :)
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Что с этим делать?

Код: Выделить всё

/usr/lib/lazarus/lcl/fileutil.pas(237,2) Fatal: Can't open include file "fileutil.inc"
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

VirtUX
Надо найти, почему именно "Can't open". Может быть именно на этот файл у Вас права отсутствуют.
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Vadim писал(а):VirtUX
Надо найти, почему именно "Can't open". Может быть именно на этот файл у Вас права отсутствуют.

Если добавить модуль Lclproc в стандартном Lazarus-проекте, то ошибка не возникает. А если в консольное, то почему-то модуль FileUtil ругается про не возможность открыть вложенность :(

Код: Выделить всё

-rw-r--r-- 1 root root  54168 Апр 30 17:04 fileutil.inc
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

VirtUX
Дело в том, что fileutil.inc находится в каталоге исходников Lazarus'а, а не в каталоге исходников FPC. Если компилировать из командной строки, то FPC его просто не находит. Выход из этого положения коварный, но действенный - положить файлы fileutil.pas и fileutil.inc (и что там ещё к этому понадобится :) ) в каталог с проектом. А можно в fpc.cfg добавить в опцию -Fu, которая указывает компилятору, где искать модули, каталог, где лежит fileutil.pas. Можно, на всякий случай, -Fi добавить, т.е. указать, где лежат включаемые файлы.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Добавь в прект путь

Код: Выделить всё

/usr/lib/lazarus/lcl/include
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Не стал я добавлять все эти пути. Вместо UTF8UpperCase использовал UTF8Encode(WideUpperCase(UTF8Decode(s))); В результате во время выполнения програмы появилось такое вот сообщение

Код: Выделить всё

This binary has no widestrings support compiled in.
Recompile the application with a widestrings-manager in the program uses clause.
exception at 08054893:
Widestring manager not available. Recompile program with appropiate manager.

Что это значит? Какой такой менеджер нужно использовать и как?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Я всегда думал, что ВайдМанагер всегда есть поумолчанию :shock:
Подсказать как его подключить (именно стандартный) немогу :( Могу только подсказать как написать свой собственный :oops:

Добавлено спустя 4 минуты 44 секунды:
В модуле LCLProc есть функция UnicodeLowercase (она неиспользует WideManager), которая использует свою внутреннию таблицу для изменения регистров символов юникода. Для использования данной функции необходимо подключить её {$define NewLowerCase} :wink:
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
Сообщения: 1409
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Sergei I. Gorelkin »

По умолчанию widestringmanager есть только в Windows. В Linux нужно добавить в секцию uses модуль cwstring.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Sergei I. Gorelkin писал(а):По умолчанию widestringmanager есть только в Windows. В Linux нужно добавить в секцию uses модуль cwstring.

Кстати да. Я когда то что то подобное читал (в исходниках) :oops:
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Огроменное спасибо! Подключение модуля cwstring помог.
aleksander
незнакомец
Сообщения: 3
Зарегистрирован: 22.10.2009 19:44:12

Сообщение aleksander »

Между всеми устранить все знаки препинания и оставить по одному пробелу. Определить среднюю длину слова. Вывести на экран слова, длина которых равна средней длине.

Код: Выделить всё

Program z1;
uses crt;
const Alpha=['A'..'Z','a'..'z','0'..'9'];
SPACE=' ';
var s,tmp:string;
i,ctr:integer;
sredn_stroka:byte;
Begin
clrscr;
writeln('Enter string...');
readln(s);
for i:=1 to byte(s[0]) do if NOT(s[i]in Alpha)then s[i]:=SPACE;
s:=SPACE+s+SPACE;
repeat
i:=POS(SPACE+SPACE,s);
if i>0 then delete(s,i,length(SPACE))
else break;
until FALSE;
delete(s,1,length(SPACE));
delete(s,byte(s[0])-length(SPACE)+1,length(SPACE));
writeln('Novaja stroka:');
writeln(s);
tmp:=s;
ctr:=1;
repeat
i:=POS(SPACE,tmp);
if i>0 then
begin
delete(tmp,i,length(SPACE));
INC(ctr);
end;
until i=0;
sredn_stroka:=ROUND(byte(tmp[0])/ctr);
writeln('Srednja dlina stroki = ',sredn_stroka);
tmp:=SPACE;


????????? А КАК ДАЛЬШЕ ?????????



readln;
End.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

aleksander писал(а):Между всеми устранить все знаки препинания и...

А не то, что ...? Все получат по ушам? :)
aleksander
незнакомец
Сообщения: 3
Зарегистрирован: 22.10.2009 19:44:12

Сообщение aleksander »

люди, подскажите пожалуйста как слово записать строку в масив по словам...??? :?
Ответить