From 4d64e4cd434426234a5c313c151cd79b6afc299e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juha=20Vehvil=C3=A4inen?= Date: Sat, 6 Jul 2002 17:50:18 +0000 Subject: *** empty log message *** svn path=/trunk/Framestein/; revision=27 --- Source/Strz.pas | 182 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 Source/Strz.pas (limited to 'Source/Strz.pas') diff --git a/Source/Strz.pas b/Source/Strz.pas new file mode 100644 index 0000000..85ad4a7 --- /dev/null +++ b/Source/Strz.pas @@ -0,0 +1,182 @@ +unit Strz; + +interface + +uses + Windows; + +type + CharSet = set of Char; + +// General +function MyStrToInt(const S: String): Integer; // some special checking, no exceptions +function MyStrToFloat(const S: String): Extended; // some special checking, no exceptions +function StrToRect(const S: String): TRect; +function Long2Str(L : LongInt) : string; +function SearchAndReplace( S, Old, New:String ):String; +function WordCount(S : string; WordDelims : CharSet) : Integer; + {-Given a set of word delimiters, return number of words in S} +function ExtractWord(N : Integer; S : string; WordDelims : CharSet) : string; + {-Given a set of word delimiters, return the N'th word in S} + +// Filez +function VerifyBackSlash( const FileName:String ):String; + +implementation + +uses + Classes, SysUtils; + +function StrToRect(const S: String): TRect; +var + i: Integer; +begin + Result := Rect(0, 0, 0, 0); + if S='' then Exit; + i := WordCount(S, [' ']); + Result.Left := MyStrToInt(ExtractWord(1, S, [' '])); + if i>1 then + Result.Top := MyStrToInt(ExtractWord(2, S, [' '])); + if i>2 then + Result.Right := MyStrToInt(ExtractWord(3, S, [' '])); + if i>3 then + Result.Bottom := MyStrToInt(ExtractWord(4, S, [' '])); +end; + +function MyStrToInt(const S: String): Integer; +var + St: String; +begin + Result := 0; + if (S='') or (S='-') or (S='0') then Exit; + try + Result := StrToInt(S); + except + St := S; + while Pos('.', St)>0 do + St[Pos('.', St)] := ','; + try Result := Trunc(StrToFloat(St)); except end; + end; +end; + +function MyStrToFloat(const S: String): Extended; +var + St: String; + i: Integer; +begin + Result := 0; + if (S='') or (S='-') or (S='0') then Exit; + St := S; + i := Pos('.', St); + if i>0 then + St[i] := ','; + try + Result := StrToFloat(St); + except + end; +end; + +function VerifyBackSlash( const FileName:String ):String; +begin + if FileName[Length(FileName)]='\' then + Result := FileName + else + Result := FileName + '\'; +end; + +function Long2Str(L : LongInt) : string; + {-Convert a long/word/integer/byte/shortint to a string} +var + S : string; +begin + Str(L, S); + Long2Str := S; +end; + +{-----} + + function WordCount(S : string; WordDelims : CharSet) : Integer; + {-Given a set of word delimiters, return number of words in S} + var + {I,} Count : Integer; {!!.12} + I, SLen : Word; {!!.12} + begin + Count := 0; + I := 1; + SLen:=Length(S); + + while I <= SLen do begin + {skip over delimiters} + while (I <= SLen) and (S[I] in WordDelims) do + Inc(I); + + {if we're not beyond end of S, we're at the start of a word} + if I <= SLen then + Inc(Count); + + {find the end of the current word} + while (I <= SLen) and not(S[I] in WordDelims) do + Inc(I); + end; + + WordCount := Count; + end; + + function ExtractWord(N : Integer; S : string; WordDelims : CharSet) : string; + {-Given a set of word delimiters, return the N'th word in S} + var + I : Word; {!!.12} + Count, Len : Integer; + SLen : Longint; + Str : String; + begin + Count := 0; + I := 1; + Len := 0; + Str := ''; + SLen := Length(S); + +// ExtractWord[0] := #0; + + while (I <= SLen) and (Count <> N) do begin + {skip over delimiters} + while (I <= SLen) and (S[I] in WordDelims) do + Inc(I); + + {if we're not beyond end of S, we're at the start of a word} + if I <= SLen then + Inc(Count); + + {find the end of the current word} + while (I <= SLen) and not(S[I] in WordDelims) do begin + {if this is the N'th word, add the I'th character to Tmp} + if Count = N then begin + Inc(Len); + SetLength(Str, Len); +// ExtractWord[0] := Char(Len); + Str[Len] := S[I]; +// ExtractWord[Len] := S[I]; + end; + + Inc(I); + end; + end; + ExtractWord := Str; + end; + +function SearchAndReplace( S, Old, New:String ):String; +var + Ts : String; + i : Integer; +begin + Ts := S; + i := Pos(Old, Ts); + while i>0 do begin + Delete(Ts, i, Length(Old)); + Insert(New, Ts, i); + i := Pos(Old, Ts); + end; + SearchAndReplace := Ts; +end; + +end. -- cgit v1.2.1