Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Delphi (версии 2009, 2010 Weaver, 2011 Fulcrum)

Автор: AlexCoRu
Дата сообщения: 26.09.2012 07:00
С этим я разобрался, гугль помог:
Код: XMLDocument.XML.Text := FormatXMLData(XMLDocument.XML.Text);
Автор: Frodo_Torbins
Дата сообщения: 26.09.2012 15:26
AlexCoRu
Если оно работает по аналогии с датасетами, то в первом случае файл будет загружаться и парситься по мере надобности, а во втором отпарсится сразу весь, и только потом пойдет цикл.
Автор: AlexCoRu
Дата сообщения: 26.09.2012 15:53
Frodo_Torbins
В этом-то и вопрос: что эффективней индекс или ссылка?
Если судить по исходникам Xml.XMLDoc.pas (в нём во всех методах First, Next и т.п. вызывается IndexOf), то индексы. Но TXML тоже ли самое, что IXML?

Добавлено:
Вернее так: TXML тоже ли самое, что стоит за IXML?
Автор: adasiko
Дата сообщения: 27.09.2012 10:02
Есть код

Код: try
Stream1:=TMemoryStream.Create;
Операции разные;
finally
Stream1.Free;
End;
Автор: Eternal_Shield
Дата сообщения: 27.09.2012 10:23
adasiko
Обычно, пишут так:

Код:
Stream1:=TMemoryStream.Create;
try
Операции разные;
finally
Stream1.Free;
end;
Автор: adasiko
Дата сообщения: 27.09.2012 10:54
Eternal_Shield
Но так ведь тож не хорошо. Если памяти нет- ну или вообще просто create выполнится с ошибкой?
Автор: Eternal_Shield
Дата сообщения: 28.09.2012 09:56
adasiko
Create выполнится без проблем, ибо это чистый инициализатор. Захват памяти под данные потока будет тогда, когда будет конкретный Write. До Write никаких захватов нет.

Если же в Create произойдёт AV, то объект не будет создан, поэтому и обрабатывать его уничтожение не надо, обработать надо будет только AV. Это относится к любому классу.
Автор: eddoc
Дата сообщения: 28.09.2012 10:59
adasiko

Цитата:
Но так ведь тож не хорошо. Если памяти нет- ну или вообще просто create выполнится с ошибкой?

Что за ерунду вы несете? Мат.часть не знаете?

Если хотите отловить ошибку или просто не желаете ее видеть, вставьте try..except..end между try..finally. Это ж в любом букваре есть.
Автор: Aleksandr N
Дата сообщения: 28.09.2012 11:36
Есть задача, необходимо добиться правильного отображения кириллицы.

procedure TForm1.Button1Click(Sender: TObject);
var s: WideString;
s1: AnsiString;
PAC, PAC1: PAnsiChar;
begin
s := #197#181;
s1 := #197#181;
PAC := StrAlloc(2);
PAC1 := StrAlloc(2);
try
PAC[0] := AnsiChar(s[1]);
PAC[1] := AnsiChar(s[2]);
PAC1[0] := AnsiChar(s1[1]);
PAC1[1] := AnsiChar(s1[2]);
ShowMessage('Правильно ' + PAC);
ShowMessage('Не правильно ' + PAC1);
finally
StrDispose(PAC);
StrDispose(PAC1);
end;

s := '§С';
s1 := '§С';
PAC := StrAlloc(2);
PAC1 := StrAlloc(2);
try
PAC[0] := AnsiChar(s[1]);
PAC[1] := AnsiChar(s[2]);
PAC1[0] := AnsiChar(s1[1]);
PAC1[1] := AnsiChar(s1[2]);
ShowMessage('Не правильно ' + PAC);
ShowMessage('Правильно ' + PAC1);
finally
StrDispose(PAC);
StrDispose(PAC1);
end;
end;

Для корректного отображения символов юникода необходимо чтобы входная строка была WideString, "PAC" и "PAC1" обязательно PAnsiChar.
Вот и получается, в первой части если "s" WideString то всё правильно, но во второй части (здесь русская "С") "s" на выходе не даёт "§С".

