1) Функция Length(Str: String) - возвращает длину строки (количество символов). Пример:
var
Str: String; L: Integer;
{ … }
Str:=’Hello!’;
L:=Length(Str); { L = 6 }
2) Функция SetLength(Str: String; NewLength: Integer) позволяет изменить длину строки. Если строка содержала большее количество символов, чем задано в функции, то “лишние” символы обрезаются. Пример:
var Str: String;
{ … }
Str:=’Hello, world!’;
SetLength(Str, 5); { Str = “Hello” }
3) Функция Pos(SubStr, Str: String) - возвращает позицию подстроки в строке. Нумерация символов начинается с единицы (1). В случае отсутствия подстроки в строке возращается 0. Пример:
var Str1, Str2: String; P: Integer;
{ … }
Str1:=’Hi! How do you do?’;
Str2:=’do’;
P:=Pos(Str2, Str1); { P = 9 }
4) Функция Copy(Str: String; Start, Length: Integer) - возвращает часть строки Str, начиная с символа Start длиной Length. Ограничений на Length нет - если оно превышает количество символов от Start до конца строки, то строка будет скопирована до конца. Пример:
var Str1, Str2: String;
{ … }
Str1:=’This is a test for Copy() function.’;
Str2:=Copy(Str1, 11, 4); { Str2 = “test” }
5) Функция Delete(Str: String; Start, Length: Integer) - удаляет из строки Str символы, начиная с позиции Start длиной Length. Пример:
var Str1: String;
{ … }
Str1:=’Hello, world!’;
Delete(Str1, 6, 7); { Str1 = “Hello!” }
6) Функции UpperCase(Str: String) и LowerCase(Str: String) преобразуют строку соответственно в верхний и нижний регистры:
var Str1, Str2, Str3: String;
{ … }
Str1:=’hELLo’;
Str2:=UpperCase(Str1); { Str2 = “HELLO” }
Str3:=LowerCase(Str1); { Str3 = “hello” }
Строки можно сравнивать друг с другом стандартным способом:
var Str1, Str2, Str3: String; B1, B2: Boolean;
{ … }
Str1:=’123′;
Str2:=’456′;
Str3:=’123′;
B1:=(Str1 = Str2); { B1 = False }
B2:=(Str1 = Str3); { B2 = True }
Если строки полностью идентичны, логическое выражение станет равным True.
Июнь
30,
2008
— Рубрика: Delphi
Метки: True, Стандартные функции, Строки
Строковый тип данных - один из самых часто используемых в программах тип. Действительно, без него не обходится практически ни один алгоритм. Даже программы, выполняющие исключительно математические операции, порой, написаны с использованием строковых типов данных.
Строка - это последовательность символов. В Object Pascal существует несколько строковых типов. Вот основные из них:Тип данных Максимальная длина Используемая память Используется для…
ShortString 255 символов от 2 до 256 байт Минимальная совместимость, хранение небольших строк
AnsiString около 2^31 символов от 4 байт до 2 Гб 8-битные символы (ANSI), DBCS ANSI, MBCS ANSI и т.д.
WideString около 2^30 символов от 4 байт до 2 Гб Юникод-символы - многопользовательские сервера, мультиязыковые приложения
Для большинства целей подходит тип AnsiString (иногда называется Long String).
Июнь
28,
2008
— Рубрика: Delphi
Метки: Object Pascal, типы данных
uses ShellApi;
function WindowsCopyFile(FromFile, ToDir : string) : boolean;
var F : TShFileOpStruct;
begin
F.Wnd := 0; F.wFunc := FO_COPY;
FromFile:=FromFile+#0; F.pFrom:=pchar(FromFile);
ToDir:=ToDir+#0; F.pTo:=pchar(ToDir);
F.fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMATION;
result:=ShFileOperation(F) = 0;
end;
// Пример копирования:
procedure TForm1.Button1Click(Sender: TObject);
begin
if not WindowsCopyFile(’C:\UTIL\ARJ.EXE’, GetCurrentDir) then
ShowMessage(’Copy Failed’);
end;
Июнь
19,
2008
— Рубрика: Delphi
Метки: CopyFile, Windows, Копирование
uses LZExpand;
procedure CopyFile(FromFileName, ToFileName : string);
var
FromFile, ToFile: File;
begin
AssignFile(FromFile, FromFileName);
AssignFile(ToFile, ToFileName);
Reset(FromFile);
try
Rewrite(ToFile);
try
if LZCopy(TFileRec(FromFile).Handle, TFileRec(ToFile).Handle)<0 then
raise Exception.Create(’Error using LZCopy’)
finally
CloseFile(ToFile);
end;
finally
CloseFile(FromFile);
end;
end;
Июнь
5,
2008
— Рубрика: Delphi
Метки: LZExpand, Копирование
type
TCallBack=procedure (Position,Size:Longint); {Для индикации процесса копирования}
procedure FastFileCopy(Const InfileName, OutFileName: String; CallBack: TCallBack);
Const BufSize = 3*4*4096; { 48Kbytes дает прекрасный результат }
type
PBuffer = ^TBuffer;
TBuffer = array [1..BufSize] of Byte;
var
Size : integer;
Buffer : PBuffer;
infile, outfile : File;
SizeDone,SizeFile: Longint;
begin
if (InFileName <> OutFileName) then
begin
buffer := Nil;
AssignFile(infile, InFileName);
System.Reset(infile, 1);
try
SizeFile := FileSize(infile);
AssignFile(outfile, OutFileName);
System.Rewrite(outfile, 1);
try
SizeDone := 0; New(Buffer);
repeat
BlockRead(infile, Buffer^, BufSize, Size);
Inc(SizeDone, Size);
CallBack(SizeDone, SizeFile);
BlockWrite(outfile,Buffer^, Size)
until Size < BufSize;
FileSetDate(TFileRec(outfile).Handle,
FileGetDate(TFileRec(infile).Handle));
finally
if Buffer <> Nil then Dispose(Buffer);
System.close(outfile)
end;
finally
System.close(infile);
end;
end else
Raise EInOutError.Create(’File cannot be copied into itself’);
end;
Июнь
1,
2008
— Рубрика: Delphi
Метки: Pascal, Копирование