Функции работы со строками |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Функции работы со строками |
mj |
25.02.2003 3:23
Сообщение
#1
|
Adminь Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Однажды пытался в Delphi найти функции обработки и разбора строк, но ничего не нашёл :(
По ходу действий стал писать свои и собрал уже некоторое количество функции, так вот предлагаю оставить здесь всё что было написано вами для собственных целей для сбора модуля для работы со строками... А вот что получилось у меня: // Функции для работы с ini файлами и для разбора строк // Проверка строки на содержание данных (ini file) function TestStr(Str: string): Boolean; // Проверка строки на наличие коментария (ini file) function TestCommentStr(Str: string): Boolean; // Извлекает строку до символа #13(#10) и вырезает её из основной строки (Str) function ExtractStr(var Str: string; AutoTrim: Boolean = False; Ex: Boolean = False): string; // Извлекает строку до разделителя Sep и вырезает её из основной строки (Str) function ExtractStrSep(Sep: string; var Str: string; Ex: Boolean = False): string; // Извлекает параметр ParName из списка строк Str и помещает его в ParStr, в случае неудачи возвращает False (ini file) function ExtractValue(Str, ParName: string; var ParStr: string): Boolean; // Преобразует масив в виде строки в масив Delphi function ExtractMasToStaticArray(Source: string; var Dest: array of string): Boolean; // Преобразует масив Delphi в масив Delphi в виде строки function InvolvingStaticArrayToMas(var Dest: string; Source: array of string): Boolean; // Преобразует масив в виде строки в список строк разделённых #13#10 function ExtractMasToStr(Source: string; var Dest: string): Boolean; // Преобразует список строк разделённых #13#10 в масив в виде строки function InvolvingStrToMas(Source: string; var Dest: string): Boolean; // Похоже на ExtractStr, но с дополнительными возможностями (ini file) function NextInfStr(var Str, ExtStr: string; NillStop: Boolean = False): Boolean; // Ну тут вроде так будет ясно function ReplaceStr(FindStr, ReplStr, EventStr: string; IgnoreCase: Boolean = False): string; // Упаковывает строку в безопасную строку (%**) function StrPak(Str: string; CharPak: string = ''; CharNoPak: string = ''): string; // Распаковывает строку из безопасной строки (%**) function StrUnPak(Str: string): string; // Функции для работы со списками строк function StrAddLine(AddStr: string; var Str: string): Boolean; function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean; function StrDelLine(var Str: string; Index: Integer): Boolean; function StrMoveLine(var Str: string; FromLine, ToLine: Integer): Boolean; function StrGetLine(Str: string; Index: Integer): string; function StrSetLine(NewStr: string; var Str: string; Index: Integer): Boolean; function StrFindLine(FindStr, Str: string; Start: Integer; IgnoreCase: Boolean = False): Integer; function StrFindBeginLine(Str: string; Index: Integer; Start: Integer = 1): Integer; function StrLenLine(Str: string; Start: Integer): Integer; function StrCountLine(Str: string): Integer; // Функции преоразования function IntToHex(Value: Integer; MinDigits: Byte = 2; MaxDigits: Byte = 8): string; function HexToInt(Value: string; Def: Integer = 0): Integer; function HexToIntDef(Value: string; var PosErr: Integer; Def: Integer = 0): Integer; function NextWord(var Value: string; Splin: string = #32): string; function StrToColor(Str: string): TColor; // Просто возвращает параметр Value function toconst(Value: string): string; // "Фамилию Имя Отчество" преобразует в "Фамилия И О" function FIOToShortFIO(Value: string): string; // Преобразует строку формата С в формат Delphi (преобразуются t r n и т.д.) function CtoPasStr(S: PChar): string; // Генерирует случайный пароль function GeneratePassword(Size: Byte = 8; Chars: string = 'abcdefghijklmonqrstuvwxyz'): string; |
Vit |
25.02.2003 17:33
Сообщение
#2
|
Бывалый Группа: Пользователи Сообщений: 156 Пол: Мужской Репутация: 0 |
function ReplaceStr(FindStr, ReplStr, EventStr: string; IgnoreCase: Boolean = False): string;
Есть стандартная функция - StringReplace function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean; Есть стандартная функция - Insert function StrDelLine(var Str: string; Index: Integer): Boolean; Есть стандартная функция - Delete function StrFindLine(FindStr, Str: string; Start: Integer; IgnoreCase: Boolean = False): Integer; Есть стандартные функции - Pos, AnsiPos и т.п. function StrLenLine(Str: string; Start: Integer): Integer; function StrCountLine(Str: string): Integer; // Функции преоразования function IntToHex(Value: Integer; MinDigits: Byte = 2; MaxDigits: Byte = 8): string; function HexToInt(Value: string; Def: Integer = 0): Integer; Есть стандартные одноимённые функции IntToHex, HexToInt function StrToColor(Str: string): TColor; // Просто возвращает параметр Value А RTTI нельзя использовать? -------------------- With the best regards Vit
Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой |
Vit |
25.02.2003 17:54
Сообщение
#3
|
Бывалый Группа: Пользователи Сообщений: 156 Пол: Мужской Репутация: 0 |
Вот некоторые стандартные функции дельфи по работе со строками:
AdjustLineBreaks function AnsiCompareStr function AnsiCompareText function AnsiContainsStr function AnsiContainsText function AnsiDequotedStr function AnsiEndsStr function AnsiEndsText function AnsiExtractQuotedStr function AnsiIndexStr function AnsiIndexText function AnsiLeftStr function AnsiLowerCase function AnsiMatchStr function AnsiMatchText function AnsiMidStr function AnsiPos function AnsiQuotedStr function AnsiReplaceStr function AnsiReplaceText function AnsiResemblesProc variable AnsiResemblesText function AnsiReverseString function AnsiRightStr function AnsiSameStr function AnsiSameText function AnsiStartsStr function AnsiStartsText function AnsiUpperCase function CompareStr function CompareText function Concat function Copy function DecodeSoundExInt function DecodeSoundExWord function Delete procedure DupeString function Insert procedure IsDelimiter function LastDelimiter function LeftBStr function LeftStr function Length function LowerCase function MidBStr function MidStr function NullStr constant Pos function PosEx function QuotedStr function ReverseString function RightBStr function RightStr function SameText function SetLength procedure SetString procedure SoundEx function SoundExCompare function SoundExInt function SoundExProc function SoundExSimilar function SoundExWord function Str procedure StringOfChar function StringReplace function StuffString function Trim function TrimLeft function TrimRight function UpperCase function Val procedure WideLowerCase function WideSameStr function WideSameText function WideUpperCase function WrapText function BinToHex procedure BoolToStr function FalseBoolStrs variable HexToBin function StrToBool function StrToBoolDef function StrToInt function StrToInt64 function StrToInt64Def function StrToIntDef function TrueBoolStrs variable TryStrToBool function TryStrToInt function TryStrToInt64 function MatchesMask function AnsiStrComp AnsiStrIComp AnsiStrLComp AnsiStrLIComp StrComp StrIComp StrLComp StrLIComp AnsiStrLower AnsiStrUpper StrLower StrUpper StrCat StrLCat AnsiStrPos AnsiStrScan AnsiStrRScan StrPos StrScan StrRScan StrCopy StrLCopy StrECopy StrMove StrPCopy StrPLCopy В общем - читайте хэлп и исходники, иногда помогает... -------------------- With the best regards Vit
Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой |
mj |
26.02.2003 3:57
Сообщение
#4
|
Adminь Группа: Администраторы Сообщений: 803 Пол: Мужской Реальное имя: Евгений Репутация: 5 |
Цитата function ReplaceStr(FindStr, ReplStr, EventStr: string; IgnoreCase: Boolean = False): string; Есть стандартная функция - StringReplace Может быть... Цитата function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean; Есть стандартная функция - Insert Ну есть Insert и что из этого? Функция Insert вставляет одну строку в другую, а мои функции как там ясно написано работают со списками строк разделённых сивлолами #13, #10. Цитата function StrDelLine(var Str: string; Index: Integer): Boolean; Есть стандартная функция - Delete function StrFindLine(FindStr, Str: string; Start: Integer; IgnoreCase: Boolean = False): Integer; Есть стандартные функции - Pos, AnsiPos и т.п. Тоже самое Цитата // Функции преоразования function IntToHex(Value: Integer; MinDigits: Byte = 2; MaxDigits: Byte = 8): string; function HexToInt(Value: string; Def: Integer = 0): Integer; Есть стандартные одноимённые функции IntToHex, HexToInt Если программа пишется без VCL то эти функции пригодятся Цитата function StrToColor(Str: string): TColor; // Просто возвращает параметр Value А RTTI нельзя использовать? Многие написанные мною функцию имеют одноимённые функции так как многие мои функции только корректируют работу стандартных и в нутри происходит обращение к стандартным функцим. Приведу примеры: Код function StrToColor(Str: string): TColor; begin if Str='' then begin Result := 0; Exit; end; if Str[1]='#' then Str[1] := '$'; if not IdentToColor(Str, Longint(Result)) and not IdentToColor('cl'+Str, Longint(Result)) then Result := TColor(StrToInt(Str)); end; function StrAddLine(AddStr: string; var Str: string): Boolean; var L: Integer; begin Result := Pos(#13, AddStr)=0; if Result then begin L := Length(Str); if (L>0) and (Str[L]<>#13) and ((L=1) or (Str[L]<>#10) or (Str[L-1]<>#13)) then Str := Str+#13#10; Str := Str+AddStr+#13#10; end; end; function StrInsLine(AddStr: string; var Str: string; Index: Integer): Boolean; var P: Integer; begin P := StrFindBeginLine(Str, Index); if P<=0 then Str := Str+AddStr+#13#10 else Insert(AddStr+#13#10, Str, P); Result := True; end; function StrDelLine(var Str: string; Index: Integer): Boolean; var P, L: Integer; begin P := StrFindBeginLine(Str, Index); Result := P>0; if not Result then Exit; L := StrFindBeginLine(Str, 1, P); if L>0 then Delete(Str, P, L-P) else Setlength(Str, P-1); Result := True; end; |
Vit |
26.02.2003 13:23
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 156 Пол: Мужской Репутация: 0 |
1) из описания не очень то понятно отличие от стандартных
2) Зачем использовать строки с #13#10? Для этого используют потомков TStrings, и вместо нагромождения функций, лучше было написать свой класс от TStrings со всеми нужными методами Кстати у меня есть модуль для работы со строками примерно раз в 30 больше, прислать? -------------------- With the best regards Vit
Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой |
C2H5OH |
6.06.2003 13:06
Сообщение
#6
|
Гость |
Код {*************************************************************} { ПОЛУЧЕНИЕ СЕКЦИИ СТРОКИ РАЗДЕЛЕННОЙ СИМВОЛОМ-РАЗДЕЛИТЕЛЕМ } {*************************************************************} function GetSectionFromString(InString: String; NumberOfSection: Integer; Delimiter: Char): String; // InString - Входная строка // NumberOfSection - Номер получаемой секции // Delimiter - Символ-разделитель {-------------------------------------------------------------} var Index: Integer; LastPos: Integer; CurrentString: String; begin Index := 0; CurrentString := InString; repeat Inc(Index); Result := CurrentString; LastPos := Pos(Delimiter, CurrentString); if LastPos = 0 then // Достигнута последняя секция Break; CurrentString := RightStr(CurrentString, Length(CurrentString) - LastPos); until Index = NumberOfSection; if Index = NumberOfSection then begin if LastPos <> 0 then Result := LeftStr(Result, LastPos -1); end else Result := ''; end; |
Текстовая версия | 22.09.2024 0:02 |