Подскажите что исправить чтобы на выходе корректно отображались символы юникода и кириллица?
(с юникодом сталкиваюсь крайне редко...)
Автор: Frodo_Torbins
Дата сообщения: 28.09.2012 22:39
adasiko
Цитата:
Если памяти нет- ну или вообще просто create выполнится с ошибкой?
Тогда Free будет вызван автоматически. А ваш вариант приведет к двойному Free.

Aleksandr N
Эм, один юникодный символ занимает минимум 2 байта. Ансишный символ занимает всего один байт. Как вы собираетесь втиснуть первое во второе?
Без потерь можно преобразовать только те юникодные символы, которые поддерживает кодировка целевой ансишной строки.
Автор: Aleksandr N
Дата сообщения: 28.09.2012 22:53
Frodo_Torbins
Про два и один символ я знаю, вот я и пытаюсь придумать как отделить кириллицу от другого. В общем после всего этого пойдёт перекодировка. Первая строка перекодируется в символ "诺", а вторая в русскую "а". Если для кириллицы и литиницы дастаточно чтобы входная строка была "AnsiString", то китайские символы трубуют юникода. Вот и надо как-то отделить всё это. Может есть какой-то способ...
Если как-то возможно сделать, могу выложить конкретный пример с требуемой задачей.
Автор: relictus
Дата сообщения: 02.10.2012 10:54
Как-то так вышло, что до сей поры не приходилось сталкиваться с регулярными выражениями
А тут встала задача выделить из строки вида

Код: Продаю 1-комн. кв новый дом, 2,3,4,5,6 /6 эт нов. кир. дома , площадью 34,0 кв. м , 35,4 кв. м 37 ,0 кв. м 44,5 кв. м 2-х ком. 50,49,59кв. м по 24кв. м, 3-х ком. 85,0 кв. имеется лифт. Цена 830,0 тыс. руб тел. 41-16-94, 8-962-441-1694
Автор: eddoc
Дата сообщения: 02.10.2012 11:25
relictus
Пока гении регулярок обдумывают варианты ответов, рискну посоветовать обрезать строку слева по слову "тел.", а остаток "собирать в кучу", исключая тире и беря за условную границу между номерами запятую или точку с запятой. Думаю, при помощи Pos и PosEx это вполне посильная задача. Единственное ограничение, объявления должны подчиняться определенным правилам шаблона
Автор: neznayka3
Дата сообщения: 02.10.2012 12:01
relictus
тут быстрее ответят. у мня получилось
Код: //PCRE
[+]?\d?[-\s]?\d{2,4}[\s-]?\d{2,4}[\s-]?\d{0,4}[\s-]?\d{0,2}
Автор: relictus
Дата сообщения: 02.10.2012 12:12
eddoc
"Обрезка" не получится, т.к. слово "тел" не всегда присутствует, да и сами номера телефонов не всегда заканчивают текст объявления.
neznayka3
Спасибо за линк.
А этот шаблон подходит для всех видов записи номера телефона?
Автор: neznayka3
Дата сообщения: 02.10.2012 12:22
relictus
для тех, что описаны да

картинку залил, уж программа очень нравится) многим пригодится

upd программа может сама код сгенерить для delphi
Автор: Frodo_Torbins
Дата сообщения: 02.10.2012 16:50
Aleksandr N
Можно использовать WideCharToMultiByte, нужно будет только указать целевую кодировку с нужным набором символов. К примеру для кириллицы это будет 1251. Все символы не входящие в ее набор будут заменены знаками вопроса.
Автор: Aleksandr N
Дата сообщения: 02.10.2012 19:20
Frodo_Torbins
Можно конечно, но знаки вопроса меня не устраивают.
Оказывается я изначально поставил вопрос не правильно. Для начала, может как-то можно определьть является ли входная строка WideString или AnsiString? Именно строки а не файла. Юникодовский файл начинается с символов FEFF, но явно юникодовская строка этого не содержит (проверял). Может как-то получится отличить эти строки. Кстати в блокноте AkelPad это как-то делается, когда создаёшь чистый лист, вставляешь юникодовскую строку и пытаешься сохранить как Ansi, а он предупреждает о возможной потере символов.
Так как-то можно?
Автор: Frodo_Torbins
Дата сообщения: 02.10.2012 23:02
Aleksandr N
Если нужно определить влезет ли содержимое текущей юникодной строки в данную кодировку, то это не сложно. Просто проверяем коды символов в строке.
Что касается загрузки файлов без BOM, то я думаю в акеле определение кодировки делается статистически. То есть стопроцентной гарантии нету. Аналогичное апи экспортирует IE. Вроде бы кто-то из русскоязычных блогеров даже писал об этом.
Автор: Aleksandr N
Дата сообщения: 02.10.2012 23:23
Frodo_Torbins
Наверное да, придется проверять коды символов, по другому не получится.
Спасибо.
Автор: MagistrAnatol
Дата сообщения: 03.10.2012 09:57
народ помогите с idFtp в c++builder xe2
DirectoryListing возвращает 0 каталогов - порылся в нете
надо

Код: #include <IdFTPListParseBase.hpp>
#include <IdFTPListParseUnix.hpp>

// Где-то нужно зарегистрировать парсер. Утверждается, что это надо запустить
// после того, как главное окно сконструировано. Я не заморачивался и воткнул пока
// в точку начала работы с FTP. В итоге оно вызывается несколько раз, но
// проблем от этого нет. Имя класса TIdFTPLPUnix нашёл в файле
// IdFTPListParseUnix.hpp - это я к тому, что если потребуются другие типы парсеров,
// то как их искать
RegisterFTPListParser ( __classid (TIdFTPLPUnix));

IdFTP->Username = ...;
...
IdFTP->List (NULL, "", true);
// Здесь IdFTP->DirectoryListing->Count уже работает


но в результате получаю ошибку
[ILINK32 Error] Error: Unresolved external '__fastcall Idftplistparsebase::RegisterFTPListParser(const System::TMetaClass * const)' referenced from D:\...\_FRMMAIN.OBJ
Автор: eddoc
Дата сообщения: 03.10.2012 14:38
neznayka3

Цитата:
программа может сама код сгенерить для delphi

Шо, даже купил?

А где-нить триалки нету, чтоб пощупать?
Автор: relictus
Дата сообщения: 03.10.2012 15:42
eddoc
в варезнике имеется... прога действительно пользительная
Автор: neznayka3
Дата сообщения: 10.10.2012 16:27
надо прикрутить интернет телефонию, подскажите что почитать.
Автор: tanaseduard
Дата сообщения: 11.10.2012 10:18
Господа.
Вопрос по Delphi 2010.
Если с нажатой клавишей Ctrl нажать на объявление метода в форме например то должно произойти позиционирование. Но по факту в 80% случаев курсор переходит непонятно куда. Как с этом бороться?
Автор: neznayka3
Дата сообщения: 12.10.2012 10:28
надо организовать форму настроек, как в Delphi Tools-Options.. спрятать панели и потом показывать при перемещении по дереву? имхо динамически создавать излишне
Автор: A_V
Дата сообщения: 12.10.2012 14:50
панели неудобно в дизайн-тайме редактировать - лучше с PageControl'ом и в рантайме ему убрать TabVisible
Автор: Frodo_Torbins
Дата сообщения: 12.10.2012 15:49
tanaseduard
IDE Fix Pack стоит? Если нет, то поставьте.
Автор: tanaseduard
Дата сообщения: 12.10.2012 15:59
Frodo_Torbins
Стоит. Последний.
Автор: jFobos
Дата сообщения: 25.10.2012 09:33

Цитата:
jFobos
Нужно отключать скинирование. Но сделать это можно только для всего класса, а не для отдельного объекта. Примерчик: http://theroadtodelphi.wordpress.com/2012/02/06/changing-the-color-of-edit-controls-with-vcl-styles-enabled/ и в нагрузку: http://code.google.com/p/vcl-styles-utils/

Спасибо огромное. Это именно что нужно

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172

Предыдущая тема: Установка копоненты ZipTV


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.