Аналитика http://www.geosystema.net/forum/ |
|
XML против Reports http://www.geosystema.net/forum/viewtopic.php?f=1&t=2051 |
Страница 2 из 20 |
Автор: | Dmitry_Zolotar [ 06 апр 2011 08:15 ] |
Заголовок сообщения: | Re: XML против Reports |
Никто не мешает "надругаться" над mysetup.ini, например |
Автор: | kukin [ 06 апр 2011 09:19 ] |
Заголовок сообщения: | Re: XML против Reports |
Цитата: Никто не мешает "надругаться" над mysetup.ini, например Как это ? Не понимаю выгоды. Лишенный 21го стандартного файла LEdit.exe все равно не выживет. |
Автор: | Dmitry_Zolotar [ 06 апр 2011 10:26 ] |
Заголовок сообщения: | Re: XML против Reports |
kukin писал(а): Цитата: Никто не мешает "надругаться" над mysetup.ini, например Как это ? Не понимаю выгоды. Лишенный 21го стандартного файла LEdit.exe все равно не выживет. Файлы из дистрибутива можно было оставить, а в mysetup.ini ссылаться на другие файлы kukin писал(а): В этом шаблоне практически все работает без сбоев, надо лишь решить вопрос с открытием изображения(я просто его отключил): Скрипт, подобный приведенному ниже, используется регистратором для формирования кадплана позем.книги по шаблону LBCP.dmt и сохранения его в растр под "правильным" именем. Для формирования поземельной книги из Digitals: 1. Откройте XML-файл 2. Выполните скрипт $PP=@ProgramPath $N=@Map.Count $I=0 %Loop $I=$I+1 $LID=@Map.Object[$I].LayerID @If $LID=70005 then @GoTo %Exit @If $I<$N then @GoTo %Loop @Break Не найден объект слоя XML-ділянка %Exit @Map.SelectObject $I Документы | LBCP $CPMap=@ActivateMap @Dialog.WaitBox Отредактируйте кадастровый план и нажмите кнопку "Продолжить" Файл | Сохранить $FN=@Map.ClearShortFilename @CreateFolder $PP\Pictures\ $FN=$PP\Pictures\$FN.bmp @Map.SaveToTIF 300 24 $FN @CloseMap $CPMap 3. Запустите генератор отчетов. |
Автор: | kukin [ 06 апр 2011 14:17 ] |
Заголовок сообщения: | Re: XML против Reports |
Цитата: а в mysetup.ini ссылаться на другие файлы Это понятно, притом надо все шаблоны перелапатить с setup.ini на mysetup.ini, этим самым отречься от следующих стандартных шаблонов. Сохранив жизнь LEdit, еще больше усложнив программу и её понимание. Цитата: Файлы из дистрибутива можно было оставить Можно и не использовать setup.ini, а работать на прямую с txt, и менять ничего не придется, в любом случае количество файлов-списков еще увеличится. Надо помозговать над альтернативным методом редактирования списков. За скрипт отдельное спасибо(редко ими пользуюсь). |
Автор: | kukin [ 07 апр 2011 15:56 ] |
Заголовок сообщения: | Re: XML против Reports |
Все-таки решил "похоронить" LEdit, буду править setup.ini. А для "пакетной" правки я верну родной setup.ini (на время правки списка) выполню изменения, и снова верну рабочий ИНИ файлик на место. Более разумного решения пока не вижу, разве править LEdit, но это не в моих силах, и приоритет тут не высок |
Автор: | kukin [ 07 апр 2011 23:01 ] |
Заголовок сообщения: | Re: XML против Reports |
Цитата: 1. Откройте XML-файл 2. Выполните скрипт $PP=@ProgramPath $N=@Map.Count $I=0 %Loop $I=$I+1 $LID=@Map.Object[$I].LayerID @If $LID=70005 then @GoTo %Exit @If $I<$N then @GoTo %Loop @Break Не найден объект слоя XML-ділянка %Exit @Map.SelectObject $I Документы | LBCP $CPMap=@ActivateMap @Dialog.WaitBox Отредактируйте кадастровый план и нажмите кнопку "Продолжить" Файл | Сохранить $FN=@Map.ClearShortFilename @CreateFolder $PP\Pictures\ $FN=$PP\Pictures\$FN.bmp @Map.SaveToTIF 300 24 $FN @CloseMap $CPMap 3. Запустите генератор отчетов. Выполнил все что было указано, пришлось добавить папку Documents в корень программы. Одна поправка, сначала приходится генерить шаблон LBCP через сервис документы, а уж потом нажимать кнопочку(я пока поверхностно рассматривал скрипты, по этому могут возникать глупые вопросы). Тогда нужное изображение создается и вставляется в отчет. Вывод: LBCP.dmt отличная заготовка для шаблонов дигиталса. Добавлено: Очень интересно работают скрипты, на одном компьютере генерируется с ХМЛ файла, а на другомкнопка вовсе "отвисает" «I'll think about it tomorrow» |
Автор: | kukin [ 08 апр 2011 00:57 ] |
Заголовок сообщения: | Re: XML против Reports |
Первое, что требуется в техничке, это читабельно записанный адрес земельного участка. За него в шаблоне отвечает переменная ParcelLocation (строка). За него отвечает код. if XMLMode then begin ParcelLocation:=''; if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelLocation/Urban') then begin if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress') then begin if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType') and IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName') then begin ParcelLocation:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')+' '+ XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName'); if ParcelLocation<>'' then begin if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building') then ParcelLocation:=ParcelLocation+', б.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building'); if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block') then ParcelLocation:=ParcelLocation+', корп.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block'); end; end; end; end else ParcelLocation:='за межами населенного пункта'; if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement') then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement'); if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District') then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District'); if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region') then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region'); end else begin //todo ParcelLocation:=''; //-todo end; В этоге мы имеем текст в таком виде: вулиця Головна, б.-, корп.-, м.Чоп, Закарпатська область Не совсем читабельно, придется добавить проверку на пустые строки "-" и создать сокращенную форму элемента StreetType: для начала сделаем сокращение: StreetType:=''; begin if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='вулиця' then StreetType:='вул.' else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='провулок' then StreetType:='пров.' else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='проспект' then StreetType:='просп.' else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='бульвар' then StreetType:='б-р.' else if XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType')='площа' then StreetType:='пл.' else StreetType:=XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType'); end; if XMLMode then begin ParcelLocation:=''; if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelLocation/Urban') then begin if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress') then begin if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetType') and IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName') then begin ParcelLocation:=StreetType+' '+ XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/StreetName'); if ParcelLocation<>'' then begin if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building') then ParcelLocation:=ParcelLocation+', б.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building'); if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block') then ParcelLocation:=ParcelLocation+', корп.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Block'); end; end; end; end else ParcelLocation:='за межами населенного пункта'; if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement') then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Settlement'); if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District') then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/District'); if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region') then ParcelLocation:=ParcelLocation+', '+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/Region'); end else begin //todo ParcelLocation:=''; //-todo end; вуаля: вул. Головна, б.-, корп.-, м.Чоп, Закарпатська область надеюсь я на ночь глядя ничего не натупил |
Автор: | kukin [ 08 апр 2011 13:14 ] | ||
Заголовок сообщения: | Re: XML против Reports | ||
Решил вопрос "пустых" тегов такими кодами: if IsNodeExists(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building') //Номер будинку then begin if (XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building')<>'-') and (XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building')<>'') //проверка на наличие пропуска и символа "-" then begin ParcelLocation:=ParcelLocation+' буд.'+XPath(XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/ParcelLocationInfo/ParcelAddress/Building');// добовляем Номер будинку теперь адрес полностью читабелен: вул.Головна, м.Чоп, Закарпатська область Хотел показать, что notpad++ очень здорово мне помагает в написании кодов, может кто более интересное ПО юзает?
|
Автор: | Dmitry_Zolotar [ 08 апр 2011 14:47 ] |
Заголовок сообщения: | Re: XML против Reports |
Я противник того чтоб вместо отуствующих данных вставлять "-", есть данные - создается тег, нет данных - не создается тег. Тогда отсутствие тега сразу говорит об отсутствии данных: if IsNodeExists(Path,Tag) then ..... //есть тег - значит есть данные, даже если это пустая строка else .....; //нет тега - нет данных А пустые теги создаются только там где наличие/отсутствие какого-то тега имеет какой-то смысл, например в "Відношення до населенного пункту" : <ParcelLocationInfo> .... <ParcelLocation> <Urban/> </ParcelLocation> .... </ParcelLocationInfo> |
Автор: | kukin [ 08 апр 2011 15:31 ] |
Заголовок сообщения: | Re: XML против Reports |
Цитата: Я противник того чтоб вместо отуствующих данных вставлять "-" Тут вроде проверка содержания элемента не противоречит вашей идее. Просто дополняет. Обменник с которым работаю, взят от "войнов" местного ДЗК, по их словам он сотворён на все 100% правильно, по образу и подобию "великой методической рекомендации" и конвертера! Теперь я по другую сторону баррикады, и конфликтовать по таким вещам, это подстава тому флагу под которым ныне хожу. Я думаю многое само устаканится, а может придется внушение проводить, если найду ссылку в нормативных актах и кончится терпение . |
Автор: | kukin [ 08 апр 2011 15:47 ] |
Заголовок сообщения: | Re: XML против Reports |
Насколько я понял ребят из нашего филиала ДЗК, формируют обменник конвертером из ин4, со всеми вытикающими последствиями (символы"-", нарезанные контура угодий под ограничениями итд..). Все руководствуются золотым правилом "инициатива, сношает инициатора" и сидят молча. ___________________________________________________ Добавлено: Представители ДЗК утверждают, что менеджер обменных файлов версии 1.16, ругается на отсутствие веточки "будівля", считая это ошибкой. По этому заполняют поля "-", при этом ошибка пропадает Проверил, ошибки как таковой нет, но поле "будівля" удалить не могу. |
Автор: | kukin [ 08 апр 2011 16:01 ] |
Заголовок сообщения: | Re: XML против Reports |
следующий этап, это добовление к имени физ.лица приставки "гр." тут надо провести поиск по: /UkrainianCadastralExchangeFile/InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/Authentication/NaturalPerson /UkrainianCadastralExchangeFile/InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors/ProprietorInfo/Authentication/LegalEntity вроде так? а в ин4 это делалось по идентификационному это производится переменной ProprietorFullNameList, которая в ХМЛ режиме приравнивается функции: function PrepareXMLNMList(Delimeter:Char):String; // имя самой функции (микропрограммы) var I,N:Integer; S,PPath:String; //переменные в теле функции begin Result:=''; //эта переменная выводится как результат действия функции PPath:=XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors'; // путь "Блок опису усіх власників або користувачів земельної ділянки " N:=NodesCount(PPath,'ProprietorInfo');//количество владельцев-пользователей if N<1 then Exit;//проверка на наличие нескольких владельцев-пользователей for I:=1 to N do // пошел перебор поштучно каждого пользователя if IsNodeExists(PPath+'/ProprietorInfo/Authentication/NaturalPerson')//проверка на физ.лицо then Result:=Result+ XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/LastName')+' '+ XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/FirstName')+' '+ XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/MiddleName')+IIF(I<>N,Delimeter+' ','') //суммирует поштучно переменную Result с Ф.И.О.(полное) else Result:=Result+XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/LegalEntity/Name')+IIF(I<>N,Delimeter+' ','')// суммирует названия юр.лиц end; |
Автор: | Dmitry_Zolotar [ 08 апр 2011 16:28 ] |
Заголовок сообщения: | Re: XML против Reports |
kukin писал(а): следующий этап, это добовление к имени физ.лица приставки "гр." function PrepareXMLNMList(Delimeter:Char):String; var I,N:Integer; S,PPath:String; begin Result:=''; PPath:=XML573Root+'InfoPart/CadastralZoneInfo/CadastralQuarters/CadastralQuarterInfo/Parcels/ParcelInfo/Proprietors'; N:=NodesCount(PPath,'ProprietorInfo'); if N<1 then Exit; for I:=1 to N do if IsNodeExists(PPath+'/ProprietorInfo/Authentication/NaturalPerson') then Result:=Result+'гр. '+ XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/LastName')+' '+ XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/FirstName')+' '+ XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/NaturalPerson/FullName/MiddleName')+IIF(I<>N,Delimeter+' ','') else Result:=Result+XPath(PPath+'/ProprietorInfo['+IntToStr(I)+']/Authentication/LegalEntity/Name')+IIF(I<>N,Delimeter+' ','') end; |
Автор: | kukin [ 08 апр 2011 16:33 ] |
Заголовок сообщения: | Re: XML против Reports |
Спасибо Дмитрий! Только разжевал для себя функцию и собрался расписать её "по косточкам", но не успел) Добавлю в предыдущее свое сообщение комментарии. ____________________________________________________ Объясню почему это важно, к примеру в техническом задании надо указывать имя-название владельца-пользователя,и его адрес При этом получится довольно сложная таблица, а значит и функция которая с этим работает. PS:мне когда-то понимание функций казалось сверхъестественным ____________________________________________________ У меня еще один вопросик, существуют ли нормативные документы описывающие "формат" адреса в технической документации? |
Автор: | kukin [ 08 апр 2011 18:17 ] |
Заголовок сообщения: | Re: XML против Reports |
Раньше для ин4 я использовал такие функции: [AllOwn(OwnerCount(PARAM('NM')))] - переменная в теле отчета begin if PARAM('KF')<>'' then KFvar:='гр.' else KFvar:='';//определение по параметру KF физ.лица end; function AllOwn(N:integer):string; //функция добавляющая "гр." к именам var i: integer; begin Result:=''; for i:=0 to N-1 do//все тотже перебор begin Result:=Result+ KFvar+FIO(GetOwner(PARAM('NM'), i)); // само действие добавления if i<N-1 then Result:=Result+', '; end; end; а это я где-то позаимствовал function GetOwner(S:string; N:integer):string; // Виділяємо співвласника за заданим номером var i,k:integer; SS:string; begin i:=-1; SS:=S; //i будет указывать номер текущего пользователя; чтобы не "портить" исходные данные запихиваем ее значение в другую переменную для дальнейшей "препарации" Result:=''; // рельтат пока будет пустая строка repeat // начинаем цикл k:=Pos(Sym,SS); // ищем разделитель в строке inc(i); // увеличиваем текущего пользователя на 1 if k>0 then // если нашли разделитель begin if i=N then Delete(SS,k,Length(SS)) // и если номер текущего пользователя тот, что нам надо, удаляем все, что за разделителем и сам разделитель - таким образом остается только пользователь else Delete(SS,1,k); // удаляем часть строки перед ним и его самого - тогда в следующем цикле найдется следующий разделитель end; if i=N then // если номер текущего пользователя тот, что нам надо Result:=SS; // то запихиваем в результат уже "готового" пользователя until (i=N) or (k=0); // повторяем процедуру до тех пор, пока не дойдем до требуемого пользователя или не останется разделителей end; ___________________________ вспомнил... делал под чутким руководством Antonа Gorpynichа ___________________________ забыл про еще одну функцию: function OwnerCount(S:string): integer; // Визначаємо кількість співвласників var i:integer; SS: string; begin Result:=0; // Сначала их было ноль SS:=S; // Чтобы не "портить" исходные данные запихиваем ее значение в другую переменную для дальнейшей "препарации" repeat // так начинается цикл i:=Pos(Sym,SS); // ищем разделитель в строке if i>0 then Delete(SS,1,i); // если разделитель нашелся, то удаляем часть строки перед ним и его самого - тогда в следующем цикле найдется следующий разделитель inc(Result) // увеличиваем кол-во пользователей на 1 until i=0; // повторяем цикл до тех пор, пока Pos находит разделители end; коменты оставил как есть. |
Страница 2 из 20 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |