📄 u_stringpublicpack.pas
字号:
//缓冲区转化为字符串
Function BufToStr(Buf:Buffer;Var Start:Integer;Len:Byte):String;
Var
Str:String;
Begin
SetLength(Str,Len);
CopyMemory(@Str[1],buf+Start,len);
Start:=Start+Len;
Result:=Str;
End;
//字符串转化为缓冲区
Procedure StrToBuf(Var Buf:Buffer;Str:String;Var Start:Integer;Len:Integer);
Begin
FillMemory(Buf+Start,Len,0);
CopyMemory(Buf+Start,@Str[1],Len);
Start:=Start+Len;
End;
//字节转化为整数
Function Byte4ToInt(Count:Byte4):LongWord;
Begin
Result:=Count[0]*16777216+Count[1]*65536+Count[2]*256+Count[3];
End;
//整数转化为字节
Function IntToByte4(MakeData:Longword):Byte4;
Var
Count:Integer;
Temp:Byte4;
Begin
For Count:=3 DownTo 0 Do
Begin
temp[Count]:=MakeData Mod 256;
MakeData:=MakeData Div 256;
End;
Result:=Temp;
End;
//加密缓冲区
Function AddKeyOfBuf(InBuf:buffer;Key:String;Var OutBuf:Buffer;BufLen,OffSet:Integer):Integer;
Var
Des:TDes;
InTempBuf,OutTempBuf:Buffer;
i,Count:integer;
Begin
For i:= OffSet To BufLen-1 Do
Begin
InTempBuf[i-OffSet]:=InBuf[i];
End;
Count:=BufLen-OffSet;
BufLen:=(((Count-1) div 8)+1)*8;
If Count<BufLen Then
For i:=Count To BufLen-1 Do
InTempBuf[i]:=#0;
Result:=BufLen+OffSet;
Des:=TDes.Create(nil);
Try
Des.Key:=Key;
Des.InputLength:=BufLen;
Des.pInputArray:=@InTempBuf;
Des.poutputArray:=@OutTempBuf;
Des.InputType:=SourceByteArray;
Des.EncipherData(false);
For i:=0 To OffSet-1 Do
OutBuf[i]:=inBuf[i];
For i:=OffSet To Offset+BufLen-1 Do
OutBuf[i]:=OutTempBuf[i-Offset];
Except
Result:=0;
End;
Des.Free;
End;
//解密缓冲区
Function DeleteKeyOfBuf(InBuf:Buffer;Key:string;Var OutBuf:Buffer;BufLen,OffSet:integer):Integer;
Var
Des:TDes;
InTempBuf,OutTempBuf:Buffer;
i,Count:Integer;
Begin
Result:=1;
Count:=BufLen-OffSet;
If (Count Mod 8)<>0 Then
Begin
Result:=0;
Exit;
End;
For i:=OffSet To BufLen-1 Do
Begin
InTempBuf[i-OffSet]:=InBuf[i];
End;
Des:=TDes.Create(nil);
Try
Des.Key:=Key;
Des.InputLength:=Count;
Des.PInputArray:=@InTempBuf;
Des.PoutputArray:=@OutTempBuf;
Des.InputType:=SourceByteArray;
Des.DecipherData(false);
For i:=0 To OffSet-1 Do
OutBuf[i]:=InBuf[i];
For i:=OffSet To BufLen Do
OutBuf[i]:=OutTempBuf[i-OffSet];
Except
Result:=0;
End;
Des.Free;
End;
//获取指定时间的当月总的天数
Function GetDaysOfMonth(CurrentDate:TDatetime):Integer;
Var
Current:TDateTime;
Str:String;
Begin
Str:=FormatDateTime('YYYY-MM',IncMonth(CurrentDate))+'-01';
Current:=StrToDateTime(Str);
Result:=DayOf(Current-1);
End;
//判断一个串是否是小于等于Len个字
Function IsLessSomeWordFromStr(Str:String;Len:Integer):Boolean;
Var
WordCount,Index,StrLen:Integer;
Begin
Result:=True;
//获取字符串的字节数目
StrLen:=Length(Str);
//处始设置字数为0
WordCount:=0;
Index:=1;
//遍历整个字符串
While Index<=StrLen Do
Begin
//判断字数是否大于Len个字
If WordCount>Len Then
Begin
Result:=False;
//退出群环
Break;
End;
//判断该字符是否是汉字还是普通字符
If Str[Index]>#127 Then
Index:=Index+2
Else
Index:=Index+1;
//字数递增1
Inc(WordCount);
End;
//判断字数是否小于等于Len个字同时索引小于字符串长度
If (WordCount<=Len) And (Index>=StrLen) Then
//返回原串
Result:=True
Else
Result:=False;
End;
//获取一个串的Len个字
Function GetSomeWordFromStr(Var Str:String;Len:Integer):String;
Var
WordCount,Index,StrLen:Integer;
Begin
//获取字符串的字节数目
StrLen:=Length(Str);
//处始设置字数为0
WordCount:=0;
Index:=1;
//遍历整个字符串
While Index<=StrLen Do
Begin
//判断字数是否大于Len个字
If WordCount>=Len Then
Begin
Result:=Copy(Str,1,Index-1);
//获取字符串前Len个字
Str:=Copy(Str,Index,StrLen-Index+1);
//退出函数
Exit;
End;
//判断该字符是否是汉字还是普通字符
If Str[Index]>#127 Then
Index:=Index+2
Else
Index:=Index+1;
//字数递增1
Inc(WordCount);
End;
//判断字数是否小于等于Len个字同时索引小于字符串长度
If (WordCount<=Len) And (Index>=StrLen) Then
Begin
//返回原串
Result:=Str;
Str:='';
End;
End;
//获取一个串的字数
Function GetWordCountOfStr(Str:String):Integer;
begin
Result := Length(Trim(Str));
end;
{Var
WordCount,Index,StrLen:Integer;
Begin
StrLen:=Length(Str);
WordCount:=0;
Index:=1;
While Index<=StrLen Do
Begin
If Str[Index]>#127 Then
Index:=Index+2
Else
Index:=Index+1;
Inc(WordCount);
End;
Result:=WordCount;
End;}
//获取一段时间内总的天数
Function GetDays(StartDate,EndDate:TDateTime):Integer;
Var
Current:TDateTime;
Str:String;
Count,StartMonth,EndMonth:Integer;
Begin
StartMonth:=MonthOf(StartDate);
EndMonth:=MonthOf(EndDate);
If StartMonth>EndMonth Then
Begin
Result:=-1;
Exit;
End;
If StartMonth=EndMonth Then
Begin
Result:=DayOf(EndDate)-DayOf(StartDate);
Exit;
End;
Current:=StartDate;
Result:=GetDaysOfMonth(StartDate)-DayOf(StartDate);
For Count:=StartMonth+1 To EndMonth Do
Begin
If Count=EndMonth Then
Begin
Result:=Result+DayOf(EndDate);
Continue;
End;
Current:=IncMonth(Current);
Result:=Result+GetDaysOfMonth(Current);
End;
End;
//判断是否是数字数据
Function IsNumberData(Key:Char):Integer;
Begin
If Not (Key In ['0'..'9']) Then
Begin
Key:=#0;
Result:=1;
End
Else
Result:=0;
End;
//判断是否是字符数据
Function IsCharData(Key:Char):Integer;
Begin
If Not ((Key In ['a'..'z']) Or (Key In ['A'..'Z'])) Then
Begin
Key:=#0;
Result:=1;
End
Else
Result:=0;
End;
//判断是否是字符或数字数据
Function IsNumCharData(Key:Char):Integer;
Begin
If Not ((Key In ['0'..'9']) Or (Key In ['a'..'z']) Or (Key In ['A'..'Z'])) Then
Begin
Key:=#0;
Result:=1;
End
Else
Result:=0;
End;
//分解一个字符串Str中包含子字符串Chr的两个子字符串(PreStr和NextStr)
Procedure GetPreStrFromStrOfChr(Chr,Str:String);
Var
PreStr,NextStr:String;
ChrLen,StrLen,Position:Integer;
Begin
ChrLen:=Length(Chr);//替换串长度
StrLen:=Length(Str);//原串长度
Position:=Pos(Chr,Str);//获取原串中包含替换串的位置
If Position=0 Then
Begin
PreStr:=Str;
NextStr:='';
If PreStr='' Then
Exit;
{
**************************
***对PreStr字符串的操作***
**************************
}
Exit;
End
Else
Begin
If Position=1 Then
Begin
PreStr:='';
NextStr:=Copy(Str,Position+ChrLen,StrLen-ChrLen-Position+1);
End
Else
Begin
PreStr:=Copy(Str,1,Position-1);
NextStr:=Copy(Str,Position+ChrLen,StrLen-ChrLen-Position+1);
End;
End;
{
**************************
***对PreStr字符串的操作***
**************************
}
GetPreStrFromStrOfChr(Chr,NextStr);
End;
//截取浮点型的两位小位数
Function FormatFlt2Str(Inflt:Real):String;
Begin
Try
If inflt<0 Then
Begin
Result:=FormatFloat('0.00',Inflt);
End
Else
Begin
Result:='+'+FormatFloat('0.00',Inflt);
End;
Except
End;
End;
End.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -