Homepage Денис Minich - Делфи - резултатите от изхода на пробите в текстов вид

Сега за изход на данните. За да се показват данните за красиво, в колона, трябва да се определи максималната дължина на стойностите във всяка област. Има два варианта да направите това:

  • използване на вида поле на данни;
  • определяне на максималната дължина на полето стойности в целия набор от данни на изброяване ценности.

SQL Запитване анализатор използвате първия метод, тъй като тя е по-бързо. Ще отидем на втория начин, въпреки значителните загуби в скоростта (в този случай това не е от решаващо значение, тъй като извадката е малък), като вторият метод позволява да показвате данни по-компактно, че е красива. Може би, за големи проби трябва да използвате първия метод.

За тази дължина на главата масив, размера на който съвпада с номера на полета в масива от данни и я напълнете с максималните стойности на дължините на полета с данни, определени, като не забравяме полевите заглавията. Това е, което ние получаваме:

Отново, ние се извърши тест. В областта ще получим следния резултат:

Е, хайде да отидем по-нататък. Остава най-трудното - да се заключи, самите резултати. Ние ще се нуждаем от дължината на низа със стойностите от всички области. Нека да го изчисли като сума от максималната дължина на всяко поле и добавяне на допълнителни интервали между полетата.

Отново, ние се извърши тест. В областта ще получим следния резултат:

Нека разгледаме по-подробно този ред

Тук, функцията се предава указател към началото на реда, който е първият знак. Дължината на низ се умножава по размера на паметта, заета от един символ. нов ред индекс играе абсолютно никаква роля, като се използват само за обозначаване на типа на данните (тук - Char). Стойността е изчислена по време на компилация. Това е абсолютно правилно и това е една линия, дори и ако дължината на линията е по-малко от:

Нека сега разгледаме последния параметър премина към процедурата. Може би се чудите защо постоянно SPACE_DELIMITER декларирана като низ, но се прехвърля на функцията на първия (и единствен) на характера си. За този въпрос ще се върнем по-късно.

Ние продължаваме изход на данни. Сега се получи линията, разделяща областта заглавието на данните, както и самите данни:

Ние извършваме тест и да видим какво резултатът е този, че имаме нужда от:

Те се различават от препратката по причина, че те са в Unicode формат. и ние работим с String вместо WideString. Използването на Unicode няма да се промени данните на дисплея, както стандартните визуални компоненти Delphi не го поддържат. Ако е необходимо, че е лесно да промените кода.

Е, проблемът е решен, но е много объркана от размера на получената метод. Това е време да се направи рефакториране и оптимизация.

Имам определени три функции. Това ще се отървете от дублиране и се оставя да намалява малко код. Кодът, обаче, след което се увеличава отново се дължи на факта, че съм го променя до оттегляне еднократно за резултата вместо прогресивно. Това дава огромно предимство в скоростта. По този начин, допълнителни функции:

В резултат на това методът се оказа такъв код:

Методът е по-къса, но това е все още далеч от голямата мечта. Все още можете да преследват методи на разпределение, макар и не толкова много, за да се справят с излишък код, как допълнително да се намали размера и начина на разделяне на изхода на процеса.

Можете да изтеглите изходния код на демонстрационен проект (Delphi 7) (5 KB).