- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
function get_filenamebyid(req_file_id_in:integer;is_answer:boolean;X_MESS_SWAP_path:string):string;
var FILENAME_ONSERVER,FILE_PATH_ONSERVER,s,ss:string;
req_file_id:integer;
begin //sdsd
req_file_id:=abs(req_file_id_in);
s:=inttostr(req_file_id div (1000*1000*1000));
while length(s)<3 do s:='0'+s;
ss:=s;
s:=inttostr(req_file_id div (1000*1000));
while length(s)<3 do s:='0'+s;
ss:=ss+'\'+s;
s:=inttostr(req_file_id div (1000));
while length(s)<3 do s:='0'+s;
ss:=ss+'\'+s;
FILE_PATH_ONSERVER:=ss;
FILENAME_ONSERVER:=inttostr(req_file_id)+ ifthen(is_answer,'.answer','')+'.xml';
result:=X_MESS_SWAP_path+FILE_PATH_ONSERVER+'\'+ FILENAME_ONSERVER;
end;
WildSery 01.03.2016 16:04 # 0
"while length(s)<3 do s:='0'+s;" конечно не блеск, но часто встречается, уже "принюхался".
Аналоги LPAD не везде есть, да и более краткое типа right('00' + s, 3) ещё придумать надо.
tucvbif 01.03.2016 16:05 # 0
WildSery 01.03.2016 16:07 # 0
tucvbif 01.03.2016 16:08 # 0
WildSery 01.03.2016 17:32 # 0
То, что я написал, абсолютно идентично по результату. По крайней мере, для integer, поскольку для int64 значение req_file_id div (1000*1000*1000) выходили бы за 3 знака.
У меня нет под рукой компилятора паскаля, и помню смутно, но всяческих функций форматирований числа там хватало.
В 1С я бы написал так, одной строкой:
ss = Формат(req_file_id, "ЧЦ=12; ЧС=3; ЧРГ=\; ЧВН=");
Сдвиг на 3 вправо, дополнение нулями до 12 знаков, разделитель тысяч "\"
tucvbif 01.03.2016 17:38 # 0
WildSery 01.03.2016 18:08 # 0
Для 12338 результат будет "000\000\012"
Для 3281284 результат будет "000\003\281"
tucvbif 01.03.2016 20:57 # 0
WildSery 02.03.2016 10:13 # 0
Всё равно, это возможно максимум 3-мя функциями format()
tucvbif 02.03.2016 10:35 # 0
WildSery 02.03.2016 10:46 # 0
tucvbif 02.03.2016 11:16 # 0
WildSery 02.03.2016 11:42 # 0
tucvbif 02.03.2016 11:55 # 0
WildSery 02.03.2016 12:08 # 0
tucvbif 02.03.2016 12:12 # 0
bormand 01.03.2016 21:15 # +1
sprintf(name, "%03u\\%03u\\%03u\\%u.%s", id/1000000000u, id/1000000u, id/1000u, id, isAnswer ? "answer" : "xml");
bormand 01.03.2016 21:21 # 0
tucvbif 01.03.2016 21:24 # 0
bormand 01.03.2016 21:26 # 0
tucvbif 01.03.2016 21:28 # 0
bormand 01.03.2016 21:29 # 0
tucvbif 01.03.2016 21:32 # +1
tucvbif 01.03.2016 21:26 # 0
bormand 01.03.2016 21:26 # 0
З.Ы. У нас принято общаться на ты.
bormand 01.03.2016 21:34 # 0
А положительных совсем не бывает? Или там знак что-то означает (типа -локальный +удалённый или ещё что-то подобное).
tucvbif 01.03.2016 21:35 # 0