Pagina de start Dennis Minich - Delfi - eșantionul de ieșire rezultate în formă de text

Acum, pentru ieșire a datelor. Pentru datele afișate frumos, într-o coloană, trebuie să definiți lungimea maximă a valorilor din fiecare domeniu. Există două opțiuni pentru a face acest lucru:

  • utilizați un tip de date câmp;
  • determină durata maximă a valorilor de câmp în întregul set de date de valori de enumerare.

SQL Query Analyzer utilizați prima metodă, deoarece este mai rapid. Vom merge de-al doilea mod, în ciuda pierderilor semnificative de viteză (în acest caz, nu este critică, deoarece eșantionul este mic), ca a doua metodă vă permite să afișați date mai compact, care este frumos. Poate că, pentru probele mari trebuie să utilizeze prima metodă.

Pentru acest cap lungimi matrice, din care dimensiunea coincide cu numărul de câmpuri din setul de date și umple-l cu valorile maxime ale lungimilor de câmpuri de date stabilite, fără a uita antetele de câmp. Asta obținem:

Din nou, vom efectua o cursă de probă. În câmpul vom obține următorul rezultat:

Ei bine, să mergem mai departe. Acesta rămâne cel mai dificil - să încheie rezultatele ei înșiși. Vom avea nevoie de lungimea șirului cu valorile tuturor câmpurilor. Să-l calculeze ca suma lungimea maximă a fiecărui câmp și se adaugă intervale suplimentare între câmpuri.

Din nou, vom efectua o cursă de probă. În câmpul vom obține următorul rezultat:

Să ne gândim în detaliu această linie

Aici, funcția este trecut un pointer la începutul liniei, care este primul caracter. Lungimea șir este multiplicat cu cantitatea de memorie ocupată de un simbol. indicele NEWLINE joacă absolut nici un rol, așa cum este utilizat numai pentru a indica tipul de date (aici - Char). Valoarea este calculată la momentul compilarii. Asta este absolut corectă și aceasta este o linie, chiar dacă lungimea liniei este mai mică decât:

Să ne uităm acum la ultimul parametru a trecut la procedura. Probabil vă întrebați de ce SPACE_DELIMITER constantă a declarat ca șir de caractere, dar este transferat la funcția de primul (și singurul) din caracterul ei. Pentru această problemă, vom reveni mai târziu.

Vom continua producția de date. Deducem acum linia care separă câmpurile de antet ale datelor și datele propriu-zise:

Vom efectua o cursă de probă și să vedem ce rezultatul este cel de care avem nevoie:

Acestea diferă de referință pentru motivul că acestea sunt în format Unicode. și lucrăm cu un șir în loc de WideString. Utilizarea Unicode nu ar schimba datele de afișare, deoarece componentele standard vizual Delphi nu-l suport. Dacă este necesar, este ușor de a modifica codul.

Ei bine, problema este rezolvată, dar am fost foarte confuz de mărimea metodei rezultat. Este timpul pentru a face refactoring și optimizare.

Am identificat trei funcții. Acest lucru va scăpa de duplicare și lăsate să se reducă ușor codul. Codul, cu toate acestea, apoi a crescut din nou, datorită faptului că le-am modificat la o retragere o singură dată rezultatul în loc de progresive. Aceasta a dat un mare avantaj în viteză. Funcții Astfel, auxiliar:

Ca urmare, metoda sa dovedit un astfel de cod:

Metoda este mai scurtă, dar este încă departe de vis final. Puteți urmări în continuare metode de alocare, deși nu atât de mult pentru a face față cu codul de redundanță, cum de a reduce și mai mult dimensiunea și metoda de divizare a ieșirii procesului.

Puteți descărca codul sursă al unui proiect demonstrativ (Delphi 7) (5 kB).