-
14.07.2009, 14:43 #181
- Регистрация
- 19.10.2006
- Адрес
- Омск
- Возраст
- 63
- Сообщений
- 7,432
- Поблагодарили
- 6598
- Поблагодарил
- 6642
-
14.07.2009, 16:34 #182
- Регистрация
- 12.12.2006
- Адрес
- Ростов-на-Дону
- Возраст
- 56
- Сообщений
- 354
- Поблагодарили
- 44
- Поблагодарил
- 46
Про базу данных я с Вами согласен. При таких объемах она не нужна. Но так удобно писать RA6XTD. Ему это не напряг. Все это уже встроено в среду разработки. А это единственный человек на этой ветке, который пишет реальную программу, а все остальные ее тестируют. Напишите Вы реальный код и выложите его здесь, а мы его попробуем. Только пожалуйста не требуйте скачать 17 метров дистрибутива Perla, и инсталить ее на своем компе. Программа должна быть в виде исполняемого кода и не требовать установки дополнительных библиотек.
Про скрипт я тоже согласен. Давайте предложим хозяевам сайта этот вариант. А лучше предложить уже готовый скрипт, останется только подключить А качать можно будет или по FTP или также по HTTP.
По поводу сравнения не понимаю. Вы пробовали? Я уже озвучил свои эксперименты. Если запрос делать раз в секунду, то сайт не затыкается. Если Вы можете чаще, - программу в студию.
И кстати Вы писали, что выложили результаты. Не понял, где смотреть?
-
14.07.2009, 18:04 #183
- Регистрация
- 25.08.2006
- Адрес
- Шадринск, Курганская обл., Россия
- Возраст
- 36
- Сообщений
- 1,866
- Поблагодарили
- 175
- Поблагодарил
- 278
ну кроме эктив стейта есть более удобный теперь дистрибутив под винду Strawberry Perl.
Кроме того есть несколько вариантов упаковки скрипта и интерператтора в один исполняемый файл, типа perl2exe, есть продукт от эктив стейт, есть уже в дереве perl PAR нахзывается.
В итоге для голой программы примерно полтора мегабайта экзешник + если будете подключать библиотеки.
Про эксперимент я предлагал сранвить производительность Си и PerlДля человека с молотком любая проблема кажется гвоздем.
Слава богу, теперь уже БЫВШИЙ член СРР, 73!
-
14.07.2009, 18:26 #184
- Регистрация
- 18.09.2007
- Адрес
- Нальчик, Кабардино-Балкария
- Возраст
- 43
- Сообщений
- 1,223
- Поблагодарили
- 209
- Поблагодарил
- 112
Она нужна при любых объемах.
Не видел ни одного лога с текстовыми базами данных.
Поиск считанного в память файла и по базе с индексами медленнее в разы.
Даже этот пример это показал.
Вот и продемонстрируйте, пожалуйста, готовый продукт вида "скачал-запустил" для сравнения. Скорости в том числе.
Я не говорю, что нельзя сделать лучше, быстрее. Можно. Просто сделать и говорить, что можно сделать - это не одно и тоже. И выказывание недоумения, в частности, по поводу использования базы данных, рассказы про возможности перла, регулярных выражений и т.п. при отсутствии более быстрого, удобного и т.д. варианта ничего кроме улыбки не вызывает.
-
14.07.2009, 18:36 #185
- Регистрация
- 25.08.2006
- Адрес
- Шадринск, Курганская обл., Россия
- Возраст
- 36
- Сообщений
- 1,866
- Поблагодарили
- 175
- Поблагодарил
- 278
RA6XTD
Посмотрите на xlog
Продукт, ну чтоже, сейчас сделаем после ужинаДля человека с молотком любая проблема кажется гвоздем.
Слава богу, теперь уже БЫВШИЙ член СРР, 73!
-
14.07.2009, 19:15 #186
- Регистрация
- 12.12.2006
- Адрес
- Ростов-на-Дону
- Возраст
- 56
- Сообщений
- 354
- Поблагодарили
- 44
- Поблагодарил
- 46
Не знаю, у меня летает. Даже без оптимизации. Узнаю размер файла. Резервирую размер памяти. Качаю туда файл целиком. Сишные функции со по работе со строками просто летают. Только нельзя промежуточные результаты выводить в разные окна. Тормозит жутко. Надо выводить сразу результат.
Очень справедливо. Давно ждем.
Не в бровь, а в глаз.
А вот это уже интересно.
Добавлено через 8 минут
Не может грамотно составленный код на Си проиграть какому либо другому коду.
Другое дело что не все могут грамотно составлять. И ошибаются часто. Поэтому и изобретаются различные языки, что бы кодер не путался и мог собрать все свои мысли и не растерять их. Для больших трудоемких процессов это большой выигрыш. Поскольку трудно держать весь проект в голове. Но для данной задачи, она не такая сложная, Си нету конкурента.Последний раз редактировалось RN6LIQ; 14.07.2009 в 19:23. Причина: Добавлено сообщение
-
14.07.2009, 21:26 #187
- Регистрация
- 03.02.2006
- Возраст
- 51
- Сообщений
- 17,256
- Поблагодарили
- 8060
- Поблагодарил
- 4231
К сожалению нынешней молодежи, начинающей программировать, это очень сложно объяснить...
Мы не хотим смотреть никакой xlog. Мы хотим увидеть Вашу программу. Одним испольняемым файлом. Без необходимости установки 250 мег Dot Net и т.п.
С удовольствием сравним ее с программой RA6XDT.
Добавлено через 1 минуту
Сейчас получил ответ от Романа RX3RC - обещал выкладывать у себя на сайте базу в текстовом формате. Собственно вот и решение проблемы!Последний раз редактировалось RX4HX; 14.07.2009 в 21:27. Причина: Добавлено сообщение
73 de RX4HX, Alexei, http://rx4hx.qrz.ru
Ant.: UW4HW, Pwr.: ~500 Wtts
-
14.07.2009, 22:24 #188
-
14.07.2009, 22:37 #189
- Регистрация
- 25.08.2006
- Адрес
- Шадринск, Курганская обл., Россия
- Возраст
- 36
- Сообщений
- 1,866
- Поблагодарили
- 175
- Поблагодарил
- 278
Прошу прощенья за задержку, были гости.
В общем накидал по быстрому
кидаем в папку in файлы, забираем из папки out
Попросим RX9TX и у кого linux стоит на борту протестировать, а я сейчас со стола уберу и поищу чем запаковать для windows.Для человека с молотком любая проблема кажется гвоздем.
Слава богу, теперь уже БЫВШИЙ член СРР, 73!
-
14.07.2009, 22:39 #190
- Регистрация
- 25.08.2006
- Адрес
- Шадринск, Курганская обл., Россия
- Возраст
- 36
- Сообщений
- 1,866
- Поблагодарили
- 175
- Поблагодарил
- 278
Вот весь исходник по объему.
sub convert ()
{
$time=localtime();
print "start convert $file \n started in $time \n";
open(ADIFFILE, "< ./in/$file") or die "can't open adif-file";
open(NEWADIFFILE, "> ./out/$file") or die "can't create adif-file";
while($line=<ADIFFILE>)
{
if($line=~m/\<CALL\:/)
{
$b=$`;
$ser=$&;
$after=$';
$num=substr $',0,2;
$num1=substr $num,1,1;
if($num1 eq "\>"){$num=substr $num, 0,1;$call=substr $',2,$num;}
else{$call=substr $',3,$num;};
$rda="";
foreach $i (@table)
{
if($i=~m/\"$call\"/){$rda=substr $',2,5;};
};
$qt=substr $rda,0,2;
#print $call," ",$rda,"\n";
if(!($rda eq ""))
{
$string=join "",$b,$ser,$num,">",$call," ","<STATE:2>$qt <CNTY:5>$rda ",$after;
$line=$string;
}
#print NEWADIFFILE $line;
}
print NEWADIFFILE $line;
};
close ADIFFILE;
close NEWADIFFILE;
$time=localtime();
print "stop convert $file \n stoped in $time \n";
};
open(CSVFILE, "< ./table/rda.csv") or die "can't open csv-file";
@table=<CSVFILE>;
close CSVFILE;
opendir(INDIR, "./in/") or die "can't open ./in directory";
while ($file = readdir(INDIR))
{
if ($file=~m/.+\.adi/){&convert;};
};
closedir INDIR;Для человека с молотком любая проблема кажется гвоздем.
Слава богу, теперь уже БЫВШИЙ член СРР, 73!
-
14.07.2009, 22:50 #191
- Регистрация
- 03.02.2006
- Возраст
- 51
- Сообщений
- 17,256
- Поблагодарили
- 8060
- Поблагодарил
- 4231
73 de RX4HX, Alexei, http://rx4hx.qrz.ru
Ant.: UW4HW, Pwr.: ~500 Wtts
-
14.07.2009, 23:24 #192
- Регистрация
- 07.02.2007
- Сообщений
- 1,200
- Поблагодарили
- 440
- Поблагодарил
- 33
-
15.07.2009, 00:07 #193
- Регистрация
- 25.08.2006
- Адрес
- Шадринск, Курганская обл., Россия
- Возраст
- 36
- Сообщений
- 1,866
- Поблагодарили
- 175
- Поблагодарил
- 278
Тьфу ты, с екзешником провозился в первый раз больше чем с исходником ))
В общем протестите, должно работать.
по вопросам Да, нет базы у меня и ничего не индексируется, да этот вариант медленнее, но скорость работы достаточна.
Нет проверки вижу, щас подправлю.
по третьему немного не понял, если не находится данных о RDA оно вообще никуда не пишется ничего.
В общем PAR умеет только для своей платформы собирать, винды нету у меня, поэтому собрано при помощи perl2exe/
Протестируйте pls работает или нет.Для человека с молотком любая проблема кажется гвоздем.
Слава богу, теперь уже БЫВШИЙ член СРР, 73!
-
15.07.2009, 11:34 #194
- Регистрация
- 25.08.2006
- Адрес
- Шадринск, Курганская обл., Россия
- Возраст
- 36
- Сообщений
- 1,866
- Поблагодарили
- 175
- Поблагодарил
- 278
Прошу прощенья, в той программе косячек, не вычистил в одном месте
Вот исправленный вариант.
Заодно и немного оптимизированный.
Основная потеря времени - на просмотре таблицы регулярными выражениями, которые еще и пересобирались, поскольку в них переменные стояли. Теперь используется хешь массив, отличие которого от обычного массива в том, что данным присвоены не порядковые номера, а собственные имена. Такой тип данных и в паскале кстати есть насколько помню.
Теперь работает на несколько десятичных порядков быстрее, уже можно сравнивать скорости.
И господа, отпишитесь уже, работает сборка под винду или нет.
Меньше сотни строк вся программа.
В архиве и сборка под винду и сам .pl файл под никсы и для тех у кого установлен perl
#!/usr/bin/perl -w
#copyright Sergeyev Roman, RN9RQ ex RA9QCE, 2009
#licence: GPL v3 or later, see more on gnu.org
# Скрипт вписывает данные в adif формат о регионе и RDA районе.
# Кидаем в папку IN файл с названием adif.adi запускаем скрипт и забираем готовый файл из папки OUT
# в папке table лежит набор данных с сайта http://rdaward.org/ в формате csv
sub convert ()
{
$time=localtime();
print "start convert $file \n started in $time \n";
open(ADIFFILE, "< ./in/$file") or die "can't open adif-file";
open(NEWADIFFILE, "> ./out/$file") or die "can't create adif-file";
while($line=<ADIFFILE>)
{
if($line=~m/\<CALL\:/o)
{
$b=$`;
$ser=$&;
$after=$';
$num=substr $',0,2;
$num1=substr $num,1,1;
if($num1 eq "\>"){$num=substr $num, 0,1;$call=substr $',2,$num;}
else{$call=substr $',3,$num;};
$rda="";
if((($call=~m/^R.+/o)||($call=~m/^U[A-Ia-i].+/o))&&(!($after=~m/\<CNTY\:5/o)))
{
if(exists($hash{$call}))
{
$rda=$hash{$call};
$qt=substr $rda,0,2;
$after=~s/^$num\>$call//;
$string=join "",$b,$ser,$num,">",$call," ","<STATE:2>$qt <CNTY:5>$rda",$after;
$line=$string;
};
};
};
print NEWADIFFILE $line;
};
close ADIFFILE;
close NEWADIFFILE;
$time=localtime();
print "stop convert $file \n stoped in $time \n";
};
$time=localtime();
print "program start in $time \n";
open(CSVFILE, "< ./table/rda.csv") or die "can't open csv-file";
@table=<CSVFILE>;
close CSVFILE;
%hash = ();
foreach $i (@table)
{
$i=~s/"//g;
if($i=~m/\,/)
{
$hcall=$`;
$hrda=substr $',0,5;
$hash{$hcall} = $hrda;
};
};
opendir(INDIR, "./in/") or die "can't open ./in directory";
while ($file = readdir(INDIR))
{
if ($file=~m/.+\.adi/){&convert;};
};
closedir INDIR;Последний раз редактировалось RN9RQ; 15.07.2009 в 11:38.
Для человека с молотком любая проблема кажется гвоздем.
Слава богу, теперь уже БЫВШИЙ член СРР, 73!
-
15.07.2009, 11:51 #195
- Регистрация
- 20.04.2005
- Адрес
- Оренбург, Россия
- Возраст
- 59
- Сообщений
- 3,390
- Поблагодарили
- 614
- Поблагодарил
- 119
На выходе файла нет.
n2wz@n2wz-laptop:~/temp/adif-rda$ ./start.pl
program start in Wed Jul 15 13:47:57 200973 ... R8TX :: Skype: rx9tx_ :: http://r8tx.qrz.ru
Социальные закладки