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

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

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

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

Сообщение Mr.Smart » 06.07.2009 10:39:59

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;
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Vadim » 06.07.2009 11:19:31

Mr.Smart
Да вроде как-то буковок меньше писать... :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение VirtUX » 07.07.2009 17:11:08

Что с этим делать?
Код: Выделить всё
/usr/lib/lazarus/lcl/fileutil.pas(237,2) Fatal: Can't open include file "fileutil.inc"
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Vadim » 07.07.2009 17:15:15

VirtUX
Надо найти, почему именно "Can't open". Может быть именно на этот файл у Вас права отсутствуют.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение VirtUX » 07.07.2009 17:27:43

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

Если добавить модуль Lclproc в стандартном Lazarus-проекте, то ошибка не возникает. А если в консольное, то почему-то модуль FileUtil ругается про не возможность открыть вложенность :(
Код: Выделить всё
-rw-r--r-- 1 root root  54168 Апр 30 17:04 fileutil.inc
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Vadim » 07.07.2009 17:47:08

VirtUX
Дело в том, что fileutil.inc находится в каталоге исходников Lazarus'а, а не в каталоге исходников FPC. Если компилировать из командной строки, то FPC его просто не находит. Выход из этого положения коварный, но действенный - положить файлы fileutil.pas и fileutil.inc (и что там ещё к этому понадобится :) ) в каталог с проектом. А можно в fpc.cfg добавить в опцию -Fu, которая указывает компилятору, где искать модули, каталог, где лежит fileutil.pas. Можно, на всякий случай, -Fi добавить, т.е. указать, где лежат включаемые файлы.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Mr.Smart » 07.07.2009 17:55:14

Добавь в прект путь
Код: Выделить всё
/usr/lib/lazarus/lcl/include
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение VirtUX » 07.07.2009 21:32:18

Не стал я добавлять все эти пути. Вместо 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.

Что это значит? Какой такой менеджер нужно использовать и как?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Mr.Smart » 08.07.2009 00:13:56

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

Добавлено спустя 4 минуты 44 секунды:
В модуле LCLProc есть функция UnicodeLowercase (она неиспользует WideManager), которая использует свою внутреннию таблицу для изменения регистров символов юникода. Для использования данной функции необходимо подключить её {$define NewLowerCase} :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Sergei I. Gorelkin » 08.07.2009 00:28:40

По умолчанию widestringmanager есть только в Windows. В Linux нужно добавить в секцию uses модуль cwstring.
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1407
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

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

Сообщение Mr.Smart » 08.07.2009 00:31:46

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

Кстати да. Я когда то что то подобное читал (в исходниках) :oops:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение VirtUX » 08.07.2009 01:36:52

Огроменное спасибо! Подключение модуля cwstring помог.
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение aleksander » 22.10.2009 20:22:26

Между всеми устранить все знаки препинания и оставить по одному пробелу. Определить среднюю длину слова. Вывести на экран слова, длина которых равна средней длине.
Код: Выделить всё
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.
aleksander
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.10.2009 19:44:12

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

Сообщение Vadim » 23.10.2009 14:19:50

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

А не то, что ...? Все получат по ушам? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение aleksander » 23.10.2009 22:50:07

люди, подскажите пожалуйста как слово записать строку в масив по словам...??? :?
aleksander
незнакомец
 
Сообщения: 3
Зарегистрирован: 22.10.2009 19:44:12

Пред.След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

Рейтинг@Mail.ru