Delphi. Строки..

На предыдущую страницу…

Среда: Delphi 10.2 Tokyo

В процессе формирования…


  1. Операции со строками:
    • 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;
  2. SQL:
    • PrepareForSQL — нормализовать строку для SQL-запроса;
    • PrepareForSQL2 — заменить каждую сдвоенную кавычку — на две сдвоенных кавычки;
  3. Конвертация значений:
    • 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;
  4. Проверка значений:
    • IsInteger — проверка: входная строка — это ЦЕЛОЕ число ?;
    • IsNumber — проверка: входная строка — это число ?;

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;












Продолжение следует…


На предыдущую страницу…


Дата: 13.02.2022