Среда: Delphi 10.2 Tokyo
- Операции со строками:
- BuildString — дополнить строку S символами CharCode (ascii-код) до CountChar;
- BuildString_Left — нарастить заданную строку заданным символом слева;
- BuildString_Right — нарастить заданную строку заданным символом справа;
- ReplaceSymbol — замена символов в строке;
- Get_CountWords_In_String — определить кол-во слов в строке Sx;
- Get_Word_From_String — получить слово из строки Sx по номеру NumWord;
- Get_Word_From_String_AsBoolean — получить из строки Sx слово с номером NumWord, как Boolean;
- Get_Word_From_String_AsInteger — получить из строки Sx слово с номером NumWord, как Integer;
- Get_Word_From_String_AsExtended — получить из строки Sx слово с номером NumWord, как Extended;
- Str_to_StrBase64 — конвертация «строки» в «Base64-строку» (кодирование);
- StrBase64_to_Str — конвертация «Base64-строки» в «строку» (раскодирование);
- ============================
- SQL:
- PrepareForSQL — нормализовать строку для SQL-запроса;
- PrepareForSQL2 — заменить каждую сдвоенную кавычку — на две сдвоенных кавычки;
- ============================
- Конвертация значений:
- spIntToStr — конвертировать Integer в string;
- spRealToStr — конвертировать Real в string;
- spExtendedToStr — конвертировать Extended в string;
- spBoolToStr — конвертировать Boolean в string;
- IfThen — аналог стандартной функции IfThen (StrUTILS);
- spStrToReal — конвертация строки символов в Real;
- spStrToExtended — конвертация строки символов в Extended;
- spStrToInt — конвертация строки символов в Integer;
- spStrToInt64 — конвертация строки символов в int64;
- spStrToBool — конвертация строки символов в Boolean;
- ============================
- Проверка значений:
function BuildString(S:String; CountChar:integer; CharCode:byte=32; Nr:integer=1): string; {Дополнить строку S символами CharCode (ascii-код) до CountChar} {Nr<=0 - слева, >0 - справа} begin Result:=S; while length(Result)<CountChar do begin if Nr>0 then begin Result:=Result+Chr(CharCode); end else begin Result:=Chr(CharCode)+Result; end; end; end;
function BuildString_Left(Sx : String; NewSize : integer; sChar : String='0') : String; //Нарастить заданную строку заданным символом слева begin Result:=Sx; if NewSize>0 then begin if length(sChar)<=0 then sChar:=' '; while length(Result)<NewSize do begin Result:=sChar+Result; end; end; end;
function BuildString_Right(Sx : String; NewSize : integer; sChar : String='0') : String; //Нарастить заданную строку заданным символом справа begin Result:=Sx; if NewSize>0 then begin if length(sChar)<=0 then sChar:=' '; while length(Result)<NewSize do begin Result:=Result+sChar; end; if length(Result)>NewSize then begin System.Delete(Result,NewSize+1,length(Result)); end; end; end;
function Get_CountWords_In_String(Sx : String; UnChar: String=' '; YesAllTrim_Before: boolean=true) : integer; //Определить кол-во слов в строке Sx. //UnChar - множество символов-разделителей (слов в предложении) //YesAllTrim_Before - если TRUE, то перед началом удалить из строки Sx пробелы слева и справа var InWord : byte; i : integer; begin Result:=0; if YesAllTrim_Before then Sx:=trim(Sx); if length(Sx)>0 then begin InWord := 0; i:=0; while i<length(Sx) do begin i:=i+1; if POS(Sx[i],UnChar)<=0 then begin //этот символ - НЕ разделитель if InWord<=0 then Result:=Result+1; //переход на начало слова InWord:=1; //Мы внутри слова end else begin //этот символ - разделитель InWord:=0; //Мы снаружи слова end; end; end; end;
function Get_Word_From_String(Sx : String; NumWord : integer; UnChar: String=' '; YesAllTrim_Before: boolean=true) : String; //Получить слово из строки Sx по номеру NumWord. //UnChar - множество символов-разделителей (слов в предложении) //YesAllTrim_Before - если TRUE, то перед началом удалить из строки левые и правые пробелы Var InWord : byte; NumWordCur, i : integer; begin Result:=''; if YesAllTrim_Before then Sx:=trim(Sx); if length(Sx)>0 then begin if NumWord>0 then begin InWord := 0; NumWordCur:=0; i:=0; while i<length(Sx) do begin i:=i+1; if POS(Sx[i],UnChar)<=0 then begin //этот символ - НЕ разделитель if InWord<=0 then NumWordCur:=NumWordCur+1; //мы - на начале слова InWord:=1; //Мы внутри слова if NumWordCur=NumWord then begin //Это - наше слово Result:=Result+Sx[i]; //и мы его выдираем из строки end; end else begin //этот символ - разделитель InWord:=0; //Мы снаружи слова if NumWordCur=NumWord then begin //Это было - наше слово i:=length(Sx)+1; //поэтому, выходим из цикла и функции end; end; end; end; end; end;
function Get_Word_From_String_AsBoolean(Sx : String; NumWord : integer; UnChar: String=' '; DefValue:boolean=false) : boolean; //Получить из строки Sx слово с номером NumWord, как Boolean //UnChar - множество символов-разделителей (слов в предложении) Var S1 : String; begin Result:=DefValue; S1:=Get_Word_From_String(Sx,NumWord,UnChar,true); if length(S1)>0 then begin Result:=spStrToBool(S1, DefValue); end; end;
function Get_Word_From_String_AsInteger(Sx : String; NumWord : integer; UnChar: String=' '; DefValue:integer=0) : integer; //Получить из строки Sx слово с номером NumWord, как Integer //UnChar - множество символов-разделителей (слов в предложении) Var S1 : String; begin Result:=DefValue; S1:=Get_Word_From_String(Sx,NumWord,UnChar,true); if IsInteger(S1) then begin Result:=spStrToInt(S1, DefValue); end; end;
function Get_Word_From_String_AsExtended(Sx : String; NumWord : integer; UnChar: String=' '; DefValue:extended=0) : extended; //Получить из строки Sx слово с номером NumWord, как Extended //UnChar - множество символов-разделителей (слов в предложении) Var S1 : String; begin Result:=DefValue; S1:=Get_Word_From_String(Sx,NumWord,UnChar,true); Result:=spStrToExtended(S1, DefValue); end;
function spIntToStr(N:integer; CountChar:integer=0; CodeCharNUL:byte=ORD('0')) : string; //Конвертировать Integer в строку begin Result:=IntToStr(N); if CountChar>0 then begin Result:=BuildString(Result, CountChar, CodeCharNUL, 0); end; end;
function spRealToStr(R : real;Precis : integer) : string; //Конвертировать Real в строку begin Str(R:64:Precis,Result); Result:=Trim(Result); end;
function spExtendedToStr(R : Extended;Precis : integer) : string; //Конвертировать Extended в строку begin Str(R:64:Precis,Result); Result:=Trim(Result); end;
function spBoolToStr(B: boolean; Nr: byte=1) : string; //Конвертировать Boolean в string begin Result:='0'; if Nr<=0 then Result:='0'; if Nr=1 then Result:='FALSE'; if Nr=2 then Result:='NOT'; if Nr=3 then Result:='NO'; if Nr>=4 then Result:='НЕТ'; if B then begin if Nr<=0 then Result:='1'; if Nr=1 then Result:='TRUE'; if Nr=2 then Result:='YES'; if Nr=3 then Result:='YES'; if Nr>=4 then Result:='ДА'; end; end;
function IfThen(V:boolean;sTrue:string='true';sFalse:string='false'):string; //аналог стандартной функции IfThen (StrUTILS) begin sTrue:=trim(sTrue); sFalse:=trim(sFalse); if length(sTrue)<=0 then sTrue:='true'; if length(sFalse)<=0 then sFalse:='false'; if V then begin Result:=sTrue; end else begin Result:=sFalse; end; end;
function PrepareForSQL(Str: String): String; //нормализовать строку для SQL-запроса begin Result := ReplaceSymbol(Str, '''', ''''''); end;
function PrepareForSQL2(Str: String): String; //заменить каждую сдвоенную кавычку - на две сдвоенных кавычки begin Result := ReplaceSymbol(Str, '"', '""'); end;
function ReplaceSymbol(str: string; oldsym, newsym: string): String; //Замена символов в строке var i, j: integer; repstr, R: string; s1, s2: String; begin s1 := oldsym; s2 := Str; i := pos(s1, s2); if i > 0 then begin R := ''; RepStr := Str; while i > 0 do begin R := R + copy(Repstr, 1, i - 1) + newsym; repstr := copy(repstr, i + length(oldsym), length(Repstr)); i := pos(oldsym, Repstr); end; Result := R + RepStr; end else Result := Str; end;
function spStrToExtended(Sx: String; DefI:Extended=0) : Extended; //Конвертация строки символов в Extended Var Res : integer; begin Sx:=Trim(Sx); Val(Sx,Result,Res); if Res<>0 then Result:=DefI; end;
function spStrToReal(Sx: String; DefI:real=0) : real; //Конвертация строки символов в Real Var Res : integer; begin Sx:=Trim(Sx); Val(Sx,Result,Res); if Res<>0 then Result:=DefI; end;
function spStrToInt64(Sx: String; DefI:int64=0) : int64; //Конвертация строки символов в int64 begin Result:=SysUTILS.StrToInt64Def(trim(Sx), DefI); end;
function spStrToInt(Sx: String; DefI:integer=0) : integer; //Конвертировать String в Integer Var Res : integer; begin Sx:=Trim(Sx); Val(Sx,Result,Res); if Res<>0 then Result:=DefI; end;
function spStrToBool(Sx: String; Def: boolean=false) : boolean; //Конвертировать String в BOOLEAN begin Result:=FALSE; Sx:=Trim(Sx); if Length(Sx)>0 then begin Sx:=AnsiUpperCase(Sx); if Sx='Y' then Result:=TRUE; if Sx='YES' then Result:=TRUE; if Sx='YE' then Result:=TRUE; if Sx='Д' then Result:=TRUE; if Sx='ДА' then Result:=TRUE; if Sx='TRUE' then Result:=TRUE; if Sx='T' then Result:=TRUE; if Sx='ИСТИНА' then Result:=TRUE; if not Result then begin if spStrToInt(Sx,0)>0 then Result:=true; end; end else begin Result:=Def; end; end;
function IsInteger(Sx : String) : boolean; //Проверка: Sx - это ЦЕЛОЕ число ? Var Res : integer; N : integer; begin Result:=false; Sx:=trim(Sx); if length(Sx)>0 then begin N:=POS('.',Sx); if N<=0 then begin N:=POS(',',Sx); end; if N<=0 then begin Val(Sx,N,Res); if Res=0 then Result:=true; end; end; end;
function IsNumber(Sx : String) : Boolean; //Проверка, что строка - это число Var V : extended; Res : integer; begin Result:=TRUE; Sx:=Trim(Sx); Val(Sx,V,Res); if Res<>0 then Result:=FALSE; end;
Uses ..., NetEncoding; function Str_to_StrBase64(S: string): string; //Конвертация "строки" в "Base64-строку" (кодирование) begin Result := TNetEncoding.Base64.Encode(S); end;
Uses ..., NetEncoding; function StrBase64_to_Str(S: string): string; //Конвертация "Base64-строки" в "строку" (раскодирование) begin Result := TNetEncoding.Base64.Decode(S); end;
Дата: 13.02.2022