Главная страница
    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.013 c
1-93992
Fridom
2004-02-17 10:27
2004.02.29
Как очистить содержимое папки без её удаления?


7-94224
smu
2003-12-11 10:33
2004.02.29
Как правильно запустить программу, кот удалит которая ее удалит?


1-93954
KOt
2004-02-17 17:09
2004.02.29
Отладка


14-94159
Dimedrol
2004-02-06 23:30
2004.02.29
Подскажите компонентик


1-93958
Alex_DM
2004-02-16 17:37
2004.02.29
Проблемы при динамическом создании WebBrowser. Помогите!





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский