Главная страница
    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.008 c
1-93890
Sirus
2004-02-16 06:48
2004.02.29
Как узнать количество записей в массиве типа array of type


14-94113
ИМХО
2004-02-09 00:39
2004.02.29
Абрамович заарканил Роналдо и Роберто Карлоса


1-93857
xobbit
2004-02-16 02:52
2004.02.29
TTabSheet(Page control) в Рантайм


1-94010
Кен
2004-02-16 05:03
2004.02.29
Как удалить пустоты в большом массиве ?


4-94231
DillerXX
2003-12-22 17:16
2004.02.29
Перезагрузка+БАТ





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