Changeset 82 for trunk/NewView/StringUtilsUnit.pas
- Timestamp:
- Feb 25, 2007, 4:15:10 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NewView/StringUtilsUnit.pas
r75 r82 45 45 // StrExtractStrings('1x2x3\x4', "x", '\') -> 46 46 // returns 4 strings: "1", "", "2" and "3x4" 47 Procedure StrExtractStrings(Var aResult : TStringList; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char); 47 Procedure StrExtractStrings(Var aResult : TStrings; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char); 48 49 // same as StrExtractStrings but ignores empty strings 50 Procedure StrExtractStringsIgnoreEmpty(Var aResult : TStrings; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char); 51 52 // removes all occurences of char from aSetOfChars from the beginning 53 // of a String. 54 Function StrTrimLeftChars(const aReceiver: String; const aSetOfChars: TSetOfChars): String; 55 56 // removes all occurences of char from aSetOfChars from the end 57 // of a String. 58 Function StrTrimRightChars(const aReceiver: String; const aSetOfChars: TSetOfChars): String; 48 59 49 60 // removes all occurences of char from aSetOfChars from the beginning … … 53 64 // removes all blanks from beginning and end 54 65 Function StrTrim(const aReceiver: String): String; 66 67 // Returns the aCount leftmost chars of aString 68 Function StrLeft(const aString : String; const aCount : Integer) : String; 55 69 56 70 // returns true if the String ends with the provides one … … 114 128 begin 115 129 result := ''; 116 for i := 0 To stringList.count-1 do130 for i := 0 to stringList.count-1 do 117 131 begin 118 132 if (i > 0) then result := result + '&'; … … 156 170 157 171 158 Procedure StrExtractStrings(Var aResult: TStringList; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char); 172 Procedure PrivateStrExtractStrings( Var aResult: TStrings; 173 const aReceiver: String; 174 const aSetOfChars: TSetOfChars; 175 const anEscapeChar: char; 176 const anIgnoreEmptyFlag : boolean); 159 177 Var 160 178 i : Integer; … … 189 207 if (tmpChar IN aSetOfChars) then 190 208 begin 191 aResult.add(tmpPart); 209 if (NOT anIgnoreEmptyFlag) OR ('' <> tmpPart) then 210 begin 211 aResult.add(tmpPart); 212 end; 192 213 tmpPart := ''; 193 214 i := i + 1; … … 199 220 end; 200 221 end; 201 aResult.add(tmpPart); 222 223 if (NOT anIgnoreEmptyFlag) OR ('' <> tmpPart) then 224 begin 225 aResult.add(tmpPart); 226 end; 227 end; 228 229 230 Procedure StrExtractStrings(Var aResult: TStrings; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char); 231 Begin 232 PrivateStrExtractStrings(aResult, aReceiver, aSetOfChars, anEscapeChar, false); 233 end; 234 235 236 Procedure StrExtractStringsIgnoreEmpty(Var aResult: TStrings; Const aReceiver: String; const aSetOfChars: TSetOfChars; const anEscapeChar: char); 237 Begin 238 PrivateStrExtractStrings(aResult, aReceiver, aSetOfChars, anEscapeChar, true); 239 end; 240 241 242 Function StrTrimLeftChars(const aReceiver: String; const aSetOfChars: TSetOfChars): String; 243 Var 244 i : Longint; 245 Begin 246 i := 1; 247 // mem optimization 248 if aReceiver[i] in aSetOfChars then 249 begin 250 while i <= Length(aReceiver) do 251 begin 252 if aReceiver[i] in aSetOfChars then 253 inc(i) 254 else 255 break; 256 end; 257 result := Copy(aReceiver, i, Length(aReceiver)-i+1); 258 end 259 else 260 begin 261 result := aReceiver; 262 end; 263 end; 264 265 266 Function StrTrimRightChars(const aReceiver: String; const aSetOfChars: TSetOfChars): String; 267 Var 268 i : Longint; 269 Begin 270 i := Length(aReceiver); 271 272 // mem optimization 273 if aReceiver[i] in aSetOfChars then 274 begin 275 while i > 0 do 276 begin 277 if aReceiver[i] in aSetOfChars then 278 dec(i) 279 else 280 break; 281 end; 282 result := Copy(aReceiver, 1, i); 283 end 284 else 285 begin 286 result := aReceiver; 287 end; 202 288 end; 203 289 … … 207 293 i : Longint; 208 294 j : Longint; 209 Begin 295 tmpNeedCopy : boolean; 296 Begin 297 tmpNeedCopy := false; 210 298 i := 1; 211 299 while i < Length(aReceiver) do 212 300 begin 213 301 if aReceiver[i] in aSetOfChars then 214 inc(i) 215 else 216 break; 302 begin 303 inc(i); 304 tmpNeedCopy := true; 305 end 306 else 307 begin 308 break; 309 end; 217 310 end; 218 311 … … 221 314 begin 222 315 if aReceiver[j] in aSetOfChars then 223 dec(j) 316 begin 317 dec(j); 318 tmpNeedCopy := true; 319 end 224 320 else 321 begin 225 322 break; 226 end; 227 228 result := Copy(aReceiver, i, j-i+1); 323 end; 324 end; 325 326 if tmpNeedCopy then 327 begin 328 result := Copy(aReceiver, i, j-i+1); 329 end 330 else 331 begin 332 result := aReceiver; 333 end; 229 334 end; 230 335 … … 233 338 Begin 234 339 result := StrTrimChars(aReceiver, [' ']); 340 end; 341 342 343 Function StrLeft(const aString : String; const aCount : Integer) : String; 344 Begin 345 if aCount >= Length(aString) then 346 Result := aString 347 else 348 Result := copy(aString, 1, aCount); 235 349 end; 236 350
Note:
See TracChangeset
for help on using the changeset viewer.