Работа со строками

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

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

Сообщение bw » 01.12.2005 11:47:15

Собственно интересует инструмент (функции, процедуры) для работы с регулярными выражениями. Никогда раньше необходимости не возникало, а вот теперь надо. Да и вообще какие "продвинутые" инструменты/библиотеки для работы со строками существуют (кроме стандарного набора rtl). Поиск, замена конвертирование в разные типы, форматирование, разбиение и пр. Кто работал с Python'ом, думаю, могут меня понять почему под Pascal'ем мне так некомфортно работать со строковыми типами :-).

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение noch » 05.12.2005 15:02:58

почему некомфортно?

А смотрел unit strutils, там есть почти все что нужно для работы со строками
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение SergKam » 05.12.2005 23:10:18

да и регулярные выражения входят в поставку fpc
смотри fpcsrc/packages/base/regexpr

заодно вопросик. как лучше считать файл в анси строку? и соответственно записать потом в другой?
Кажется гдето когдато видел в fpc но где и как называется функция не помню
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение Janus » 06.12.2005 13:52:52

Потоками лучше. Или юзать API - считать в PChar и конвертнуть в string.
Janus
постоялец
 
Сообщения: 134
Зарегистрирован: 07.11.2005 17:06:49

Сообщение bw » 07.12.2005 06:01:16

Пример неудобства.
Есть у меня строка - '/home/bw/projects'.
Как на fp получить из неё - 'projects'?
На Python'е это делается так - s.rsplit('/',1)[1]. Все. s, это исходная строка.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение me » 07.12.2005 18:00:07

s:='/home/bw/projects';
for i:=1 to length(s) do
begin
if s[i]='/' then j:=i;
end;
s1:=copy(s,j+1,length(s)-j);
me
 

Сообщение bw » 07.12.2005 18:11:20

Я могу предложить вариант попроще:
Код: Выделить всё
i:=Cardinal(StrRScan(PChar(s),'/')-PChar(s));
Delete(s,i+1,Length(s)-i);

Но это все равно не радует.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Guest » 07.12.2005 18:16:04

Почему просто и понятно, не намного сложнее, чем на Python'е
Guest
 

Сообщение Alexander » 07.12.2005 18:47:48

Сам сильно не пробовал, но люди для сторок используют язык Icon,
последователь Снобола.
Alexander
 

Сообщение noch » 08.12.2005 19:34:23

uses strutils;

function getafter( ch : char; s : ansistring) : string;
var i : integer;
begin
i := rpos (ch, s);
getafter := rightstr (s, length(s)-i);

end;


...

s1 := getafter('/',s); вернет все после последнего слеша, и ничуть не труднее чем в питоне :)

разве не просто?

нету такой функции в стандартных бибилиотеках - добавили :)
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение SergKam » 09.12.2005 22:59:47

Извращенцы.
Почему не использовать стандартный ExtractFileName?
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение noch » 11.12.2005 02:33:37

SergKam писал(а): Извращенцы.
Почему не использовать стандартный ExtractFileName?


Да, действительно :)

Просто я и не задумался об этом, хотелось показать что реализовать аналогичную питоновскую функцию не сложно :)
Аватара пользователя
noch
постоялец
 
Сообщения: 145
Зарегистрирован: 07.06.2005 09:45:49
Откуда: Armenia

Сообщение bw » 11.12.2005 12:03:19

Далеко ходить не буду - home:bw:projects.
И как мне теперь исползовать ExtractFileName?

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение SergKam » 13.12.2005 06:52:15

[bw] писал(а): Далеко ходить не буду - home:bw:projects.
И как мне теперь исползовать ExtractFileName?

..bw

Не передергивайте.
Есть функция для поиска в папках указаных в такой форме
(как я понял это чтото типа PATH. сейчас не помню в исходниках
лазаря видел Search... или Find...)/


ЗЫ на эту тему анегдот.
Женщина заезжает в автомастерскую.
- сделайте мне сигнал погромче
- зачем?
- а у меня тормоза не работают
SergKam
постоялец
 
Сообщения: 251
Зарегистрирован: 16.11.2005 21:31:11
Откуда: Украина,Харьков

Сообщение mif » 14.12.2005 10:13:03

из мухи слона раздули :D
mif
новенький
 
Сообщения: 71
Зарегистрирован: 14.12.2005 10:09:27

След.

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

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

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

Рейтинг@Mail.ru