IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Функции работы со строками
сообщение
Сообщение #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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 156
Пол: Мужской

Репутация: -  0  +


1) из описания не очень то понятно отличие от стандартных
2) Зачем использовать строки с #13#10? Для этого используют потомков TStrings, и вместо нагромождения функций, лучше было написать свой класс от TStrings со всеми нужными методами

Кстати у меня есть модуль для работы со строками примерно раз в 30 больше, прислать?


--------------------
With the best regards Vit

Все всегда уезжают навсегда. Вернуться невозможно-вместо нас всегда возвращается кто-то другой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.10.2020 11:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name