Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Вниз

Оптимизация кода.   Найти похожие ветки 

 
zamkom   (2004-02-18 14:10) [0]

Уважаемые мастера есть код:
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="1") then DbCrTemp :="30301810000000000014" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="2") then DbCrTemp :="30301810700000000013" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="3") then DbCrTemp :="30301810300000000015" else begin
If (CrBIC="044030857") and (Copy(CrLicAcc,13,1)="4") then DbCrTemp :="30301810900000000017" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="5") then DbCrTemp :="30301810400000000012" else begin
If (CrBIC="044585220") and (Copy(CrLicAcc,13,1)="6") then DbCrTemp :="30301810800000000010" else begin
If (CrBIC="049003765") and (Copy(CrLicAcc,13,1)="7") then DbCrTemp :="30301810200000000018" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="8") then DbCrTemp :="30301810100000000008" else begin
If (CrBIC="049011717") and (Copy(CrLicAcc,13,1)="9") then DbCrTemp :="30301810100000000011" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,12,2)="10") then DbCrTemp:="30301810400000000025" else begin
If (CrBIC="049033764") and (Copy(CrLicAcc,13,1)="0") then DbCrTemp :=CrLicAcc else begin
DbCrTemp :="30102810500000000001";
end; end; end; end; end; end; end; end; end; end; end;
blockrezult[46]:="КРЕДИТ :"+ DbCrTemp;


Можно ли этот код как нибудь оптимизировать. Т.е. обойти все эти IF.


 
Amoeba   (2004-02-18 14:20) [1]

обойти все эти IF
нельзя. Возможность оптимизации не просматрвается. Единственно что вся эта масса begin и end представляется в данном коде совершенно излишней.


 
Тимохов   (2004-02-18 14:21) [2]

Можно.
Надо описать массив записей
rec = record
crbic: string;
ctlicacc: string;
ctlicacc_start: integer;
ctlicacc_len: integer;
dbcrtemp: string;
end;
например для первого ифа занести в рекорд

crbic="049033764"
ctlicacc="1"
ctlicacc_start=13
ctlicacc_len=1
dbcrtemp=30301810000000000014

и так для каждого

В цикле проверять значения.
Для последнего if также можно что-нить придумать.


 
Тимохов   (2004-02-18 14:22) [3]


> Amoeba © (18.02.04 14:20) [1]

Было бы желание, а обойти можно.


 
Digitman   (2004-02-18 14:23) [4]

1. занести константы в массив и вести цикл.поиск нужного эл-та массива, возвращая индекс найденного

2. для каждой строковой константы расчитать заранее CRC32

case GetCRC32(CrBIC) of
123245435: ...
847522535: ...
... и т.д.
end;


 
Amoeba   (2004-02-18 14:32) [5]


> Было бы желание, а обойти можно.

Только оптимизацией это


 
Евгений(Забыл пароль)   (2004-02-18 14:33) [6]

А что за банк-то, где такие програмисты ?


 
Radionov Alexey   (2004-02-18 14:36) [7]

"В лоб", без дурацких в данном месте Copy:

DbCrTemp := "30102810500000000001";
If Length(CrLicAcc) < 13 Then exit;
If (CrBIC = "049033764") Then
Case CrLicAcc[13] Of
"0": DbCrTemp := CrLicAcc;
"1":
If (Length(CrLicAcc) > 13) And (CrLicAcc[13] = "0") Then
DbCrTemp := "30301810400000000025"
Else
DbCrTemp := "30301810000000000014";
"2": DbCrTemp := "30301810700000000013";
"3": DbCrTemp := "30301810300000000015";
"5": DbCrTemp := "30301810400000000012";
"8": DbCrTemp := "30301810100000000008";
End
Else
If (CrBIC = "044030857") And (CrLicAcc[13] = "4") Then
DbCrTemp := "30301810900000000017"
Else
If (CrBIC = "044585220") And (CrLicAcc[13] = "6") Then
DbCrTemp := "30301810800000000010"
Else
If (CrBIC = "049003765") And (CrLicAcc[13] = "7") Then
DbCrTemp := "30301810200000000018"
Else
If (CrBIC = "049011717") And (CrLicAcc[13] = "9") Then
DbCrTemp := "30301810100000000011";

blockrezult[46] := "КРЕДИТ :" + DbCrTemp;


 
Тимохов   (2004-02-18 14:38) [8]


> Amoeba © (18.02.04 14:32) [5]

Оптимизация вообще понятие растяжимое.


 
Radionov Alexey   (2004-02-18 14:45) [9]

К посту Radionov Alexey © (18.02.04 14:36) [7]:

Сорри, поправочка для case:

Case CrLicAcc[13] Of
"0":
If (CrLicAcc[12] = "1") Then
DbCrTemp := "30301810400000000025"
Else
DbCrTemp := CrLicAcc;
"1": DbCrTemp := "30301810000000000014";
"2": DbCrTemp := "30301810700000000013";
"3": DbCrTemp := "30301810300000000015";
"5": DbCrTemp := "30301810400000000012";
"8": DbCrTemp := "30301810100000000008";
End


 
zamkom   (2004-02-18 15:18) [10]

Спасибо всем за ответы.


 
Silver_   (2004-02-18 17:46) [11]

Case StrToInt(Copy(CrLicAcc,13,1)) of
0:
if CrBIC="..." then ...
1:
if CrBIC="..." then ...
...
9:
if CrBIC="..." then ...
else //10:
if CrBIC="..." then ...
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.02.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
3-93817
John
2004-02-04 18:02
2004.02.29
Округление с определенным количеством знаков


9-93745
wild
2003-08-15 04:35
2004.02.29
Математика в азартных играх.


1-93943
Прямой
2004-02-18 05:22
2004.02.29
Какую библиотеку надо TClientSocket


14-94161
Soft
2004-02-07 02:07
2004.02.29
Готовы ли вы продать свою душу за реальные деньги?


3-93797
Victor!
2004-01-31 15:12
2004.02.29
Вопрос по Microsoft Jet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский