Skocz do zawartości

[Delphi] - Zapisanie/ wczytanie array^ do TStringList


Integer

Polecane posty

Kod właściwy w odpowiedzi nr1.

 

Cześć. Mam tu kilka linijek kodu i zastanawiam się jak go zoptymalizować

(choćby pod względem szybkości działania ;) i niepotrzebnego kodu ).

 

Moduł jak na razie przy tworzeniu się formy :

- sprawdza obecność dwóch plików: FFileName_ParProp I FFileName_ParList

- jeśli są to wczytuje ich zawartość przez TStringList a potem do tabeli:

TRecTabZycPrmOne. Record

Tab : TTabZycPrmOne

- jeśli nie ma to takowa jest tworzona wraz z plikami

 

 

 

Po wywołaniu z innej formy:

 

unit Komputer;

interface

Uses ParametryU,
 SysUtils, Classes;

var
 vOsobaKomputer: TZycPrm;

procedure OsobaKomputer_Start;

implementation

procedure OsobaKomputer_Start;
begin //
  vOsobaKomputer:= TZycPrm.Create('Komputer');
  //vOsobaKomputer.

end;


end.

 

Mamy wynik działania:

..\Program\Parametry\ ParList.txt

 

Zdrowie

Emocje

Socjologia

Estetyka

Kultura

Bezpieczenstwo

Tworczosc

Pracowitosc

Rozrywka

 

 

..\Program\Parametry\Komputer\Komputer_Zyciowe.txt

 

{Naz|Zal|Mn|Mx|K|dK|L|dL|Opt|Ter|ArMn|ArMx|}

[Zdrowie|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|50|1|0,3|0|0,9|0|]

[Emocje|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|51|1|0,3|0|0,9|0|]

[socjologia|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|84|1|0,3|0|0,9|0|]

[Estetyka|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|58|1|0,3|0|0,9|0|]

[Kultura|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|60|1|0,3|0|0,9|0|]

[bezpieczenstwo|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|76|1|0,3|0|0,9|0|]

[Tworczosc|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|62|1|0,3|0|0,9|0|]

[Pracowitosc|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|56|1|0,3|0|0,9|0|]

[Rozrywka|0||1|0|0|100|0|2|1|0,9|1|0|1|0,1|0|50|1|64|1|0,3|0|0,9|0|]

Link do komentarza
Udostępnij na innych stronach

Jeśli chodzi o funkcje Bool to zrobiłem podmiankę w standardzie

False := -1;

True := 0;

natomiast żeby zaoszczędzić ;) na bajcie zapisanym do pliku zrobiłem tak

False := 0;

True := 1;

 

Natomiast jeśli chodzi o Goto to okazuje się że jest szybsza

i zajmuje mniej miejsca niż Exit;

Chyba, że źle doczytałem to sorry...

 

Dlatego chodzi mi o jakąś bardziej zawansowaną optymalizację popartą przykładami,

może ktoś ma uwagi merytoryczne też chętnie poczytam.

Link do komentarza
Udostępnij na innych stronach

1. Uwaga merytoryczna: o co chodzi ?

2. Wrzuciles kod niczym wyciagniety nie powiem z czego, taki stary dziad jak ja po prostu to przewinal nawet nie zerknalem na to, bo indentacja jak w powrocie zywych trupow

3. Jesli optymalizujesz kod uzywajac goto zamiast exit, to bez obrazy ale przyjdz za 2-3 lata jak napiszesz te 200-300k lini kodu i zaczniesz myslec powazanie o optymalizacji.

4. Napierw zastanow sie co chcesz osiagnac, pozniej: po co chcesz to osiagnac, a pozniej pytaj sie jak to osiagnac...

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

troche ironii:

 

2 linijki z twojego kodu:

 

StrList.Free;

Result:= StrList.Count;

 

kto zgadnie ile bedzie wynosil result ? :)

 

odnosnie 'optymalizacji' skoro juz tak jedziesz po bandzie ze zamiast exit uzywasz goto (rozumiem ze porownales kod asemblera i wiesz ze goto generuje szybszy kod) to uzasadnij mi uzycie typu string zamiast Pchar, bo chyba nie predkoscia wykonania sie kierowales....

 

no i jeszcze jedna sprawa. Rozumiem ze procki ktore tutaj przytoczyles sa tzw. bootleneck'iem skoro robisz takie cuda. Zmierzyles moze ile milionow razy ta metoda sie wykonuje i jaki jest zysk predkosci a jaka strata czytelnosci kodu ?

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Odp. Toster - no i o to mi chodziło, a co do ironii najciemniej pod latarnią,

 

fakt o PChar nie pomyślałem, ale jak już skończę moduł żeby faktycznie nie zginąć

w gąszczu pokuszę się o WinAPI i wtedy pewnie PChar będzie na tapecie.

Chyba, że znajdę inny pomysł bo jak na razie TStringList będzie tylko do przechowywania danych

na wypadek wyłączenia programu dlatego pod koniec pracy jak juz wszystko będzie w module grało

TStringList.Create i ...Free zmienią lokalizację

 

Informacje głównie bedą przechowywane w Tablicy rekordów nad którą też muszę popracować ale tu

oprócz typu czysto wskaźnikowego nie mam pomysłu, może jest coś szybszego?

Zobacze w WinApi ale to potem - teraz to szkielet.

 

z SySUtils

 
function BoolToStr(B: Boolean; UseBoolStrs: Boolean = False): string;
const
 cSimpleBoolStrs: array [boolean] of String = ('0', '-1');
begin
 if UseBoolStrs then
 begin
   VerifyBoolStrArray;
   if B then
     Result := TrueBoolStrs[0]
   else
     Result := FalseBoolStrs[0];
 end
 else
   Result := cSimpleBoolStrs[B];
end;

function StrToBool(const S: string): Boolean;
begin
 if not TryStrToBool(S, Result) then
   ConvertErrorFmt(@SInvalidBoolean, [S]);
end;

 

moje procedury w przeciwieństwie do tych z Delphi nie korzystają z innych dodatkowych funkcji (z grubsza), błędu nie sprawdzam bo już na samym początku zakładam że nie ma szans na wpisanie w Boolean czegoś innego nisz True lub False,

wydaje mi się to szybsze ale po tym jak wspomniałeś o PChar to i te procedurki w końcu się zmienią.

 

Co do czytelności, hmm..staram się robić opisy i mam nadzieję, że jak dopracuje moduły to nie będę do nich musiał wracać tylko zrobi to za mnie program no i do tego potrzebny mi jest programowo wywoływany kompilator... i innego tematu.

 

 

 

 

Ad. Blind

 

Jeśli chodzi o losowe to tu sobie zostawiłem miejsce na coś na wzór neuronowych gdzie na początku wartości też są losowane a potem program w miarę uczenia się dostraja swoje parametry do wymogów. Wiec to random jest na razie takim wstępem, które potem zastąpi hmm.. muszę odświeżyć sieci i wtedy coś się dopisze. Na razie nie chce stracić głównego wątku ;)

 

Dzięki za podpowiedzi i liczę na następne.

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...