NTFS писал(а):3) GetSplitPart1 - первая часть строки, по заданному разделителю
4) GetSplitPart2 - вторая часть строки, по заданному разделителю
Функция ExtractDelimited из модуля StrUtils
Модератор: Модераторы
NTFS писал(а):3) GetSplitPart1 - первая часть строки, по заданному разделителю
4) GetSplitPart2 - вторая часть строки, по заданному разделителю
Если не использовать новые фичи, то у программ на паскале совместимость хорошая. С питоном же приключаются нехорошие вещи. Установил из репозитория на гентообразный линукс питоновый yum. Сразу полезли ошибки с неправильными типами переменных, как-то их заткнул, стало возможно искать через yum rpm в репозиториях, но ставить их всё равно было нельзя - дальше не патчено Если бы каждая программа на питоне имела свой собственный интерпретатор, написанный на паскале, то всё было бы намного проще.bw писал(а):> на интерпретаторе не той версии
Такие же как и на компиляторе любого другого языка. Обратная совместимость в мажорной версии имеется (написанное на 2.3 будет работать на 2.7, наоборот -- нет .
bw писал(а):> не сильно короче Паскаль-варианта
А ты выкини из варианта в Pascal эти магическии функции и используй только батарейки . Ну ладно, включи описание этих функций в свой пример.
Код на Python всё же более разряженным получился, может быть даже читабельнее, ну это кому как. Ведь всегда можно убрать пустые строки и вообще собирать всё в одну, только зачем. Странное желание сократить объём. Да и пример пожалуй не столь показателен в этом плане.
лично я не владею...bw писал(а):> пример на Python тоже излишне сложен
Ну так покажите пример на Perl, Bash, Tcl и т.д. Тут Perl очень часто упоминается, но кроме слов больше ничего, видимо не так просто реализовать алгоритм на нём? Мне самому любопытно взглянуть.
Совершенно не критикую, сокращение количества строк не самоцель, я както на досуге пытался сформулировать требования к самопальному языку решения такой задачи, но дальше прототипа не дошло, вчера чето сходу не нашел исходники (чтоб вспомнить), хотел примеры в первом своем посте привести, дома надо посмотреть.bw писал(а):Пример на Python имеет меньше букв, более разряжен, по моему это делает чтение проще. А вообще я в суть кода не вникал, попросту переписал на др. языке, а если понять что там делается и посмотреть на входные данные, то и результат мог бы получиться более другим. И всё же я считаю что пример не так уж показателен и не может быть заметно упрощён ни на одном языке. Сократить число строк можно и на Python, но это отрицательно скажется на читаемости.
Вполне логично, коммандная строка в униксе разработана не для простоты понимания и изучения, один линуксовый аналог переименования группы файлов по маске чего стоит. Постоянно нужно лезть в шпоргалку чтобы подглядеть синтаксис а досовский помню до сих пор, хоть и нет повода им пользоваться. Если надо проще и часто, реализуй кусочек регулярных выражений с таким синтаксисом, какой тебе удобен. Можно делать не с нуля, сойдёт и обёртка.sts писал(а): если делать на регурярках то получается не менее запутанно, пока сосчитаешь скобки пока че, короче теже проблемы. охота чтонибудь простое, пример на Python тоже излишне сложен.
#!perl -w
$CountryLine=();
if (open(CountryFile,"country")){
@CountryLine=<CountryFile>;
}
open(LinesFile,$ARGV[0])||die "file doesnt exists";
$tekcountry = '';
while (<LinesFile>){
$line=$_;
if (! $line=~/[^@]/) { next; }
@list1=split('@',$line);
$tekcountry = $list1[1];
print $tekcountry;
if (!$Countries=~/$tekcountry/) {
$Countries[$#Countries+1]=$tekcountry;
}
if($list1[10]=~/[^\s]/){
%props = ();
}
if ($list1[12]=~/[^\s]/){
$props{'Источник'} = $list1[12];
}
if($list1[3]=~/\//){
@x=split('/',$list1);
$floor=$x[0];
$floorall=$x[1];
} else
{
$floor=$list[3];
$floorall=$list[4];
}
$props{'Этаж'} = $floor;
$props{'Этажность'} = $floorall;
foreach (@Countries) { ++$i; if ($Countries[$i-1] == $_) { $tekcountryI = $i-1 }}
#Было откровенно лениво это разбирать.. тут заюзывается регексп
$x='';#StrToIntWt0(GetSplitPart1orAll(GetSplitPart1orAll(GetSplitPart1orAll(GetSplitPart1orAll(List1[5],','),'.'),'/'),'\')),
$list1[8]=~s/[^0-9]//g;
$list1[8]/=1000;
open(Out,">out_$ROOMTYPE_ID.sql'") or die "Can't open up file: $!\n";
format Out =
INSERT INTO ROOMS (ID, OPERTYPE_ID, ROOMTYPE_ID,
COUNTRY_ID, OWNER_ID, REMARK, DATEENTER, LAST_UPDATE, PRICE, S, PROPSTORE, CONTACT)
VALUES (GEN_ID(GEN_ROOMS_ID,1), 1,
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
$ROOMTYPE_ID,
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
$tekcountryI
-1,
'@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',
PrepStringForSQLFB(' '.$list1[2].$list1[13].$list1[16].$list1[17])
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
$list1[11] or 'Now'
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
$list1[11] or 'Now'
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
$list1[8]
@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<,
$x
'@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<',
PrepStringForSQLFB(%props)
'@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<'
PrepStringForSQLFB($list1[10])
);
.
write Out;
open(Out1,">country") or die "Can't open up file: $!\n";
print(Out1,@Countries);
open(Out2,">country.sql'");
$i=0;
foreach (@Countries) { print(out2,"INSERT INTO COUNTRIES(ID, CITY, COUNTRY) VALUES ($i,'city','$_');"); $++;}
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15